Skip to content

Конфигурация базы данных

SLOzy использует PostgreSQL в качестве основной базы данных и Redis для кэширования результатов Prometheus-запросов.

PostgreSQL

Подключение

Подключение настраивается через DATABASE_URL либо через отдельные переменные POSTGRES_*. Строка подключения собирается в формате:

host={host} port={port} dbname={db} user={user} password={password} sslmode={sslmode}

Библиотека подключения — pgx v5 через пул соединений pgxpool.

Пул соединений

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

go
config.MaxConns = int32(cfg.PostgresMaxOpenConns)  // 25 по умолчанию
config.MinConns = int32(cfg.PostgresMaxIdleConns)   // 10 по умолчанию
config.MaxConnLifetime = 1800 * time.Second          // 30 минут
config.MaxConnIdleTime = 600 * time.Second            // 10 минут
config.HealthCheckPeriod = 1 * time.Minute

Пул проверяет здоровье соединений каждую минуту. Соединения, превысившие MaxConnLifetime или MaxConnIdleTime, автоматически закрываются и заменяются новыми.

Параметры пула

ПараметрПо умолчаниюОписание
POSTGRES_MAX_OPEN_CONNS25Максимальное количество соединений в пуле
POSTGRES_MAX_IDLE_CONNS10Минимальное количество idle-соединений
POSTGRES_CONN_MAX_LIFETIME1hВремя жизни соединения
POSTGRES_CONN_MAX_IDLETIME10mВремя простоя до закрытия

Миграции

Миграции выполняются библиотекой golang-migrate/migrate. Файлы миграций находятся в директории migrations/ в корне проекта:

migrations/
  000001_create_users.up.sql
  000001_create_users.down.sql
  000002_create_slos.up.sql
  000002_create_slos.down.sql
  ...

Миграции запускаются при старте приложения вызовом RunMigrations():

go
func RunMigrations(databaseURL string) error {
    m, err := migrate.New("file://migrations", databaseURL)
    if err != nil {
        return err
    }
    defer m.Close()
    if err := m.Up(); err != nil && err != migrate.ErrNoChange {
        return err
    }
    return nil
}

Если миграции уже применены, повторный запуск игнорируется (ErrNoChange).

SSL

Режим SSL для PostgreSQL задаётся через POSTGRES_SSL_MODE:

  • disable — без SSL (по умолчанию для development)
  • require — обязательное SSL-соединение
  • verify-full — полная проверка сертификата (рекомендуется для production)

В production-окружении типичная строка подключения выглядит так:

DATABASE_URL=postgres://postgres:postgres@postgres-service:5432/slozy_db?sslmode=require

Redis

Redis используется для:

  • Кэширования результатов вычислений SLO
  • Хранения сессий пользователей
  • Дедупликации оповещений
  • Очередей фоновых задач

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

ПеременнаяПо умолчаниюОписание
REDIS_HOSTlocalhostХост Redis
REDIS_PORT6379Порт
REDIS_PASSWORDПароль
REDIS_DB0Номер базы данных
REDIS_TLS_ENABLEDfalseВключение TLS

Параметры кэша

ПеременнаяПо умолчаниюОписание
CACHE_ENABLEDtrueВключение кэширования
CACHE_DEFAULT_TTL300 (5 минут)TTL записей по умолчанию (в секундах)
CACHE_MAX_ENTRIES10000Максимальное количество записей
CACHE_COMPRESSIONtrueСжатие значений