Это выполненное задание второго этапа отбора в школу бэкенд-разработки от Яндекса
Для запуска проекта вам потребуется Python 3.8+
и пакетный менеджер pip
. Все зависимости и их версии находятся в файле requirements.txt
в корне проекта.
Чтобы установить зависимости, введите в терминал:
pip3 install -r requirements.txt
Для корректной работы приложения на машине должна быть установлена быза данных PostgreSQL
. Если у вас Ubuntu
, тогда для её установки, введите в консоль:
sudo apt-get install postgresql-12
Для запуска бибилиотеки psycopg2 вам может понадобиться установить дополнительные пакеты libpq-dev
и gcc
:
sudo apt-get install libpq-dev gcc
После установки пакетов, нужно создать базу данных, которую будет использовать приложение. Чтобы подключиться к СУБД в роли админимтратора, введите:
sudo -u postgres psql
Теперь создайте базу данных:
CREATE DATABASE candy_shop;
Создайте нового пользователя и выдайте ему админ-права в созданной базе данных:
CREATE USER candy_admin WITH PASSWORD '1';
GRANT ALL PRIVILEGES ON DATABASE candy_shop TO candy_admin;
Настоятельно рекомендую использовать http-сервер Gunicorn
, для его установки введите в консоль:
sudo apt-get install gunicorn
По умолчанию сервис запускается на http://0.0.0.0:8080
. Для запуска сервера перейдите в корень проекта и запустите скрипт:
./run_server.bash
Можно сделать автозапуск сервиса, при старте машины. Для этого нужно воспользоваться утилитой Supervisor
:
sudo apt install supervisor
Supervisor
использует файлы конфигурации, которые должны храниться в директории в /etc/supervisor/conf.d
. Пример такого файла с именем api.conf
:
[program:api]
command=gunicorn -b 0.0.0.0:8080 -w 5 api:app
directory=/home/entrant/yandex-backend-school-task/src
user=entrant
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
Как только вы создали этот файл, стоит перезапустить службу супервизора для импорта нового файла конфигурации:
sudo supervisorctl reload
Почти весь код покрыт unit-тестами, если у вас не установлена среда разработки, то для их запуска нужно перейти в корень проекта и запустить скрипт:
./run_tests.bash
Модульные тесты используют боевую базу данных, а не фейковую. Тесты чистят базу данных до запуска тестов, и после их выполнения. Будьте внимательны!
Я написал примеры запросов для утилиты curl к сервису, они лежат в коре проекта в фале curl-requests.txt