MVP Funtech - все события IT в одном месте
Funtech - это веб-приложение, разработанное для быстрого и лёгкого поиска, отслеживания и возможности оформления регистрации на любое событие. Оно предназначено для помощи пользователям в управлении и контроле за своими событиями, а так же возможность привязать свой аккаунт ЯндексID, для более быстрого доступа к сервису.
funtech.myddns.me - Сервер остановлен, сайт недоступен
funtech.myddns.me/api/v1/schema/docs/ - Сервер остановлен, документация недоступна
- Пользователь на странице события создает заявку на регистрацию на событие.
- При создании заявки по умолчанию присваивается статус "Ожидает подтверждения".
- Изменить статус заявки можно в административной панели Django в разделе "Регистрация".
- При изменении статуса заявки на "Подтверждена", отображается как "Вы участвуете":
- идентификатор и UUID-код билета становятся доступны на соответствующих эндпоинтах API,
- пользователю по электронной почте отправляется письмо с билетом на событие, в письме содержится qr-код билета.
- Docker
- Django
- DjangoRestFramework
- SimpleJWT
- DRF Spectacular
- Nginx
- Python
- PostgreSQL
- Sentry
- CI/CD
- Celery
- Redis
Локальная настройка и запуск проекта
Клонировать репозиторий к себе на компьютер и перейти в директорию с проектом:
git clone https://github.com/Funtech-3/backend.git
cd backend
Для проекта создать и активировать виртуальное окружение, установить зависимости для windows:
cd backend # если на этом этапе не в папке backend, то выполнить переход
python -m venv venv
source venv/Scripts/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
для linux:
cd backend
python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
Для корректной работы backend-части проекта, создайте в корне файл .env
и заполните его переменными по примеру из файла .env.example
или по примеру ниже:
POSTGRES_USER=DB_USER
POSTGRES_PASSWORD=DB_PASSWORD
POSTGRES_DB=DB_APPS
DB_NAME=DB_NAME
DB_HOST=db
DB_PORT=5432
SECRET_KEY=django-example-secret-key # стандартный ключ, который создается при старте проекта
DEBUG=True # False так же используется для работы с Postgres
ALLOWED_HOSTS=IP_адрес_сервера, 127.0.0.1, localhost, домен_сервера,
SUPERUSER_USERNAME=admin # переменные для автоматического создания суперюзера,
SUPERUSER_PASSWORD=admin # если не указать, применятся стандартные из менеджемент команды make_admin
SUPERUSER_EMAIL=admin@example.com
DOCKERHUB_USERNAME=dockerhubuser # переменные для сохраниения образов на докер хаб пользователя/организации и тд на будущее
PROJECT_NAME=exampleproject # название образа для каждого контейнер сопоставимо с названием проекта
Установите docker compose на свой компьютер. Для запуска проекта на локальной машине достаточно:
- Запустить проект, ключ
-d
запускает проект в фоновом режиме - Выполнить миграции
- Cобрать статику и скопировать её
- Запустить скрипт для создания суперюзера
- Загрузить тестовые данные сначала создание юзера(админа)
docker compose up --build -d
docker compose exec backend python manage.py migrate
docker compose exec backend python manage.py collectstatic &&
docker compose exec backend cp -r /app/static_backend/. /backend_static/static/
docker compose exec backend python manage.py make_admin
docker compose exec backend python manage.py load_test_data
Для работы на удаленном сервере потребуется:
- Установить Nginx
- Отредактировать конфигурационный файл:
server { server_name IP_адрес_сервера домен_сервера; location / { proxy_pass http://127.0.0.1:8000; } }
- Установить ssl сертификаты и выпустить их:
- Настроить и установить Docker
- Перенести файл `docker-compose.production.yml с локальной машины на удаленную
- Создать .env файл на сервере в соответствии с пунктом
.env
- Запустить контейнеры
- Выполнить миграции собрать статику и скопировать её, так же как описано для локальной машины Необходимые команды
sudo apt install nginx -y # устанавливаем Nginx
sudo systemctl start nginx # запускаем Nginx
sudo nano /etc/nginx/sites-enabled/default # заходим редактировать файл конфигурации
sudo nginx -t # проверяем корректность настроек
sudo service nginx reload # перезапускаем Nginx
sudo service nginx status # проверяем что Nginx запущен и работает без ошибок
sudo apt install snapd && # Устанавливаем certbot для получения SSL-сертификата
sudo snap install core && # Устанавливаем certbot для получения SSL-сертификата
sudo snap refresh core && # Устанавливаем certbot для получения SSL-сертификата
sudo snap install --classic certbot && # Устанавливаем certbot для получения SSL-сертификата
sudo ln -s /snap/bin/certbot /usr/bin/certbot # Устанавливаем certbot для получения SSL-сертификата
sudo certbot --nginx # Запускаем certbot получаем SSL-сертификат
sudo service nginx reload # Сертификат автоматически сохранится в конфигурации Nginx
sudo apt update && sudo apt install curl # Устанавливаем Docker
curl -fSl https://get.docker.com -o get-docker.sh # Устанавливаем Docker
sudo sh ./get-docker.sh # Настраиваем Docker
sudo apt-get install docker-compose-plugin # Настраиваем Docker
sudo nano docker-compose.production.yml # В этот файл перенесем содержимое из файла на локальной машине
sudo nano .env # Создаем файл .env с переменными окружения
sudo docker compose -f docker-compose.production.yml up -d # Запускаем контейнеры на удаленном сервере в фоновом режиме
Workflow
Для постоянного использования CI/CD интеграции и деплоя в репозитории проекта на GitHub в разделе Actions перейти Settings/Secret and variables/Actions
нужно прописать переменные окружения для доступа к сервисам - Secrets:
DOCKER_USERNAME # логин в DockerHub
DOCKER_PASSWORD # пароль пользователя в DockerHub
DOCKER_USER # имя пользователя для репозиториев
HOST # ip_address сервера
USER # имя пользователя
SSH_KEY # приватный ssh-ключ (cat ~/.ssh/id_rsa) по выбору: удаленный сервер или локальная машина
PASSPHRASE # кодовая фраза (пароль) для ssh-ключа по выбору: удаленный сервер или локальная машина
# для автоматизации создания файла `.env`:
POSTGRES_DB
POSTGRES_USER
POSTGRES_PASSWORD
DB_HOST
DB_PORT
DB_NAME
PROJECT_NAME
PROJECT_NAME_FRONT
DOCKER_USERNAME_FRONT
ALLOWED_HOSTS
SUPERUSER_PASSWORD
SECRET_KEY
DEBUG
REDIS_HOST
REDIS_PORT
CSRF_DOMAIN
EMAIL_HOST
EMAIL_PORT
EMAIL_HOST_USER
EMAIL_HOST_PASSWORD
По команде git push
в репозитории на github отрабатывают 2 файла check_and_run_tests.yml
и main.yml
и их сценарии:
- tests - для всех веток проверка кода по стандартам PEP8 и запуск тестов.
- build_and_push_to_docker_hub - сборка и отправка образов в удаленный репозиторий на DockerHub
- deploy - автоматический деплой проекта
backend:
- Denis Shtanskiy / Telegram: @shtanskiy
- Ira Vorontsova / Telegram: @ivory_iv
- Oleg Chuzhmarov / Telegram: @chtiger4