Добавить в корзинуПозвонить
Найти в Дзене

Meshtastic Web client без docker и pnpm

Данная статья написана для тех, кто хочет хостить у себя Meshtastic Web Client (то что доступно по адресу client.meshtastic.org), но не смог разобраться самостоятельно, как его толком установить и запустить.
На момент написания этой статьи, документация к этому meshtastic web мягко говоря скудная. Вроде как тебе надо ты и разбирайся.
Вот я за вас и разобрался, и докладываю. Прежде всего хочу пояснить - для запуска клиента не нужен ни pnpm, ни docker. Всё что нужно - любой понятный вам http сервер (Apache, nginx, lighttpd любой пойдёт). И да, нам потребуется любой linux или bsd. Это может быть полезно тем, кто не хочет перегружать систему лишними службами, или тем у кого вообще нет возможности установить докер или pnpm, например в OpenBSD этих штук нет. К счастью, всё что нам нужно уже есть в гитхаб репозитории проекта. Заходим по адресу https://github.com/meshtastic/web/releases/latest На момент написания статьи последний релиз - v2.6.7. По ссылке нас автоматически переместит на

Данная статья написана для тех, кто хочет хостить у себя Meshtastic Web Client (то что доступно по адресу client.meshtastic.org), но не смог разобраться самостоятельно, как его толком установить и запустить.
На момент написания этой статьи, документация к этому meshtastic web мягко говоря скудная. Вроде как тебе надо ты и разбирайся.
Вот я за вас и разобрался, и докладываю.

Прежде всего хочу пояснить - для запуска клиента не нужен ни pnpm, ни docker. Всё что нужно - любой понятный вам http сервер (Apache, nginx, lighttpd любой пойдёт).

И да, нам потребуется любой linux или bsd.

Это может быть полезно тем, кто не хочет перегружать систему лишними службами, или тем у кого вообще нет возможности установить докер или pnpm, например в OpenBSD этих штук нет.

К счастью, всё что нам нужно уже есть в гитхаб репозитории проекта.

Заходим по адресу https://github.com/meshtastic/web/releases/latest

На момент написания статьи последний релиз - v2.6.7. По ссылке нас автоматически переместит на нужный релиз. Нам нужен файл build.tar

Скачиваем его через wget или curl.

Если качаете через curl, надо указывать флаг -L

curl -LO https://github.com/meshtastic/web/releases/download/v2.6.7/build.tar

Скачанный архив распакуем в новую директорию:

mkdir mesh
tar xf build.tar -C mesh

Теперь в директории mesh у нас будут лежать куча запакованных файлов:

-2

Может быть, мы могли бы настроить http сервер чтобы он распаковывал это на лету, но это будет не универсальное решение, потому что сложно, и явно не все http серверы так умеют. Кроме того, в официальном docker контейнере с веб клиентом, все эти файлы распакованы, значит и мы пойдём по этому пути.
Поэтому, достаточно просто всё распаковать.

Нужна утилита gunzip, которая есть практически в каждом linux, что называется "из коробки".

В папке i18n лежат локализации, из которых нам нужна только английская.

Однако, чтобы всё было красиво, распакуем вообще всё. Я для этого собрал все команды в один простой скриптик, который надо выполнять находясь в директории куда мы распаковали build.tar (у меня это mesh)

gunzip *.gz
cd devices/
gunzip *.gz
cd ../i18n/locales/
for i in *; do
cd $i; gunzip *.gz; cd ..
done

Вот и всё! У нас готова база, которую должен раздавать веб сервер.

Однако, я хочу уточнить некоторые моменты.

Поскольку в файле index.html ссылки прописаны не относительно, а абсолютно (например img=/icon.svg), мы не можем расположить client в какой-то отдельный путь (например http://server/meshtastic). Возможно, этого можно как-то добиться используя rewrites, но это опять же, не будет универсальное решение, так что, чтобы не усложнять себе жизнь, просто расположите нашу директорию там где у сервера document root. Если document root уже занят, можно воспользоваться виртуальными хостами.

Чтобы показать насколько всё просто, я взял lighttpd вот с таким вот простейшим конфигом:

# This is a minimal example config
# See /usr/share/doc/lighttpd
# and https://wiki.lighttpd.net/Docs:ConfigurationOptions

server.username = "http"
server.groupname = "http"
server.document-root = "/srv/http"
index-file.names = ( "index.html" )

Файлы я положил в /srv/http, не забыв сменить владельца на http, хоть это и не обязательно:

rm -r /srv/http
mv mesh /srv/http
chown -R http:http /srv/http
systemctl enable --now lighttpd

Всё, можем заходить и пробовать. Загрузка может быть не быстрой, т.к. в index.html указано несколько внешних stylesheet, которые будут замедлять загрузку.

-3

Как видите, запустить эту штуку даже значительно проще чем какой-нибудь php или, упаси боже, ruby проект. Но в документации к ней всё описано очень сложно, как будто нужно что-то билдить, хотя на самом деле всё уже сбилжено и сложено аккуратно в релизы.

Как изменить строку с адресом meshtastic.local

В дополнение хочу кое-что добавить. Как вы можете видеть на скриншоте, в строке адреса connect new device отображается доменное имя вместо meshtastic.local.
Всё дело в том, что веб интерфейс по задумке должен быть установлен на саму ноду, а не на сторонний веб сервер.
К счастью, можно немного поправить скрипт чтобы изменить это поведение.

По-умолчанию в скрипте предусмотрен сценарий, что в случае если доменное имя client.meshtastic.org или localhost, тогда в поле ip address подставляется meshtastic.local, а в ином случае подставляется имя веб сервера.
Я предлагаю изменить в скрипте имя client.meshtastic.org на имя нашего сервера.
К сожалению скрипт нечитабелен, но это можно сделать при помощи sed.
Обнаружьте скрипт в директории с клиентом. Он будет называться index-что-нибудь.js.
В нашем случае это
index-C9olJJTU.js

-4

Теперь, при помощи sed, можно поменять client.meshtastic.local на нужное нам.

sed -i 's/client.meshtastic.org/mtweb/' index-C9olJJTU.js

В моём случае имя сервера было mtweb. В вашем случае имя может быть другим.

Вот и всё, теперь ip адрес подставляется прямо как в client.meshtastic.org

-5