Задание доступно по адресу http://хх.хх.хх.хх/api/post/ до 14.07.2022 г. Статус на 15.08.2022 (отключен).
- Python 3.10
- Docker
- docker-compose
- Django 3.2.15
- Django REST framework
- CI/CD
- PostgreSQL
- Yandex.Cloud
- В сервисе реализовано REST API, принимающее на вход POST запросы с содержимым вида {"questions_num": integer}.
- После получения запроса сервис, в свою очередь, запрашивает с публичного API (англоязычные вопросы для викторин) https://jservice.io/api/random?count=1 указанное в полученном запросе количество вопросов.
- Далее, полученные ответы сохраняются в базе данных из п. 1, причем сохраняется как минимум следующая информация: ID вопроса, Текст вопроса, Текст ответа, Дата создания вопроса.
- Если в БД имеется такой же вопрос, к публичному API с викторинами выполняются дополнительные запросы до тех пор, пока не будет получен уникальный вопрос для викторины.
- Ответом на запрос из п.2.a предыдущей сохранённый вопрос для викторины. В случае его отсутствия - пустой объект.
Установить docker, docker-compose на сервере виртуальной машины Yandex.Cloud:
ssh username@ip
sudo apt update && sudo apt upgrade -y && sudo apt install curl -y
sudo curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh
get-docker.sh && sudo rm get-docker.sh
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Создаем папку infra на виртуальной машине:
mkdir infra
- Переносим файлы docker-compose.yml, default.conf и .env на сервер в папку infra.
scp .env username@server_ip:/home/username/infra/
scp docker-compose.yml username@server_ip:/home/username/infra/
scp default.conf username@server_ip:/home/username/infra/
- Так же, можно создать пустой файл .env в директории infra, позже в него будем добавлять данные с git secrets:
touch .env
- Заполнить в настройках репозитория секреты в .env из Secrets GitHub:
DB_ENGINE='django.db.backends.postgresql'
POSTGRES_DB='bewise'
POSTGRES_USER='bewise_u'
POSTGRES_PASSWORD='put_your_password'
DB_HOST='db'
DB_PORT='5432'
SECRET_KEY='put_your_code'
ALLOWED_HOSTS='127.0.0.1, localhost, backend, ip_server'
DEBUG=False
- Запускаем контейнеры находясь в папке infra:
sudo docker-compose up -d --build
- Затем применяем миграции, собираем статику:
sudo docker-compose exec backend python manage.py makemigrations
sudo docker-compose exec backend python manage.py migrate --noinput
sudo docker-compose exec backend python manage.py createsuperuser
sudo docker-compose exec backend python manage.py collectstatic --no-input
API будет доступно по адресу: http://your_ip/api/post/
- Остановить:
sudo docker-compose stop/down
- Клонируем репозиторий:
git clone git@github.com:themasterid/test_bewise.git
Переходим в папку с проектом:
cd test_bewise
- Установить и активировать виртуальное окружение (git bash):
python3 -m venv venv
Windows:
source venv/Scripts/activate
Linux:
source venv/bin/activated
- Установить зависимости из файла requirements.txt
cd bewise
python -m pip install --upgrade pip
pip install -r requirements.txt
- Создайте базу и пользователя в PosgreSQL:
Linux:
sudo -u postgres psql
CREATE DATABASE bewise_test;
CREATE USER tuser_bewise WITH ENCRYPTED PASSWORD '@test#bewise';
GRANT ALL PRIVILEGES ON DATABASE bewise_test TO tuser_bewise;
Windows, запустите SQL Shell (psql):
CREATE DATABASE bewise_test;
CREATE USER tuser_bewise WITH ENCRYPTED PASSWORD '@test#bewise';
GRANT ALL PRIVILEGES ON DATABASE bewise_test TO tuser_bewise;
- Прописываем данные для работы в dev режиме в .env файл (там где у нас файл settings.py):
DB_ENGINE='django.db.backends.postgresql'
POSTGRES_DB='bewise_test'
POSTGRES_USER='tuser_bewise'
POSTGRES_PASSWORD='@test#bewise'
DB_HOST='127.0.0.1'
DB_PORT='5432'
SECRET_KEY='put_your_code'
ALLOWED_HOSTS='127.0.0.1, localhost, backend, ip_server'
DEBUG=True
- Выполняем миграции, собираем статику, создаем администратора:
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic --no-input
python manage.py createsuperuser
- Запускаем сервер:
python manage.py runserver
http://127.0.0.1:8000/api/post/
Автор: Клепиков Дмитрий