Skip to content

Конфигурация

Все настройки можно. задаются через переменные окружения. Ниже — полный список с описаниями и значениями по умолчанию.

Основные настройки

ПеременнаяПо умолчаниюОписание
SERVER_PORT8080Порт, на котором слушает HTTP-сервер
APP_BASE_URLhttp://localhost:8080Публичный URL сервера. Используется для генерации ссылок и CORS
JWT_SECRET— (dev-ключ по умолчанию)Секретный ключ для подписи JWT-токенов. Обязателен в продакшене. Минимум 256 бит
CACHE_TTL_MINUTES5TTL кеша Caffeine в минутах. При multi-node уменьшите до 1 или 0. Подробнее — Масштабирование
CLIENT_MAX_METRICS_PER_KEY1000Максимальное количество хранимых метрик на API-ключ

База данных

ПеременнаяПо умолчаниюОписание
SPRING_DATASOURCE_URLjdbc:postgresql://localhost:5432/feature_flagsJDBC URL для подключения к PostgreSQL
SPRING_DATASOURCE_USERNAMEflags_userИмя пользователя базы данных
SPRING_DATASOURCE_PASSWORDflags_passwordПароль пользователя базы данных

Дополнительные настройки пула соединений

ПеременнаяПо умолчаниюОписание
HIKARI_MAX_POOL_SIZE20Максимальный размер пула соединений HikariCP
HIKARI_MIN_IDLE5Минимальное количество простаивающих соединений
HIKARI_CONNECTION_TIMEOUT10000Таймаут получения соединения (мс)

Flyway (миграции)

ПеременнаяПо умолчаниюОписание
SPRING_FLYWAY_ENABLEDtrueАвтоматический запуск миграций при старте
SPRING_FLYWAY_LOCATIONSclasspath:db/migrationПуть к файлам миграций

JWT и безопасность

ПеременнаяПо умолчаниюОписание
JWT_SECRET— (dev-ключ по умолчанию)Секретный ключ подписи JWT. Обязателен в продакшене
JWT_ACCESS_TOKEN_TTL_MINUTES15Время жизни access-токена в минутах
JWT_REFRESH_TOKEN_TTL_DAYS30Время жизни refresh-токена в днях

Refresh-токены используют семейную ротацию (family rotation). При каждом обновлении старый refresh-токен инвалидируется, новый сохраняется в ту же «семью». Если украденный токен используется повторно, вся семья аннулируется.

Swagger / OpenAPI

ПеременнаяПо умолчаниюОписание
SPRINGDOC_SWAGGER_UI_PATH/swagger-ui.htmlПуть к Swagger UI
SPRINGDOC_API_DOCS_PATH/v3/api-docsПуть к OpenAPI-спецификации

Пример .env-файла

bash
# Обязательные
JWT_SECRET=your-256-bit-secret-change-me-in-production

# База данных
SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/feature_flags
SPRING_DATASOURCE_USERNAME=flags_user
SPRING_DATASOURCE_PASSWORD=flags_password

# Сервер
SERVER_PORT=8080
APP_BASE_URL=http://localhost:8080

# JWT
JWT_ACCESS_TOKEN_TTL_MINUTES=15
JWT_REFRESH_TOKEN_TTL_DAYS=30

# Пул соединений
HIKARI_MAX_POOL_SIZE=20
HIKARI_MIN_IDLE=5

# Кеш
CACHE_TTL_MINUTES=5
CLIENT_MAX_METRICS_PER_KEY=1000

Продакшен-рекомендации

  1. JWT_SECRET — используйте криптографически стойкий ключ длиной не менее 256 бит. Сгенерировать:

    bash
    openssl rand -base64 32
  2. База данных — всегда задавайте сложный пароль. Не используйте flags_password на проде.

  3. APP_BASE_URL — укажите реальный домен (https://flags.example.com) для корректной работы CORS и генерации ссылок.

  4. Пул соединений — для продакшена увеличьте HIKARI_MAX_POOL_SIZE до 20–50 в зависимости от нагрузки.

  5. Refresh token rotation — включена по умолчанию. Ротация предотвращает перехват токенов.

Дополнительные настройки безопасности

Rate Limiting

ПеременнаяПо умолчаниюОписание
APP_RATE_LIMIT_ENABLEDtrueВключение rate limiting
APP_RATE_LIMIT_LOGIN_CAPACITY5Ёмкость корзины для логина
APP_RATE_LIMIT_LOGIN_REFILL_TOKENS5Токенов за интервал для логина
APP_RATE_LIMIT_LOGIN_REFILL_MINUTES1Интервал пополнения для логина (мин)
APP_RATE_LIMIT_PASSWORD_RESET_CAPACITY3Ёмкость для сброса пароля
APP_RATE_LIMIT_PASSWORD_RESET_REFILL_TOKENS3Токенов за интервал для сброса
APP_RATE_LIMIT_PASSWORD_RESET_REFILL_MINUTES60Интервал пополнения для сброса (мин)
APP_RATE_LIMIT_REFRESH_CAPACITY10Ёмкость для обновления токенов
APP_RATE_LIMIT_REFRESH_REFILL_TOKENS10Токенов за интервал для refresh
APP_RATE_LIMIT_REFRESH_REFILL_MINUTES1Интервал пополнения для refresh (мин)
APP_RATE_LIMIT_CLIENT_CAPACITY1000Ёмкость для SDK-клиентов
APP_RATE_LIMIT_CLIENT_REFILL_TOKENS1000Токенов за интервал для SDK
APP_RATE_LIMIT_CLIENT_REFILL_MINUTES1Интервал пополнения для SDK (мин)
APP_RATE_LIMIT_API_WRITE_CAPACITY100Ёмкость для admin write-операций
APP_RATE_LIMIT_API_WRITE_REFILL_TOKENS100Токенов за интервал для write
APP_RATE_LIMIT_API_WRITE_REFILL_MINUTES1Интервал пополнения для write (мин)

CORS

ПеременнаяПо умолчаниюОписание
APP_CORS_ALLOWED_ORIGINS""Разрешённые origin для CORS (через запятую)

JWT

ПеременнаяПо умолчаниюОписание
JWT_ISSUERmozhnoИздатель токенов (iss claim)

Аудит

ПеременнаяПо умолчаниюОписание
AUDIT_RETENTION_DAYS365Срок хранения записей аудита в днях

Прочее

ПеременнаяПо умолчаниюОписание
APP_UPLOAD_DIR./uploadsДиректория для загружаемых файлов (лого, аватары)
APP_CLIENT_INSTANCE_RETENTION_DAYS30Срок хранения неактивных экземпляров SDK
HIKARI_LEAK_DETECTION30000Порог детекции утечек соединений (мс)
CACHE_TYPEcaffeineSpring-тип кеша. caffeine — in-memory (Community). Для Redis добавьте spring-boot-starter-data-redis и смените на redis

SMTP (почта)

ПеременнаяПо умолчаниюОписание
SMTP_HOSTlocalhostХост SMTP-сервера
SMTP_PORT587Порт SMTP-сервера
SMTP_USERNAMEИмя пользователя SMTP
SMTP_PASSWORDПароль SMTP
EMAIL_FROMnoreply@mozhno.devАдрес отправителя писем

Что дальше?

Released under the AGPL v3.0 License.