9.0 KiB
Конфигурация проекта Attachments
Версия: 0.11.1
Документ описывает все переменные окружения и способы конфигурирования сервиса.
Способы конфигурирования
Настройка сервиса выполняется только через переменные окружения. Отдельного файла с настройками (yaml/toml) в приложении нет — за конфигурацию отвечает internal/config/settings.py на базе pydantic.BaseSettings.
Источники переменных окружения по способам запуска:
| Способ запуска | Откуда берутся переменные |
|---|---|
| Локально (docker-compose) | Файл .env в корне (env_file: .env в docker-compose.yml), плюс POSTGRES_PASSWORD для контейнера БД |
| Kubernetes (Helm) | .helm/values.yaml: блок envs (обычные значения) и secretEnvs (значения из k8s-секретов) |
| CI/CD (GitLab) | .gitlab-ci.yml: переменные пайплайна и build-args |
Дополнительно секреты доступа к S3 не задаются напрямую, а читаются из JSON-файла (см. YANDEX_S3_ACCOUNT_PATH ниже).
Переменные приложения (класс Settings)
Читаются напрямую по имени (регистрозависимо, case_sensitive = True). Переменные без значения по умолчанию обязательны — без них приложение не стартует.
| Переменная | Тип | Обязательна | Значение по умолчанию | Назначение |
|---|---|---|---|---|
API |
str | нет | /api |
Префикс всех HTTP-роутов |
NAME |
str | нет | Attachments |
Имя сервиса (title в FastAPI/OpenAPI) |
VERSION |
str | нет | 0.0.1 |
Версия сервиса |
DESCRIPTION |
str | нет | Attachments |
Описание сервиса |
YANDEX_S3_ENDPOINT_URL |
str | да* | — | Endpoint S3 (без схемы; https:///http:// добавляется в коде по YANDEX_S3_USE_SSL) |
YANDEX_S3_ACCESS_KEY_ID |
str | да* | — | Access Key ID для S3 |
YANDEX_S3_SECRET_ACCESS_KEY |
str | да* | — | Secret Access Key для S3 |
YANDEX_S3_USE_SSL |
bool | нет | True |
Использовать ли HTTPS при обращении к S3 |
YANDEX_S3_REGION |
str | нет | ru-central1 |
Регион S3 |
YANDEX_S3_VERIFY |
bool | да | — | Проверять ли SSL-сертификат S3 |
BUCKET_NAME |
str | да | — | Имя бакета для вложений |
DATABASE_NAME |
str | да | — | Имя базы данных PostgreSQL |
DATABASE_USER |
str | да | — | Пользователь БД |
DATABASE_PASSWORD |
str | да | — | Пароль пользователя БД |
DATABASE_HOST |
str | да | — | Хост БД |
DATABASE_PORT |
int | да | — | Порт БД |
DATABASE_SSL_MODE |
str | да | — | Режим SSL при подключении к БД (напр. disable, require, verify-full) |
* Три переменные YANDEX_S3_ENDPOINT_URL, YANDEX_S3_ACCESS_KEY_ID, YANDEX_S3_SECRET_ACCESS_KEY формально обязательны, но при старте приложения они проставляются автоматически функцией json_config_s3_account_settings() из JSON-файла (см. YANDEX_S3_ACCOUNT_PATH). Задавать их вручную не нужно, если задан путь к файлу.
Настройки S3 через JSON-файл
| Переменная | Обязательна | Назначение |
|---|---|---|
YANDEX_S3_ACCOUNT_PATH |
да | Путь к JSON-файлу с реквизитами сервисного аккаунта S3 |
При старте функция json_config_s3_account_settings() читает файл по этому пути и выставляет переменные окружения YANDEX_S3_ENDPOINT_URL, YANDEX_S3_ACCESS_KEY_ID, YANDEX_S3_SECRET_ACCESS_KEY.
Ожидаемая структура JSON-файла:
{
"endpoint": "storage.yandexcloud.net",
"access_key_id": "<ключ>",
"secret_access_key": "<секрет>"
}
В Kubernetes файл монтируется из секрета attachments-s3-secret (в prod — yc-s3) в /etc/sarex/yc-s3-storage/yc-s3-service-account.json.
Логирование (класс LoggerSettings, префикс LOG_)
| Переменная | Тип | Значение по умолчанию | Назначение |
|---|---|---|---|
LOG_LEVEL |
str | INFO |
Уровень логирования (DEBUG, INFO, WARNING, ...). При неизвестном значении откатывается на INFO |
LOG_FORMAT |
str | JSON-шаблон с полями timestamp, level, message |
Формат строк лога (используется pythonjsonlogger) |
Трейсинг / OpenTelemetry (класс TraceSettings, префикс TRACING_)
| Переменная | Тип | Значение по умолчанию | Назначение |
|---|---|---|---|
TRACING_USE |
bool | False |
Включает OTEL-трейсинг, логгер и middleware |
TRACING_HOST |
str | localhost:4317 |
Адрес OTLP-коллектора |
TRACING_SERVICE_NAME |
str | attachments |
Имя сервиса в трейсах |
TRACING_INSECURE |
bool | False |
Небезопасное (без TLS) подключение к коллектору |
Трейсинг активируется только при TRACING_USE=true.
Переменные инфраструктуры и сборки
Не читаются кодом приложения, но нужны для запуска/сборки/деплоя.
| Переменная | Где используется | Назначение |
|---|---|---|
POSTGRES_PASSWORD |
docker-compose.yml (контейнер db) |
Пароль суперпользователя PostgreSQL при локальном запуске |
PIP_EXTRA_INDEX_URL |
docker/Dockerfile (build-arg) |
Доп. индекс pip для установки приватных пакетов при сборке образа |
GITLAB_PYPI_EXTRA_INDEX_URL |
.gitlab-ci.yml |
Значение, пробрасываемое в PIP_EXTRA_INDEX_URL при сборке в CI |
Переменные CI/CD (.gitlab-ci.yml)
Служебные переменные пайплайна: SERVICE_NAME, DOCKERFILE_PATH, BUILD_ARGS, CI_TRIGGER_SOURCE, а также подставляемые по окружениям STAND, NAMESPACE, RELEASE_NAME, CHART_NAME, CHART_VERSION, K8S_HUSTLER_BRANCH, HELM_SET_ARGS. Окружение выбирается по ветке/тегу: stage → ветка stage, preprod → ветка master, production → git-тег.
Переменные из Helm-чарта (.helm/values.yaml)
Обычные переменные (envs):
| Переменная | Значение | Примечание |
|---|---|---|
API_ADDRESS |
0.0.0.0:8000 |
Задаётся в чарте, но кодом приложения не читается |
POSTGRES_POOL_SIZE |
10 |
Задаётся в чарте, но кодом приложения не читается |
DATABASE_SSL_MODE |
verify-full |
|
YANDEX_S3_VERIFY |
true |
|
YANDEX_S3_ACCOUNT_PATH |
/etc/sarex/yc-s3-storage/yc-s3-service-account.json |
|
BUCKET_NAME |
attachments-stage-2 / attachments-prod-2 |
Зависит от окружения |
Переменные из секретов (secretEnvs, секрет attachments-postgresql-secret / ya-pg-secret):
| Переменная | Ключ секрета | Примечание |
|---|---|---|
DATABASE_PORT |
port |
|
DATABASE_HOST |
host |
|
DATABASE_USER |
username |
|
DATABASE_PASSWORD |
password |
|
DATABASE_NAME |
database |
|
YC-PG-CERTIFICATE |
ca.crt |
CA-сертификат PostgreSQL; также монтируется файлом в /root/.postgresql/root.crt |
Минимальный набор для локального запуска
Для запуска через docker-compose в файле .env достаточно задать (см. .env.example):
POSTGRES_PASSWORD— для контейнера БДDATABASE_*— параметры подключения к БДBUCKET_NAME,YANDEX_S3_VERIFYYANDEX_S3_ACCOUNT_PATHили напрямуюYANDEX_S3_ENDPOINT_URL+YANDEX_S3_ACCESS_KEY_ID+YANDEX_S3_SECRET_ACCESS_KEY