Телеграм парсер-сервис оповещений по ключевым словам
Стeк: Django 4.1, Telegram API, asyncio, selenium, celery, docker
-
Доработать бизнес систему (биллинг) - Актуальное динамичное значение на основе пересчета сметы - Конструктор расчета pay_rate по дням
- Расширение User сервис методов
- Рефактор TestUser
-
Проанализировать возможность привязать сообщения тг-бота к бд
-
Refactor SenderBot
-
Refactor "import mud-ball"
-
Подключить магазин
-
Добавление новых парсер-сервисов
-
Реклама по средству прокси-ботов
-
Реферальная система
-
PostgreSQL Backups найти подходящее решение без aws.s3
-
В продакшене научиться выводить flower/traefik dashboard
sequenceDiagram
actor user
participant telegrambot
participant Payment Broker
participant User
participant core
participant celery
user->>telegrambot: Пополнение счета
user-->>Payment Broker: Проведение оплаты
Payment Broker-->>telegrambot: Подтверждение оплаты
telegrambot->>User: Пополнение кошелька пользователя
Note over telegrambot,User: Обновление User wallet, pay_rate, premium_status
telegrambot->>core: Сохранение записи пополнения (Order)
core->>celery: Менеджмент подписок
celery->>User: Обновление premium_status
core->>celery: Биллинг пользователя
celery->>User: Ежедневное обновление pay_rate
user->>telegrambot: Добавление сервиса
telegrambot->>User: Обновление services, pay_rate
Note over telegrambot,User: Списание средств за 1 календарный день
user->>telegrambot: Удаление сервиса
telegrambot->>User: Обновление services, pay_rate
sequenceDiagram
actor user
participant celery
participant parser
participant db
celery->>parser: Задача
loop
parser->>parser: Парсинг ресурса
end
parser->>db: Сохранение записей
Note over parser,db: ParserEntry sent=False
celery->>db: Обработка ParserEntry
celery->>user: Отправка ParserEntry в телеграм
Note over celery,user: Если подходит по критериям
celery-->>db: обновление ParserEntry sent=True
sequenceDiagram
actor user
participant telegrambot
participant tickets
actor admin
participant celery
user->>telegrambot: Сообщение
telegrambot->>tickets: Создание тикета
admin-->>tickets: Обновляет ticket.reply
tickets->>celery: Создание задачи
Note over tickets,celery: post_save: if reply и status=UNSOLVED
celery->>user: Оправка reply-сообщения в телеграм
celery->>tickets: Обновление status=SOLVED
Running type checks with mypy:
mypy telegramnotify
To run the tests, check your test coverage, and generate an HTML coverage report:
coverage run -m pytest
coverage html
open htmlcov/index.html
pytest
pytest -v -m slow
pytest -v -m "not slow"
Gulp + Sass
# Установка:
npm install
# Запустить сервер
gulp
-
Создать желаемый VPS
-
Подключить домен к VPS
- Обновить указатели домена
ns.* - Добавить запись
CNAME(если потребуется)
- Обновить указатели домена
-
Подключиться по SSH (putty или консоль)
ssh user@host-ip
-
Обновить linux/ubuntu сервер
sudo apt update && sudo apt upgrade -y
-
Обновить часовой пояс
- Проверить текущее время
timedatectl
- Доступные пояса
timedatectl list-timezones
- Задать часовой пояс
sudo timedatectl set-timezone Europe/Moscow
- Проверить текущее время
-
Установить Supervisor
sudo apt-get -y install supervisorsudo systemctl enable supervisorsudo systemctl start supervisor
-
Установить python, pip, git, venv
sudo apt install python3.10sudo apt install python3-pipapt install python3.10-venvsudo apt install gitsudo apt install python3.10 python3-pip git -y
-
Установить Docker
- Инструкция Docker ubuntu
- На джино это упрощенно, через Пакеты приложений + опцию iptables
- Проверка:
docker run hello-world
-
Создать нового пользователя
adduser USER- находится в home/USERgpasswd -a USER sudo- добавить sudo праваsu - USER- сменить пользователя
-
Создать ssh ключи
ssh-keygen- Добавить публичный ключ vps в github ssh
{repo}/settings/keys/new
-
Инициализация git и Пулл проекта
mkdir PROJECTcd PROJECTgit initgit remote add origin git@github.com:DmitryPi/stripe-test.gitgit pull origin main
-
Установка и настройка venv или virtualenvwrapper (Если потребуется)
- venv
apt install python3.10-venvpython3 -m venv venvchmod +x venv/bin/activate- предоставить праваvenv/bin/activate
- virtualenvwrapper
pip install virtualenvwrapperexport VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.10export WORKON_HOME=~/Envsexport VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenvsource /usr/local/bin/virtualenvwrapper.sh
- venv
-
Добавить переменные production в
.envs/.prod -
Билд docker проекта
- Билд
docker-compose -f production.yml build
- Миграция бд
docker-compose -f production.yml run --rm django python manage.py migrate
- Создать суперюзера
docker-compose -f production.yml run --rm django python manage.py createsuperuser
- Запуск
docker-compose -f production.yml up
- Ребилд
docker-compose -f production.yml up --build
- Билд
-
Проверить логин/регистрацию
-
Проверить mailgun/sentry
-
supervisord
- Установка
pip install supervisor - Старт
supervisord
- Стоп
supervisorctl stop allsudo unlink /tmp/supervisor.sockилиsudo unlink /var/run/supervisor.sock
- Дополнительные команды
supervisorctl status
- Установка
# containers status
docker-compose -f production.yml ps
# containers logs
docker-compose -f production.yml logs
# remove unused(dangling) images
docker image prune
# django shell run
docker-compose -f production.yml run --rm django python manage.py shell
# django dump db data
docker-compose -f production.yml run --rm django bash
python -Xutf8 manage.py dumpdata {app}.{Model -o data.json
# Открыть вторую консоль, сохраняя сессию в старой
docker cp 5f5cecd3798e:/app/data.json ./data.json
# If you want to scale application
# ❗ Don’t try to scale postgres, celerybeat, or traefik
docker-compose -f production.yml up --scale django=4
docker-compose -f production.yml up --scale celeryworker=2
-
ACME certificate failure
- Возможен конфликт хост сервиса, если он предоставляет функцию ssl сертификации
- Let's encrypt рейт лимит достигнут (5 в неделю) - проверить
-
ERR_TOO_MANY_REDIRECTS
- Происходит из-за рекурсии портов 80<-->443(http-https)
-
Traefik 404 error
- Конфликт ssl-сертификатов или отсутствие выделенного IP
- Анализ: изменить лог-левел на DEBUG в traefik.yml
- Решение: убрать tls настройки из traefik.yml, купить выделенный ip
- Конфликт ssl-сертификатов или отсутствие выделенного IP
-
Django POST 403 csrf - Origin checking failed
- В production.py обновить CSRF_TRUSTED_ORIGINS
1.2.0 - (19.01.2023)
- Редизайн архитектуры проекта
1.1.0 - (18.01.2023)
- Редизайн веб-версии сайта
- Система обратной связи
- Покрытие тестами
1.0.0 - release - (10.01.2023)
- Регистрация пользователя
- Личный кабинет пользователя в телеграм
- Доступно обновление настроек пользователем
- Подписки на сервис: Expired, Trial, Regular, Permanent
- Реализованные сервисы подписки: FL.ru
- Возможность обратной связи по средству телеграм и админки джанго
- Контроль задач в celery
- Задачи на парсинг сервисов
- Задачи по обновление подписок