Структурированное описание сделал в github
gist.github.com/fkholkin0... ---
Копия текста:
---
Контекст:
Использую python фреймворки (streamlit, gradio, panel) для разработки data-приложений, упакованных в docker image.
1 приложение = 1 микро-сервис = 1 docker-контейнер
Деплою на сервер через CI/CD в Gitlab, использую Docker-compose.
**Процесс деплоя**:
Git push to master -> `docker compose down --rmi=all` -> `docker compose up --detach`
При старте CI/CD чистятся старые контейнеры, формируются новые и развертываются на сервере.
Web-сервер (Nginx) завел отдельным контейнером, в общем Compose.
Проблемы:
1. **SSL-сертификаты**. Не удалось настроить Nginx нужным мне образом, чтобы использовать бесплатные сертификаты Let's Encrypt. Пробовал использовать Caddy сертификаты ок, маршрутизация не ок, рушит сокеты приложений -> функциональность пропадает.
2. **Автоматизация маршрутизации**. Мне нужна упращенная процедура развертки приложений , с настройками в Docker-compose. По гайдам из интернета сделал костылей с переменными окружения, файлами конфигурации, Dockerfile для Nginx.
### **Задача**
Произвести настройки web-сервера ( Nginx или Caddy ) и доработать docker-compose ( networks, environment ) для корректной работы SSL-сертификатов, и автоматической маршрутизации приложений.
### Необходимо
- Автоматическая актуализация сертификатов web-сервером
- Корректная настройка `depends_on` в docker-compose между контейнерами
- Использование переменных docker-compose для определения поддомена или страницы приложения ( маршрутизация )
- Привязать домен к серверу, настроить поддомены ( их последующее развитие )
### Критерии успешного решения задачи
1. При добавлении нового сервиса в Docker-compose по шаблону, после git push увижу свое приложение на сервере, по заданному в переменных адресу (странице или поддомену).
2. HTTP -> HTTPS для всех моих приложений
3. Конфигурации и настройки web-серера находятся в контейнере ( без хардкока в сервер). Настроен порядок запуска контейенров, или выставлена последовательность по network
4. Сертификаты Let's Encript запрашиваются только при первом запуске или при истечении срока их действия. Сертификаты НЕ запрашиваются при каждой сборке CI/CD.
### ИКР
Web-сервер и docker-compose, которые работает "бесшовно". Настройки маршуртизации задаются в контейнерах через переменные или ярлыки.
```docker-compose
...
st_rtime: # ->
datawarrior.ru/realtime build:
context: .
dockerfile: ./st_app/app.Dockerfile
args:
SOURCE_DIR: ./st_app
ROUTING_FILE: app_pages/demo/realtime
CI_REGISTRY_IMAGE: ${CI_REGISTRY_IMAGE}
BASE_URL_PATH: realtime
labels:
"caddy=datawarrior.ru"
"caddy.handle_path=/realtime"
"caddy.handle_path.reverse_proxy={{upstreams 1515}}"
environment:
PORT_TO_USE=1515
networks:
caddy
depends_on:
base_streamlit_app
restart: always
st_apps: # ->
apps.datawarrior.ru build:
context: .
dockerfile: ./st_app/app.Dockerfile
args:
SOURCE_DIR: ./st_app
ROUTING_FILE: main_page
CI_REGISTRY_IMAGE: ${CI_REGISTRY_IMAGE}
BASE_URL_PATH: apps
labels:
"caddy=datawarrior.ru"
"caddy.subdomain=apps"
"caddy.handle_path.reverse_proxy={{upstreams 5599}}"
environment:
PORT_TO_USE=5599
networks:
caddy
depends_on:
base_streamlit_app
restart: always
...
```
Напишите пожалуйста бюджет и сроки реализации.