This project was created for Yandex backend school. Author suggests that server will be installed in path /var/www/citizen
.
You need to create mysql database, create settings.py
and yoyo.ini
files from default ones and apply all migrations using yoyo
.
These operations must be automated later with fabric or smth else.
Use python server.py
to start server directly in your CLI. Server listens to 0.0.0.0
address with 8080
port.
We can just order system to run app as a service:
cd /lib/systemd/system
sudo touch citizen.service
. Content ofcitizen.service
:
[Unit]
Description=Very Important Service
Requires=mysql.service
[Service]
Type=idle
ExecStart=/var/www/citizens/venv/bin/python /var/www/citizens/server.py
Restart=always
TimeoutStartSec=1
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable citizen.service
sudo systemctl start citizen.service
sudo systemctl status citizen.service
Use py.test -c tests/pytest.ini
command to run all tests in project.
Use yoyo apply
to apply new available migrations.
You can generate big massive of good test data to make "load" testing. Use python tests/generate_data.py
Процесс разворачивания приложения по сути не реализован - хотел использовать для этого fabric, но эта утилита пока в процессе изучения. Хотел с помощью нее генерить конфиги (однако при таком подходе не понимаю, где хранить логины/пароли от БД и других сервисов), накатывать новые миграции (возможно даже тестировать, но это уже забегание в тему CI).
Так же не очень удачной по мне оказалась идея использовать systemd
для запуска приложения как сервиса - в таком случае не очень понятно, что делать, если нужно запустить несколько инстансов, так же логи работы приложения в текущей реализации посмотреть негде (а хотелось бы, но это все же можно было настроить). Так же при обновлении кода сервер надо перезапускать, а значит, для пользователя он "мигнет", лучше прятать приложение за nginx
-ом, самому следить за его "поднятостью" и реализовать сине-зеленый деплой для плавного переключения, но этого я пока не умею:)
Тестирование так же не идеально - с pytest уже некоторое время работаю, но ввиду специфики своего проекта удавалось писать только нечто похожее на интеграционное тестирование, написал как умею.