Kittygram — это приложение для публикации изображений с котиками.
- Backend: Django (Python)
- Frontend: React.js
- Database: PostgreSQL
- Gateway: Nginx
- CI/CD: GitHub Actions
- Containerization: Docker
git clone https://github.com/neyfiz/kittygram_final- Для установки Docker следуйте официальной инструкции.
- Для установки Docker Compose следуйте этой инструкции.
Создайте файл .env в корне проекта и заполните его следующими переменными:
DB_NAME=kittygram
DB_USER=kittygram_user
DB_PASSWORD=securepassword
DB_HOST=db
DB_PORT=5432Запустите проект с помощью Docker Compose:
docker-compose up --buildЭтот процесс соберет все контейнеры (бэкенд, фронтенд, Nginx, PostgreSQL) и запустит их. Проект будет доступен по адресу http://localhost.
После первого запуска вам нужно выполнить миграции и собрать статику для Django:
docker-compose exec backend python manage.py migrate
docker-compose exec backend python manage.py collectstaticПроект настроен для автоматического тестирования и деплоя с использованием GitHub Actions. Каждый пуш в ветку main будет запускать следующие шаги:
- Проверка кода на соответствие PEP8 (для бэкенда).
- Запуск тестов для фронтенда и бэкенда.
- Сборка Docker-образов для каждого сервиса (
backend,frontend,gateway). - Публикация образов на Docker Hub.
- Автоматическое развертывание на сервере с помощью Docker Compose.
- Уведомление в Telegram о завершении деплоя.
Для успешной работы CI/CD необходимо настроить следующие секреты в GitHub:
DOCKER_USERNAME: ваш логин на Docker Hub.DOCKER_PASSWORD: ваш пароль от Docker Hub.TELEGRAM_TOKEN: токен для бота Telegram (можно создать с помощью BotFather).TELEGRAM_CHAT_ID: ID чата для уведомлений (можно получить через @userinfobot).
Чтобы развернуть проект на сервере, выполните следующие шаги:
- Установите Docker и Docker Compose на сервер.
- Скопируйте проект на сервер.
- Запустите
docker-compose up -dдля запуска контейнеров в фоновом режиме. - Настройте Nginx для проксирования запросов в Docker-контейнеры (порт 9000 для бэкенда).
Проект был создан и поддерживается Neyfiz.