GitHub - MaxBarulin/habit_tracker · GitHub
Skip to content

MaxBarulin/habit_tracker

Repository files navigation

Трекер привычек (API)

Описание проекта

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.

  1. Клонируйте репозиторий:

    git clone https://github.com/MaxBarulin/habit_tracker.git
    cd habit_tracker
  2. Создайте и заполните файл .env: Скопируйте файл-шаблон и внесите в него свои данные.

    cp .env.sample .env

    Важно: Укажите в .env ваш SECRET_KEY, TELEGRAM_BOT_TOKEN и другие необходимые переменные.

  3. Запустите проект: Выполните команду из корневой директории проекта:

    docker-compose up --build

    При последующих запусках флаг --build можно опустить.

  4. Проверка и инициализация:

    • Проект будет доступен по адресу http://127.0.0.1:8000/.
    • Чтобы создать суперпользователя, откройте новый терминал и выполните:
      docker-compose exec backend python manage.py createsuperuser
    • Миграции применяются автоматически при старте backend контейнера.

Настройка сервера и CI/CD для деплоя

Проект настроен на автоматический деплой на удаленный сервер при пуше в ветку main.

1. Подготовка сервера (Yandex.Cloud)

  1. Создайте ВМ на Ubuntu 22.04 LTS с публичным IP-адресом.
  2. Настройте группу безопасности: откройте порты 22 (SSH), 80 (HTTP), 443 (HTTPS).
  3. Сгенерируйте SSH-ключ в формате PEM для доступа GitHub Actions:
    ssh-keygen -t rsa -b 4096 -m PEM -f ./deploy_key
  4. Добавьте публичную часть ключа (deploy_key.pub) в настройки доступа вашей ВМ в Yandex.Cloud.
  5. Подключитесь к серверу и установите Docker и Docker Compose:
    # Обновление и установка
    sudo apt-get update && sudo apt-get install -y docker.io docker-compose
    
    # Добавление пользователя в группу docker
    sudo usermod -aG docker $USER
    После этого необходимо переподключиться к серверу, чтобы изменения прав вступили в силу.

2. Настройка CI/CD в GitHub

  1. Перейдите в настройки вашего репозитория на GitHub: Settings > Secrets and variables > Actions.
  2. Создайте следующие секреты (Repository secrets):
    • DEBUG
    • DOCKER_HUB_ACCESS_TOKEN
    • DOCKER_HUB_USERNAME
    • HOST
    • NAME
    • PASSWORD
    • PORT
    • SECRET_KEY
    • SERVER_IP
    • SSH_KEY
    • SSH_USER
    • USER

3. Как работает CI/CD

Workflow, описанный в .github/workflows/cl.yml, выполняет следующие шаги при пуше в ветку main:

  1. Lint & Test: Проверяет код на соответствие стандартам (flake8) и запускает тесты (pytest).
  2. Build & Push: Собирает Docker-образы для backend, celery, celery-beat и загружает их в Docker Hub.
  3. Deploy:
    • Подключается к удаленному серверу по SSH.
    • Обновляет код из репозитория (git pull).
    • Создает на сервере актуальный .env файл из секретов GitHub.
    • Скачивает свежие образы с Docker Hub (docker-compose pull).
    • Перезапускает все сервисы в фоновом режиме (docker-compose up -d).
    • Применяет миграции базы данных (docker-compose exec ... migrate).

API Эндпоинты

  • /users/ - эндпоинты для регистрации, аутентификации, управления пользователями (Djoser).
  • /habits/ - создание и просмотр списка своих привычек.
  • /habits/public/ - просмотр списка публичных привычек.
  • /habits/<int:pk>/ - управление конкретной привычкой (просмотр, изменение, удаление).
  • /docs/ - Автоматическая документация API (Swagger).
  • /redoc/ - Альтернативная документация API (ReDoc).

Автор

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors