Установка BARY в Docker
March 17, 2026Введение
Эта инструкция описывает установку BARY в Docker на Linux-сервере.
Схема запуска такая:
baryзапускаетserver.jsкак постоянный сервисinstall.jsзапускается внутри уже работающего контейнераbarybaryиспользуетhostnetwork для корректной работы discovery, mDNS и HomeKit- весь рабочий runtime BARY хранится на хосте в каталоге
runtime, который монтируется в контейнер как/srv - SSH-ключи контейнера хранятся отдельно в каталоге
.ssh, который монтируется в/root/.ssh - при необходимости позже можно перейти на MySQL
Что понадобится
- Linux-сервер с установленными Docker и Docker Compose
- доступ к терминалу с правами на запуск Docker
- свободный TCP-порт
80для веб-интерфейса - свободный UDP-порт
5353для mDNS/Bonjour
Проверьте, что Docker доступен:
docker --version
docker compose version
1. Создайте рабочую директорию
mkdir -p /opt/stacks/bary
cd /opt/stacks/bary
2. Создайте Dockerfile
FROM node:16-bullseye
RUN apt-get -y update
RUN DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata
RUN apt-get install -y iproute2 dnsmasq hostapd iw autoconf automake libtool g++ pkg-config mosquitto sqlite3 samba samba-client ntp libudev-dev build-essential
RUN apt-get install -y smbclient python3
RUN apt-get install -y git wget zip
RUN apt-get install -y ffmpeg
RUN apt-get install -y avahi-daemon avahi-discover libnss-mdns libavahi-compat-libdnssd-dev
RUN mkdir -p /srv
WORKDIR /srv
RUN wget http://bary.io/bary-core-dev.zip -O core.zip
RUN wget http://bary.io/bary-client-latest.zip -O www.zip
RUN unzip -o core.zip
RUN rm core.zip
RUN rm -rf www
RUN mkdir -p www
RUN unzip -o www.zip -d /srv/www
RUN rm www.zip
RUN cp -n ./package_example.json ./package.json
RUN npm install
RUN npm install mysql2
RUN sed -i 's/#enable-dbus=yes/enable-dbus=yes/g' /etc/avahi/avahi-daemon.conf
EXPOSE 80/tcp
EXPOSE 5353/udp
CMD /etc/init.d/dbus restart && /etc/init.d/avahi-daemon restart && node /srv/server.js
3. Создайте docker-compose.yml
services:
mysql:
image: mysql:8.0
container_name: bary-mysql
restart: unless-stopped
environment:
MYSQL_DATABASE: bary
MYSQL_USER: bary
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
command:
- --default-authentication-plugin=mysql_native_password
volumes:
- ./mysql:/var/lib/mysql
ports:
- '3306:3306'
bary:
build: .
container_name: bary
restart: unless-stopped
depends_on:
- mysql
network_mode: host
volumes:
- ./runtime:/srv
- ./.ssh:/root/.ssh
baryзапускается вhostnetwork. Это рекомендуется для Linux-сервера, если используются HomeKit, mDNS и discovery в локальной сети.
mysqlв compose уже подготовлен для последующего перехода на MySQL.В этой схеме весь runtime смонтирован целиком как
./runtime:/srv. Это означает, что рабочие файлы BARY живут на хосте в одном каталоге и сохраняются после пересоздания контейнера.Каталог
.sshвынесен отдельно, чтобы ключи для внешних SSH-драйверов не терялись после пересоздания контейнера.
Важно про host network
- Эта схема рассчитана на Linux-сервер. На macOS и Windows поведение
hostnetwork отличается. - Порты
80,8000на хосте должны быть свободны, так какbaryбудет слушать их напрямую. - Порт
5353/udpнужен для mDNS/Bonjour discovery. Если он уже занят другим сервисом на хосте, обнаружение устройств и сетевые объявления будут конфликтовать. - HomeKit использует не только mDNS, поэтому для корректной работы важна вся сетевая схема целиком, а не только один порт.
- Если на сервере уже работает reverse proxy или другой веб-сервис на
80, эту схему нужно адаптировать отдельно.
4. Создайте каталоги runtime и SSH-ключей
mkdir -p runtime mysql .ssh
Каталог runtime будет наполняться самим BARY в процессе установки, поэтому заранее создавать в нём ничего не требуется.
Если планируются внешние SSH-драйверы, поместите ключи в .ssh:
chmod 700 .ssh
chmod 600 .ssh/id_rsa
chmod 644 .ssh/id_rsa.pub
5. Проверьте права
chmod 755 runtime mysql
ls -ld runtime mysql .ssh
ls -l .ssh
Если каталоги были созданы от root, назначьте владельца:
sudo chown -R $USER:$USER /opt/stacks/bary
Быстрая проверка перед запуском
ls -ld /opt/stacks/bary /opt/stacks/bary/runtime /opt/stacks/bary/mysql /opt/stacks/bary/.ssh
ls -la /opt/stacks/bary/.ssh
Ожидаемый результат:
- каталоги
runtime,mysqlи.sshсуществуют - у текущего пользователя есть права на запись в
/opt/stacks/bary - если используются внешние SSH-драйверы, в
.sshестьid_rsaиid_rsa.pub
6. Создайте config/config.js
Контейнер читает конфиг из /srv/config/config.js, то есть фактически из runtime/config/config.js.
Пример минимального конфига для SQLite (создается автоматически):
const config = {
environment: 'production',
production: {
dialect: 'sqlite',
database: 'main',
storage: './database.sqlite',
},
log: {
path: './logs',
},
};
module.exports = config;
Если файла ещё нет, это не критично: после установки он обычно появляется внутри runtime.
7. Соберите образ и запустите сервер
sudo docker compose up --build -d bary
8. Выполните установочный скрипт
install.js запускается внутри уже работающего контейнера bary.
sudo docker exec bary node /srv/install.js
После завершения install.js основной сервис bary продолжит работать в фоне, а runtime останется на хосте в ./runtime, на экране появится QR-код.
9. Проверьте запуск
sudo docker ps -a
sudo docker compose logs bary --tail=100
ls -la runtime
После установки в runtime должны появиться рабочие файлы BARY, например:
server.jsconfiglogspersistpluginspackage.jsonnode_modules
10. Переход на MySQL
Если в дальнейшем потребуется перейти на MySQL, контейнер bary-mysql уже готов. Для этого нужно будет изменить конфиг внутри runtime/config/config.js.
Пример секции production:
production: {
username: 'root',
password: 'password',
database: 'bary',
host: '127.0.0.1',
dialect: 'mysql',
}
После изменения конфига перезапустите bary.
Примечания
runtimeмонтируется в/srvцеликом, поэтому это основной рабочий каталог BARY- содержимое
/srv, собранное в образе, при запуске перекрывается bind mount’ом./runtime:/srv - поэтому актуальное рабочее состояние всегда нужно смотреть в
runtime - логи находятся в
runtime/logs