Files
ss-tools/.env.enterprise-clean.example
busya 1c6b3d6e8a feat(ssl): add passphrase-protected key and PKCS#12 support in nginx entrypoint
- 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
2026-07-04 17:05:51 +03:00

116 lines
5.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# #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