Проект состоит из двух частей:
- Телеграм-бот;
- Веб-приложение.
С помощью бота можно проверять баланс, пополнять счет, получать уведомления и общаться с поддержкой.
С помощью веб-приложения происходит авторизация в боте (через HTTPS). Также присутствует веб-интерфейс для операторов, предназначенный для выполнения рассылки уведомлений и новостей и для оказания технической поддержки через чат.
LanBilling
- система биллинга интернет провайдеровUserside
- ERP система для организации и упрощения работ с системами биллинга, логистикой, учётом и т.д.
- python 3.8
- docker
- postgresql
- mongodb
- nginx или apache
Перед сборкой отредактируйте конфигурационный файл config.py
. Следует указать все параметры для корректной работы
системы (параметры бизнес-процессов можно пропустить).
После собираем образ из директории проекта вместе с Dockerfile
с помощью команды
docker build -t irobot -f Dockerfile .
где t - название для образа.
В первый запуск создадим необходимые таблицы в БД и протестируем с помощью команды:
docker run -it --rm irobot test
Чтобы создать контейнер с ботом выполните:
docker run -it -p 5421:5421 --name irobot irobot bot
Для отсоединения от контейнера нажмите последовательно Ctrl+p Ctrl+q
(или Ctrl+p+q
).
Чтобы создать контейнер с веб-приложением выполните
docker run -it -p 8000:8000 --name irobot-web irobot web
Вы можете зайти внутрь запущенного контейнера, чтобы отредактировать файлы, запустить сервисы локально, прочитать логи и т.д.:
docker exec -it -u 0 irobot-web /bin/bash
Будьте осторожны! После удаления контейнера, все созданные файлы внутри контейнера будут потеряны! Но это не относится к остановке контейнера.
Снова создаем те же два контейнера, но добавляем флаги restart=always
volume
docker run -it -p 5421:5421 --restart=always --name irobot irobot bot
docker run -it -p 8000:8000 --restart=always --name irobot-web irobot web
Также, если вы хотите развернуть контейнеры по-другому, вместо флага --restart=always
,
контейнеры можно настроить как systemd сервисы.
Добавьте параметр в /etc/sysctl.conf
, чтобы избежать проблем при запуске большого количества веб-сервисов:
net.core.somaxconn=65535
Если вы используете iptables
или ufw
- не забудьте открыть порты.
В файле конфигурации сервера /etc/nginx/sites-enabled/myserver
добавьте upstream:
upstream irobot {
server 127.0.0.1:8000;
}
upstream irobot_webhook {
server 127.0.0.1:5421;
}
А в блок server
следующее:
location /irobot/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Script-name /irobot/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://irobot/;
proxy_buffering off;
proxy_redirect off;
}
location /irobot_webhook/ {
proxy_set_header X-Script-Name /irobot_webhook/;
proxy_set_header Host $host;
proxy_pass http://irobot_webhook/;
proxy_redirect off;
}
Далее тестируем и обновляем настройки:
$ nginx -t
$ nginx -s reload
Если вы будете разворачивать приложение без субдиректории (без
location /irobot/
), то вам будет необходимо установить параметр прокси в None -ROOT_PATH=None
- в файле конфигурацииconfig.py
.
Для администрирования зайдите на страницу https://{your-domain}/irobot/admin/
(или http://127.0.0.1:8000/irobot/admin/
при отладке), используя логин/пароль admin
/123456
.
Учтите! Панель администрирования доступна только из под локальной сети! Для добавления исключения добавьте необходимый IP в параметр
HOST_IP_LIST
в файлеconfig.py