Habit Tracker — это API-сервис для создания и отслеживания полезных привычек. Приложение позволяет пользователям управлять своими привычками, просматривать публичные привычки других пользователей и получать периодические напоминания в Telegram.
Проект реализован на стеке Django + Django REST Framework, с Celery для асинхронных задач, Redis в качестве брокера сообщений и PostgreSQL как основной базы данных. Весь проект контейнеризирован с помощью Docker и Docker Compose и настроен на автоматический деплой через GitHub Actions.
Проект развернут на сервере Yandex.Cloud и доступен по адресу:
API: http://158.160.164.244:8000/ (Замените на ваш IP)
Админ-панель: http://158.160.164.244:8000/admin/
- Пользователи: Регистрация и аутентификация по JWT (email + password).
- Привычки: Полный CRUD (создание, просмотр, редактирование, удаление) для своих привычек.
- Публичность: Возможность делать привычки публичными и просматривать список публичных привычек других пользователей.
- Уведомления: Автоматическая отправка напоминаний о выполнении привычек в Telegram с помощью Celery Beat.
- Backend: Python, Django, Django REST Framework
- База данных: PostgreSQL
- Фоновые задачи: Celery, Redis
- Аутентификация: Djoser, Simple JWT
- Документация API: Drf-yasg (Swagger/ReDoc)
- Тестирование: Pytest
- Контейнеризация и Деплой: Docker, Docker Compose, Nginx, Gunicorn, GitHub Actions
Для запуска проекта на локальной машине необходимы установленные Docker и Docker Compose.
-
Клонируйте репозиторий:
git clone https://github.com/MaxBarulin/habit_tracker.git cd habit_tracker -
Создайте и заполните файл
.env: Скопируйте файл-шаблон и внесите в него свои данные.cp .env.sample .env
Важно: Укажите в
.envвашSECRET_KEY,TELEGRAM_BOT_TOKENи другие необходимые переменные. -
Запустите проект: Выполните команду из корневой директории проекта:
docker-compose up --build
При последующих запусках флаг
--buildможно опустить. -
Проверка и инициализация:
- Проект будет доступен по адресу
http://127.0.0.1:8000/. - Чтобы создать суперпользователя, откройте новый терминал и выполните:
docker-compose exec backend python manage.py createsuperuser - Миграции применяются автоматически при старте
backendконтейнера.
- Проект будет доступен по адресу
Проект настроен на автоматический деплой на удаленный сервер при пуше в ветку main.
- Создайте ВМ на Ubuntu 22.04 LTS с публичным IP-адресом.
- Настройте группу безопасности: откройте порты
22(SSH),80(HTTP),443(HTTPS). - Сгенерируйте SSH-ключ в формате PEM для доступа GitHub Actions:
ssh-keygen -t rsa -b 4096 -m PEM -f ./deploy_key
- Добавьте публичную часть ключа (
deploy_key.pub) в настройки доступа вашей ВМ в Yandex.Cloud. - Подключитесь к серверу и установите Docker и Docker Compose:
После этого необходимо переподключиться к серверу, чтобы изменения прав вступили в силу.
# Обновление и установка sudo apt-get update && sudo apt-get install -y docker.io docker-compose # Добавление пользователя в группу docker sudo usermod -aG docker $USER
- Перейдите в настройки вашего репозитория на GitHub: Settings > Secrets and variables > Actions.
- Создайте следующие секреты (Repository secrets):
DEBUGDOCKER_HUB_ACCESS_TOKENDOCKER_HUB_USERNAMEHOSTNAMEPASSWORDPORTSECRET_KEYSERVER_IPSSH_KEYSSH_USERUSER
Workflow, описанный в .github/workflows/cl.yml, выполняет следующие шаги при пуше в ветку main:
- Lint & Test: Проверяет код на соответствие стандартам (
flake8) и запускает тесты (pytest). - Build & Push: Собирает Docker-образы для
backend,celery,celery-beatи загружает их в Docker Hub. - Deploy:
- Подключается к удаленному серверу по SSH.
- Обновляет код из репозитория (
git pull). - Создает на сервере актуальный
.envфайл из секретов GitHub. - Скачивает свежие образы с Docker Hub (
docker-compose pull). - Перезапускает все сервисы в фоновом режиме (
docker-compose up -d). - Применяет миграции базы данных (
docker-compose exec ... migrate).
/users/- эндпоинты для регистрации, аутентификации, управления пользователями (Djoser)./habits/- создание и просмотр списка своих привычек./habits/public/- просмотр списка публичных привычек./habits/<int:pk>/- управление конкретной привычкой (просмотр, изменение, удаление)./docs/- Автоматическая документация API (Swagger)./redoc/- Альтернативная документация API (ReDoc).
- Максим Барулин
- Telegram: @max_barulin
- Email: maxbarulin@gmail.com
