Запускаем несколько ботов на одной машине: nginx + CherryPy

В прошлый раз мы говорили о запуске нескольких ботов при помощи только лишь серверов CherryPy, а сегодня будем поступать правильно - в качестве роутера будем использовать nginx, а самоподписанные сертификаты заменим на официальные от Let's Encrypt.

Получаем сертификат от Let's Encrypt

Используйте официальную утилиту certbot для получения сертификата. Укажите свою почту и доменное имя вашего сервера (просто IP-адрес не подойдет). Обратите внимание на дату окончания действия сертификата! Каждые 90 дней его надо обновлять (данный процесс легко автоматизируется).

Общая схема взаимодействия

Общая схема взаимодействия

Настраиваем nginx

Скачиваем и устанавливаем веб-сервер nginx любым удобным для вас способом и открываем nginx.conf в каталоге /etc/nginx. Внутри блока http {} создаем блок server{} и заполняем его следующим образом (все основные параметры я взял из прошлой части):

server {
listen 443 ssl;
server_name (адрес вашего сервера);
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/letsencrypt/live/(адрес вашего сервера)/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/(адрес вашего сервера)/privkey.pem;
# Первый бот
location /AAAA/ {
proxy_pass http://127.0.0.1:7771/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
# Второй бот
location /ZZZZ/ {
proxy_pass http://127.0.0.1:7772/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}

Сохраняем файл конфигурации и перезапускаем службу: sudo service nginx reload.

Единственное, что надо изменить в самих ботах - это добавить bot.remove_webhook() и bot.set_webhook("https://(адрес вашего сервера)/хххх), где xxxx в нашем случае либо AAAA, либо ZZZZ, при этом аргумент certificate в методе set_webhook уже не нужен, т.к. сертификат не самоподписанный.