Деплой бота
Предварительные условия
-
Наличие бот-сервера с ОС Linux.
-
На бот-сервере должен быть установлен
docker
иdocker-compose
.Убедитесь, что
docker
сервис запущен и enabled:systemctl status docker
Если он не запущен, то запустите его при помощи команды
sudo systemctl enable --now docker
. Командаenable
обеспечивает его автозапуск после включения системы. Контейнеры crestart: always
в этом случае тоже будут запущены. -
Необходим загруженный на сервер образ бота или SmartApp (например, через
scp
).
Подготовка к запуску
Загрузка образа
docker load < your_bot_image.tar
Примечание
Если образ был предварительно сжат, например, утилитой gzip
, то его название будет включать расширение .gz: your_bot_image.tar.gz
. Добавление расширения к имени не повлияет на процесс загрузки.
Создание общего хранилища
Чтобы каждый новый бот не создавал дополнительный экземпляр PostgreSQL и Redis, можно создать для ботов отдельную docker-сеть. При этом у каждого приложения будет своя БД.
Для этого нужно:
-
Создать директорию для PostgreSQL и Redis:
mkidr -p /opt/express/bots/storages
-
В этой директории создать файл
docker-compose.yml
со следующим содержимым:version: "3.8" services: postgres: image: postgres:13.2-alpine env_file: .env ports: - "5432:5432" restart: always networks: - express_bots_storages volumes: - /opt/express/bots/storages/postgresdata:/var/lib/postgresql/data logging: driver: "json-file" options: max-size: "10m" max-file: "10" redis: image: redis:6.2-alpine env_file: .env ports: - "6379:6379" restart: always networks: - express_bots_storages volumes: - /opt/express/bots/storages/redisdata:/data logging: driver: "json-file" options: max-size: "10m" max-file: "10" networks: express_bots_storages: name: express_bots_storages
-
В этой же директории создать файл
.env
cо следующим содержимым:Для генерации пароля используйтеPOSTGRES_USER="postgres" # Общий пользователь PostgreSQL, у бота будет свой собственный POSTGRES_PASSWORD="<GENERATE>"
openssl rand -hex 16
. -
Запустить контейнеры командой
docker-compose up -d
. -
Проверить, что в логах хранилищ нет ошибок, при помощи команды
docker-compose ps
.
Директория для бота/SmartApp
-
Создайте директорию для бота:
mkdir -p /opt/express/bots/your_bot
-
В этой директории создайте
docker-compose.yml
со следующим содержимым:version: "3.8" services: your_bot: image: your_bot container_name: your_bot env_file: .env ports: - "8000:8000" # Отредактируйте порт хоста (первый), если он уже занят restart: always depends_on: - postgres - redis logging: driver: "json-file" options: max-size: "10m" max-file: "10" networks: default: external: name: express_bots_storages
-
Создайте БД и пользователя.
Для генерации пароля используйте
openssl rand -hex 16
:docker exec -it storages_postgres_1 psql --user postgres
CREATE USER your_bot_user PASSWORD '<GENERATE>'; CREATE DATABASE your_bot_db; GRANT ALL PRIVILEGES ON DATABASE your_bot_db TO your_bot_user;
-
Создайте файл
.env
с переменными окружения. Минимальное содержание этого файла:BOT_CREDENTIALS="host@secret_key@bot_id" DEBUG=false # DB credentials ... SQL_DEBUG=false # Redis credentials ...
Примечание
Не забудьте зарегистрировать бота в панели администратора своего CTS, чтобы получить host
, secret_key
и bot_id
. Там же укажите URL бота (перед этим убедитесь, что он доступен извне).
Внимание
Иногда в проекте задействованы дополнительные утилиты и программы (SAQ для фоновых задач, ClickHouse и т.д.). В таком случае файлы .env
и docker-compose.yml
будут содержать дополнительные переменные окружения и контейнеры.
Запуск/остановка бота
-
Чтобы запустить бота, используйте команду:
docker-compose up -d
-
Чтобы проверить логи, используйте команду:
docker-compose logs
-
Чтобы остановить контейнеры, используйте команду:
docker-compose down