BOT_CREDENTIALS
: Учётные данные бота. Состоят из блоковcts_host@secret_key@bot_id
, разделённых запятыми (один бот может быть зарегистрирован на нескольких CTS).cts_host
-- адрес админки,secret_key
иbot_id
можно получить после регистрации бота, нажав на его имя. Инструкция по регистрации бота находится в Руководстве администратора->
Эксплуатация корпоративного сервера->
Управление контактами->
Чат-боты.DB_CONNECTION
: DSN для БД PostgreSQL, например:postgres://postgres_user:postgres_password@postgres:port/db_name
REDIS_DSN
: DSN для хранилища Redis, например:redis://redis:6379/0
DEBUG
[false
]: Включает вывод сообщений уровняDEBUG
(по-умолчанию выводятся сообщения с уровняINFO
).SQL_DEBUG
[false
]: Включает вывод запросов к БД PostgreSQL.
Примечание: Чтобы легко добавлять новых ботов на сервер, хранилища находятся в отдельной docker-сети и используются несколькими ботами сразу (каждый обращается к своей БД, но к единственному экземпляру PosgreSQL/Redis). При необходимости хранилища и бота легко объединить в один docker-compose файл.
- Создайте директорию для PosgreSQL+Redis.
mkdir -p /opt/express/bots/storages
- В директории
/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
необходимыми данными (для генерации паролей используйте командуopenssl rand -hex 16
):
POSTGRES_USER="postgres" # Общий пользователь PostgreSQL, у бота будет свой собственный
POSTGRES_PASSWORD="<GENERATE>"
-
Запустите контейнеры командой
docker-compose up -d
. -
Убедитесь, что в логах хранилищ нет ошибок.
docker-compose logs
- Создайте БД и пользователя для бота (для генерации паролей используйте команду
openssl rand -hex 16
):
docker exec -it storages_postgres_1 psql --user postgres
CREATE USER todo_bot_user PASSWORD '<GENERATE>';
CREATE DATABASE todo_bot_db;
GRANT ALL PRIVILEGES ON DATABASE todo_bot_db
TO todo_bot_user;
- Скачайте репозиторий на сервер:
git clone <THIS_REPOSITORY> /opt/express/bots/todo-bot
cd /opt/express/bots/todo-bot
- Соберите образ:
docker build -t todo-bot .
При необходимости можно добавить дополнительные параметры. Например:
docker build -t todo-bot
--build-args UVICORN_CMD_ARGS="--ssl-ca-certs TEXT" .
- В директории
/opt/express/bots/todo-bot
создайте файлdocker-compose.deploy.yml
со следующим содержимым:
version: "3.8"
services:
todo-bot:
image: todo-bot
container_name: todo-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
- Создайте бота в панели администратора eXpress. Хост CTS (в строке браузера, когда вы в админке) и
"Secret key" пригодятся для заполнения переменной окружения
BOT_CREDENTIALS
. Заполните.env
необходимыми данными:
BOT_CREDENTIALS="example.cts.domain@d87f0dce2280d04b41f08e3adb1ae81c@5ce31515-32ae-435a-b6f4-748d2ced921d"
# etc.
Описание переменных и примеры можно посмотреть в соответствующем разделе.
- Запустите бота командой:
docker-compose up -d
-
Найдите бота через поиск корпоративных контактов (иконка человечка слева-сверху в мессенджере), напишите ему что-нибудь для проверки.
-
Убедитесь, что в логах бота нет ошибок.
docker-compose logs