start:student_projects_deploy
Развертывание студенческих проектов
Для того, чтобы упростить процедуру развертывания студенческих проектов на кафедральных серверах, составлен список необходимых требований. Эти требования должны быть выполнены перед тем, как проект будет размещен на кафедральных ресурсах.
Также можно рассматривать эти требования как крайне полезные рекомендации, выработанные ценой большого количества нервов и проектов, которые кафедра развертывала.
Веб-приложения
- проект запакован в docker-compose, конфигурация собирается и запускается одним скриптом
- данные постоянного хранения проекта (файлы БД и прочее такое) должно подключатся через именованный volume
- в docker-compose конфиге указаны точные версии всех образов, версия latest недопускается к использованию
- в скриптах установки зависимостей и Docker файлах указаны версии всех пакетов
- в скриптах указаны точные версии интерпретаторов (Например, python3.8)
- ключи шифрования, сертификаты, пароли и любые чувствительные данные передаются через .env файл
- Если в проекте есть СУБД:
- она располагается в отдельном контейнере
- каталог с файлами данных СУБД монтируется в volume
- контейнеру СУБД не нужно открывать никаких портов
- режим сети не host для docker-compose
- volume не использует файлы или каталоги хоста (исключения ниже)
- конфигурация docker-compose открывает только необходимые порты для production работы (идеально - только фронтенд)
- все порты в docker-compose открываются только с указанием на 127.0.0.1 (то есть - так можно 127.0.0.1:8000:8000, а так - 8000:8000 нельзя)
- веб-интерфейс доступен на порте с номером от 5000
- docker-compose не использует порты хоста с номерами < 1024
- есть конфиг для apache2, настраивающий работу через reverse proxy
- необходимые для отладки логи работы приложения доступны через веб-интерфейс (или хотя бы в файле в volume)
- если в системе несколько контейнеров с кодом (например бакенд и фронтенд), то логи всех контейнеров должны собираться на одном из них
- есть примитивные интеграционные тесты
- в настройках docker-compose для всех контейнеров есть монтирование данных о часовом поясе хост-машины /etc/timezone:/etc/timezone:ro и /etc/localtime:/etc/localtime:ro