Реестр образов registry.omniflow.ru
0.63.1 | текущая |
Нужен сервер с Linux, публичным статическим IP и установленным Docker
(Engine 24+, плагин compose v2.20+). Ставьте Docker из
официального репозитория docker.com: в дистрибутивных пакетах
часто нет плагина compose, без которого установка не пройдёт.
docker version # Engine 24+
docker compose version # v2.20+
# Разрешаем своему пользователю работать с Docker без sudo.
# Все команды — и установщик, и docker compose — обращаются к сокету
# /var/run/docker.sock, а он принадлежит группе docker. Не состоя в ней,
# вы получите "permission denied" на первой же команде.
sudo usermod -aG docker $USER
# Теперь выйдите из системы и зайдите заново (для ssh — переподключитесь).
# Состав групп берётся в момент входа, текущая сессия о новой группе не знает:
# без повторного входа команды продолжат падать, хотя настроено уже верно.
id # в списке групп должна появиться docker
sudo, но не вперемешку. У root свой домашний каталог,
поэтому логин в реестр, сделанный под вашим пользователем, для
sudo docker просто не существует — оттуда берётся
no basic auth credentials. Вдобавок файлы инсталляции окажутся
с разными владельцами, и обычные команды перестанут в них писать.
Рекомендуемый вариант — обычный пользователь в группе docker.
Порты, которые должны быть свободны и открыты извне: 5060,
5080, 5061, 8443,
30000-30500/udp, а для веб-интерфейса — 80 и
443.
Реестр закрытый: логин и пароль выдаются вместе с поставкой. Без них не скачается ни установщик, ни сама платформа. Шаг делается один раз — Docker запоминает учётные данные в домашнем каталоге пользователя.
docker login registry.omniflow.ru
# успех выглядит как: Login Succeeded
# Проверяем, что доступ рабочий (маленьким образом (~8 МБ)):
docker pull registry.omniflow.ru/omniflow/alpine:3.20
Если проверка не прошла:
unauthorized — неверный пароль или логин;
no basic auth credentials — команда идёт под другим пользователем,
чем docker login (обычно из-за sudo);
denied — учётная запись есть, но прав на этот образ у неё нет;
no such host или таймаут — сервер не резолвит имя реестра либо
закрыт исходящий доступ на 443.
# Каталог инсталляции: сюда лягут конфиги, база, записи разговоров.
# Он и есть вся система — бэкап делается с него.
# В корне файловой системы папку создаёт только root, поэтому mkdir под sudo,
# а сразу за ним chown: каталог должен принадлежать ВАМ ещё до установщика.
# Он определяет владельца по каталогу и передаёт ему всё, что создал; каталог
# root'а означает .env и конфиги, которые вы не сможете править без sudo.
sudo mkdir -p /app/omniflow
sudo chown "$USER":"$USER" /app/omniflow
cd /app/omniflow
# CTL_HOST_DIR — чтобы установщик показывал ваши пути, а не свои внутренние:
# внутрь контейнера этот каталог виден как /install.
docker run --rm -it --pull always -v "$PWD:/install" -e CTL_HOST_DIR="$PWD" \
registry.omniflow.ru/omniflow/ctl:0.63.1 install
# По EXTERNAL_IP телефоны находят сервер, по PUBLIC_DOMAIN — браузер.
# Остальное установщик заполнил сам, включая пароли.
nano .env
# Первый запуск скачивает образы и создаёт схему базы — несколько минут.
docker compose up -d
Установщик сначала показывает будущую структуру каталогов и только после
подтверждения пишет на диск. Повторный запуск ничего не затирает. Вместе с
файлами он кладёт скрипт ./omniflow-ctl — дальше все команды
выполняются через него, длинный docker run больше не нужен.
Работающий стек ещё никому не звонит: в системе нет ни одного телефона.
Откройте панель по своему домену (логин admin, пароль показан в
конце установки), заведите SIP-точки — по одной на каждый аппарат, подключите
телефоны к внешнему IP сервера и позвоните с одной точки на другую: это разом
проверяет весь тракт. Остальное — в INSTALL.md, он лежит рядом с
инсталляцией.
# дамп базы (миграции необратимы поэтому лучше сделать перед обновлениями дамп)
docker compose exec -T postgres pg_dump -U postgres omniflow > backup.sql
./omniflow-ctl upgrade 0.63.1
docker compose pull && docker compose up -d
./omniflow-ctl doctor
alpine, asterisk, corenode, ctl, fail2ban, kamailio, mc, minio, nats, postgres, rtpengine, strategy-ai-reception, strategy-chat-queue, strategy-dial-by-code, strategy-not-work, strategy-operator-status, strategy-queue-operator, strategy-reminder-dialer, strategy-simple-main, strategy-speech-demo, ui, valkey