- docker/frontend.entrypoint.sh: add 3 new functions: - extract_p12_if_needed — openssl pkcs12 extraction to .crt+.key - resolve_ssl_passphrase — read SSL_KEY_PASSPHRASE env var - decrypt_key_if_needed — openssl rsa decryption before nginx start - Pipeline: install CA -> extract p12 -> get passphrase -> select config -> decrypt key -> start nginx - Crash-early: encrypted key without SSL_KEY_PASSPHRASE exits entrypoint - docker-compose.enterprise-clean.yml: add SSL_KEY_PASSPHRASE to frontend env - .env.enterprise-clean.example: document SSL_KEY_PASSPHRASE usage - build.sh: add SSL_KEY_PASSPHRASE to generated deploy compose
116 lines
5.4 KiB
Plaintext
116 lines
5.4 KiB
Plaintext
# #region env.enterprise-clean [C:2] [TYPE Module] [SEMANTICS env,docker,enterprise]
|
||
# @BRIEF Переменные окружения для docker-compose.enterprise-clean.yml.
|
||
# Сервисы собираются из исходников — не требуют pre-built images.
|
||
# Используется внешний PostgreSQL (корпоративный).
|
||
# @LAYER Infrastructure
|
||
# @RELATION DEPENDS_ON -> [docker-compose.enterprise-clean.yml]
|
||
# #endregion env.enterprise-clean
|
||
|
||
# ======================================================================
|
||
# PostgreSQL (внешний, корпоративный)
|
||
# ======================================================================
|
||
# Адрес и порт внешнего PostgreSQL (обязательно)
|
||
POSTGRES_HOST=postgres.company.local
|
||
POSTGRES_PORT=5432
|
||
|
||
# Имя БД, пользователь, пароль
|
||
POSTGRES_DB=ss_tools
|
||
POSTGRES_USER=postgres
|
||
POSTGRES_PASSWORD=change-me
|
||
|
||
# ======================================================================
|
||
# Порты хоста
|
||
# ======================================================================
|
||
BACKEND_HOST_PORT=8001
|
||
FRONTEND_HOST_PORT=8000
|
||
FRONTEND_SSL_PORT=443
|
||
|
||
# ======================================================================
|
||
# Сертификаты (корпоративные)
|
||
# ======================================================================
|
||
# Путь к директории с сертификатами на хосте.
|
||
# Содержимое монтируется в /opt/certs в обоих контейнерах.
|
||
#
|
||
# Для CA-сертификатов — положите .crt файлы:
|
||
# ./certs/my-company-ca.crt
|
||
# ./certs/other-ca.pem
|
||
#
|
||
# Для SSL терминации nginx — добавьте server.crt + server.key:
|
||
# ./certs/server.crt
|
||
# ./certs/server.key
|
||
#
|
||
#
|
||
# Для PKCS#12 — положите server.p12 (контейнер с сертификатом + ключом):
|
||
# ./certs/server.p12
|
||
# SSL_KEY_PASSPHRASE=my-passphrase
|
||
# (entrypoint извлечёт server.crt и server.key автоматически)
|
||
#
|
||
# Если приватный ключ зашифрован, укажите пароль:
|
||
# SSL_KEY_PASSPHRASE=my-passphrase
|
||
# (entrypoint расшифрует ключ перед передачей nginx)
|
||
#
|
||
# Если директория пуста или не существует — сертификаты не устанавливаются,
|
||
# nginx работает в HTTP-only режиме.
|
||
CERTS_PATH=./certs
|
||
|
||
# ======================================================================
|
||
# SSL пароль (опционально)
|
||
# ======================================================================
|
||
# Пароль от приватного ключа (если server.key зашифрован) или от .p12 контейнера.
|
||
# Оставьте пустым, если ключ не зашифрован.
|
||
# Пример:
|
||
# SSL_KEY_PASSPHRASE=my-ssl-passphrase
|
||
# SSL_KEY_PASSPHRASE=
|
||
# shellcheck disable=SC2148
|
||
SSL_KEY_PASSPHRASE=
|
||
|
||
# ======================================================================
|
||
# LLM CA-сертификаты (скачка по URL на старте контейнера)
|
||
# ======================================================================
|
||
# URL корпоративных CA-сертификатов для LLM-провайдеров.
|
||
# Автоматически скачиваются, конвертируются DER→PEM и устанавливаются
|
||
# в системное хранилище OpenSSL на старте backend-контейнера.
|
||
#
|
||
# Формат: пробел-разделённый список URL
|
||
#
|
||
# Пример:
|
||
# LLM_CA_CERT_URLS="http://pki.company.com/root-ca.crt http://pki.company.com/intermediate-ca.crt"
|
||
LLM_CA_CERT_URLS=
|
||
|
||
# ======================================================================
|
||
# Логирование
|
||
# ======================================================================
|
||
ENABLE_BELIEF_STATE_LOGGING=true
|
||
TASK_LOG_LEVEL=INFO
|
||
|
||
# ======================================================================
|
||
# Шифрование (ОБЯЗАТЕЛЬНО)
|
||
# ======================================================================
|
||
# Сгенерируйте Fernet-ключ командой:
|
||
# python3 -c "import base64,os; print(base64.urlsafe_b64encode(os.urandom(32)).decode())"
|
||
# Ключ ДОЛЖЕН быть одинаковым на всех перезапусках сервиса.
|
||
# При смене ключа все зашифрованные данные (пароли подключений, API-ключи LLM)
|
||
# становятся нечитаемыми.
|
||
ENCRYPTION_KEY=
|
||
|
||
# ======================================================================
|
||
# Admin (первый запуск)
|
||
# ======================================================================
|
||
# Установите true только для первого запуска в новой среде.
|
||
INITIAL_ADMIN_CREATE=false
|
||
INITIAL_ADMIN_USERNAME=admin
|
||
INITIAL_ADMIN_PASSWORD=change-me
|
||
INITIAL_ADMIN_EMAIL=
|
||
|
||
# ======================================================================
|
||
# AI API ключи (опционально)
|
||
# ======================================================================
|
||
OPENAI_API_KEY=
|
||
ANTHROPIC_API_KEY=
|
||
|
||
# ======================================================================
|
||
# Features
|
||
# ======================================================================
|
||
FEATURES__DATASET_REVIEW=true
|
||
FEATURES__HEALTH_MONITOR=true
|