Документ описывает процесс нормализации переменных окружения для единообразного запуска всех сервисов через Docker Compose.
- Каждый сервис имеет свой
env.exampleс разными форматами - Нет единого источника правды для всех переменных
- Дублирование переменных между сервисами
- В локальной разработке используются
localhost - В Docker Compose нужно использовать имена сервисов
- Нет четкого разделения между локальным и Docker окружением
- Нет единого
.envфайла в корне проекта - Сложно управлять зависимостями между сервисами
- Нет документации по обязательным/опциональным переменным
Файл: env.docker.example (в корне проекта)
Этот файл содержит:
- Все переменные для всех сервисов
- Разделение на Docker и локальные URL
- Группировку по сервисам
- Комментарии с пояснениями
- Без суффикса: для использования внутри Docker сети (имена сервисов)
_LOCAL: для использования с хоста (localhost)
Пример:
# Внутри Docker сети
DATABASE_URL=postgresql://postgres:postgres@postgres:5432/experiment_db
# С хоста (для локальной разработки)
DATABASE_URL_LOCAL=postgresql://postgres:postgres@localhost:5432/experiment_dbPOSTGRES_*- настройки PostgreSQLEXPERIMENT_SERVICE_*- настройки Experiment ServiceAUTH_PROXY_*- настройки Auth ProxyVITE_*- переменные для Vite (Experiment Portal)
- Скопируйте файл:
cp env.docker.example .env-
При необходимости измените значения в
.env -
Docker Compose автоматически загрузит переменные из
.env
Используйте переменные с суффиксом _LOCAL или настройте каждый сервис отдельно через его env.example.
| Переменная в env.docker.example | Переменная в experiment-service | Описание |
|---|---|---|
DATABASE_URL |
DATABASE_URL |
URL подключения к PostgreSQL |
EXPERIMENT_SERVICE_PORT |
PORT |
Порт сервиса |
AUTH_SERVICE_URL |
AUTH_SERVICE_URL |
Корень Auth Service без /api/v1 (http://auth-service:8001), см. ниже |
RABBITMQ_URL |
RABBITMQ_URL |
URL RabbitMQ |
TELEMETRY_BROKER_URL |
TELEMETRY_BROKER_URL |
URL Redis |
Контракт AUTH_SERVICE_URL. Во всех бэкенд-сервисах это корень auth-service без API-префикса, например http://auth-service:8001. Клиент сам дописывает полный путь, который вызывает, через backend_common.auth_service.auth_service_root. Старое значение с /api/v1 на конце тоже принимается и сводится к корню.
| Сервис | Вызовы auth-service |
|---|---|
| experiment-service | POST /api/v1/internal/audit (аудит-лог) |
| telemetry-ingest-service | GET /auth/me, GET /projects/{id}/members (проверка пользовательского токена) |
| config-service, script-service | переменная объявлена в настройках, но сейчас не используется |
| Переменная в env.docker.example | Переменная в auth-proxy | Описание |
|---|---|---|
AUTH_PROXY_PORT |
PORT |
Порт прокси |
TARGET_EXPERIMENT_URL |
TARGET_EXPERIMENT_URL |
URL Experiment Service |
AUTH_URL |
AUTH_URL |
URL Auth Service |
CORS_ORIGINS |
CORS_ORIGINS |
Разрешенные origins |
| Переменная в env.docker.example | Использование | Описание |
|---|---|---|
VITE_API_URL |
Vite env variable | URL API для фронтенда |
- ✅ Создан
env.docker.exampleс единой конфигурацией - ⏳ Обновить
docker-compose.ymlдля использования переменных из.env - ⏳ Обновить Dockerfile'ы для поддержки переменных окружения
- ⏳ Создать скрипты для автоматической генерации env файлов для каждого сервиса
POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DBDATABASE_URLEXPERIMENT_SERVICE_PORTAUTH_PROXY_PORT
RABBITMQ_URL- не используется активноTELEMETRY_BROKER_URL- не используется активноOTEL_EXPORTER_ENDPOINT- для мониторингаAUTH_SERVICE_URL- можно использовать заглушки
⚠️ НЕ коммитьте.envфайл в Git- ✅ Используйте
.env.exampleилиenv.docker.exampleкак шаблон - ✅ Для production используйте секреты Docker или внешние системы управления секретами