Административная платформа - бот и веб админ-панель для управления пользователями и сообщениями, снижающая нагрузку на HR отдел.
- 📌 Цели проекта
- 🧑💼 Роли пользователей
- 📦 Технологии
- 🧪 Разработка и инструменты
- 🚀 Запуск проекта
- 🖥️ Запуск Docker Compose локально
- 🖥️ Деплой через Docker Compose
- ⚙️ CI/CD GitHub Actions
- 📥 Быстрый доступ к HR-информации через Telegram-бота
- ⚙️ Управление контентом и пользователями через Web-интерфейс
- 🌐 Поддержка WebApps в Telegram для запуска админки прямо в боте
- 👥 Роли: Пользователь, HR-менеджер, Администратор
| Роль | Возможности |
|---|---|
user |
Получает информацию от бота |
manager |
Управляет сообщениями |
admin |
Управляет пользователями, сообщениями, ролями, настройками |
| Технология | Назначение |
|---|---|
| Backend фреймворк | |
| ORM | |
| PostgreSQL драйвер | |
| Миграции | |
| Конфигурации |
| Технология | Назначение |
|---|---|
| Асинхронный Telegram-бот | |
| Встраиваемая админка |
| Технология | Назначение |
|---|---|
| Хеширование паролей | |
| Аутентификация |
| Технология | Назначение |
|---|---|
| UI для админки |
| Технология | Назначение |
|---|---|
| Кэш и сессии | |
| Хранение файлов |
- Uvicorn — ASGI сервер
- Ruff — линтер и автоформаттер
- Pre-commit — хуки
- Pip-audit — проверка уязвимостей
- Pip-chill — заморозка зависимостей
- Базовая версия Python - 3.11.
- В файле
requirements_style.txtнаходятся зависимости для стилистики. - В каталоге
srcнаходится базовая структура проекта - В файле
src/requirements.txtпрописываются базовые зависимости. - В каталоге
infraнаходятся настроечные файлы проекта. Здесь же размещать файлы для docker compose.
Для стилизации кода используется пакеты Ruff и Pre-commit
Проверка стилистики кода осуществляется командой
ruff checkЕсли одновременно надо пофиксить то, что можно поиксить автоматически, то добавляем параметр --fix
ruff check --fixЧто бы стилистика автоматически проверялась и поправлялась при комитах надо добавить hook pre-commit к git
pre-commit install-
Настройка переменных окружения
- Перейдите в директорию
infra/ - Создайте файл
.envна основе примера:cp .env.example .env
- Отредактируйте
.env, указав свои настройки (логин, пароль, имя БД, токен) - Создайте в
.envJWT_SECRET_KEY для верификации jwt токена:
echo "JWT_SECRET_KEY=$(python -c 'import secrets; print(secrets.token_urlsafe(32))')" >> .env
- Перейдите в директорию
-
Запуск базы данных
- Выполните команду:
docker compose -f docker-compose.yml up -d
- Проверить работу контейнера:
docker ps
- Выполните команду:
-
Работа с базой данных
- Для управления таблицами используйте любой DB-Viewer (DBeaver, TablePlus, pgAdmin)
- Параметры подключения:
- Хост:
localhost - Порт:
5432 - Данные для входа возьмите из файла
.env
- Хост:
-
Остановка базы данных
docker compose -f docker-compose.yml down
При возникновении проблем:
- Проверьте, что порт 5432 не занят
- Убедитесь, что значения в
.envкорректны - Проверьте логи контейнера:
docker logs <имя_контейнера>
pip-audit -r src/requirements.txtПример успешного результата:
No known vulnerabilities foundЕсли есть уязвимости, инструмент предложит обновить версии пакетов.
pip-chill > src/requirements.txt
FastAPI (веб-админка)
python -m uvicorn src.api.run_fastapi:app --reload
Telegram бот
python -m src.bot.main
Создание новой миграции
alembic revision --autogenerate -m "описание изменений"
Применение миграций
alembic upgrade head
Откат миграции
alembic downgrade -1
Для проверки работоспособности проекта перед отправкой на удалённый сервер реализован локальный запуск
- для этого перейдите в директорию
infra/ - заполните
.env.pre-productionпо образцу.env.pre-production.example - Выполните команду:
docker compose -f docker-compose.pre-production.yml up -dДля остановки
docker compose -f docker-compose.pre-production.yml downДля сборки собственных образов необходимо иметь аккаунт на https://hub.docker.com/
Сборка собственных образов и отправка на dockerhub.
Из корневой директории проекта необходимо выполнить команды:
docker build -f infra/backend.Dockerfile -t you_docker_name/hr-backend:latest .
docker push you_docker_name/hr-backend:latest
docker build -f infra/bot.Dockerfile -t you_docker_name/hr-bot:latest .
docker push you_docker_name/hr-bot:latest
docker build -f infra/gateway.Dockerfile -t you_docker_name/hr-gateway:latest .
docker push you_docker_name/hr-gateway:latestИзмените названия образов на собственные в docker-compose.production.yml и можно его отправить на ваш удалённый сервер любым удобным образом. В директории с docker-compose.production.yml необходимо создать .env.production по образцу infra/.env.production
Необходимо в репозитории проекта перейти
Settings -> Security -> Secrets and variable -> Actions -> Secrets
и создать Secrets
POSTGRES_USER # имя пользователя PostgreSQL
POSTGRES_PASSWORD # пароль пользователя
POSTGRES_DB # название базы данных
POSTGRES_SERVER # хост БД
POSTGRES_PORT # порт PostgreSQL
REDIS_SERVER # хост Redis
DOMAIN_NAME # ваш домен (например `https://example.com`)
BOT_NAME # имя бота
BOT_TOKEN # токен от @BotFather
ADMIN_NAME # логин админа
ADMIN_PASSWORD # пароль админа
ADMIN_TELEGRAM_ID # ваш ID в Telegram
TEST # режим тестирования (`1` или `0`)
JWT_ALGORITHM # алгоритм подписи
JWT_ACCESS_TOKEN_EXPIRE_MINUTES # срок жизни токена
JWT_SECRET_KEY # секретный ключ (сгенерируйте случайную строку)
DOCKERHUB_USERNAME # логин в DockerHub
DOCKERHUB_PASSWORD # токен для DockerHubЗапуск деплоя
- При любом push в ветку
develop - При закрытии (merge/close) Pull Request в ветки
developиmain
Не запускается при
- Прямых push в
main(деплой в main только через PR) - Push и PR в другие ветки, кроме
developиmain - Открытии и редактировании PR (только закрытие)