Docker + Nginx + Python
В рамках создания проекта изучено:
- Dockerfile — как создавать собственные Docker-образы с нужными зависимостями
- Docker Compose — базовое знакомство с составлением
docker-compose.yaml - Volumes — монтирование директорий с хоста внутрь контейнера для передачи данных
- Ports — проброс портов между хостом и контейнером
- Entrypoint — точки входа в контейнер и команды по умолчанию
Освежил память в работе с python, написал с нуля скрипт опираясь на прошлые задачи. Использовал библиотеки yaml и модуль Template для парсинга и генерации файлов. Осуществлял работу с файлами и дерикториями с помощью библиотек os и shutil Написал небольшую валидацию входных данных под условные рамки задачи.
Docker Compose запускает процесс:
- собирает образ из Dockerfile
- пробрасыввет порт хост:контейнер
- монтирует config директорию
Dockerfile подготавливает образ:
- берет базовый образ nginx:alpine
- устанавливает python и библиотеку pyyaml(для yaml)
- копирует скрипты, шаблоны и конфига
- делает entrypoint.sh исполняемым
entrypoint.sh запускает инициализацию
- запускает главный скрипт generator.py
- проверяет валидность конфигурации nginx
generator.py генерирует конфиги
- парсит config/sites.yaml с описанием сайтов
- валидирует данные
- на основе шаблонов генерирует nginx конфиги и html страницы для каждого сайта
- удаляет старые конфиги и html файлы которые не используются в sites.yaml
Требования:
- Docker
- Docker Compose
Запуск:
docker compose up -d --buildПросмотр логов:
docker compose logs -f web_serverОстановка контейнера:
docker compose downВнутри контейнера доступен сайт test.su на 80 порту
Для локального тестирования добавляем себе на хост в hosts
127.0.0.1 test.cu
И получаем в браузере или через curl -v сгенерированную html страницу
Добавляем необходимые параметры для нового сайта в config/sites.yaml
Перезапускаем контейнер
docker compose restart
или
запускаем скрипт в контейнере
docker exec nginx_automated python3 /app/generator.py
и перезагружаем nginx
docker exec nginx_automated nginx -s reload