проект запакован в 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