---
url: https://flip-chart.ru/developers/on-premise/config/ai-core.md
description: >-
  Конфигурация ai-core flip On-Premise — локального AI-ядра: подключение к
  облаку flip, база данных flip_ai_core, токен backend, поля config.yaml и
  переменные окружения.
---

# Конфигурация приложения ai-core

&#x20;Скачать пример файла конфигурации&#x20;

ai-core — локальное AI-ядро flip On-Premise. Сервис регистрирует установку в облаке flip и проксирует запросы AI-функций (генерация изображений, удаление фона, AI-текст) в облачное ядро `https://ai.flip-chart.ru`. Ключ установки хранится в базе данных ai-core в зашифрованном виде. Входящие запросы ai-core принимает только от backend; публикация через обратный прокси не требуется.

Компонент необязательный: без ai-core приложение работает, AI-функции недоступны (см. [Отключение](#отключение)).

Файл конфигурации монтируется в контейнер по пути `/flip/cfg/config.yml`. Строка подключения к базе данных задаётся переменной окружения `POSTGRES_DSN`: по ней при старте контейнера применяются миграции, без неё контейнер не запускается.

::: warning Сетевой доступ
Требуется исходящий доступ по HTTPS (порт 443) к `ai.flip-chart.ru`. Переменные окружения `HTTP_PROXY` и `HTTPS_PROXY` не используются; прокси задаётся в `Upstream.ProxyURL` (см. [Дополнительные параметры](#дополнительные-параметры)).
:::

::: warning Настройка backend
В [конфигурации backend](/on-premise/config/backend#ai) задаются адрес ai-core (`AI.LocalCore.BaseURL`) и токен доступа (`AI.LocalCore.Token`), совпадающий с `Auth.Local.Token`. Для работы AI-функций в backend также требуются включённый file-handlers (`FileHandlerServiceConfig`) и S3-хранилище.
:::

## Переменные окружения

| Переменная | Описание |
|---|---|
| `POSTGRES_DSN` | Обязательна. Строка подключения к базе `flip_ai_core` (секрет). В Docker Compose задаётся в `.env` (`AI_CORE_POSTGRES_DSN`), в Kubernetes — ключом `POSTGRES_DSN` секрета `ai-core-config`. |

Пример: `postgres://flip:secret-passwd@flip-postgres:5432/flip_ai_core?sslmode=disable`. Специальные символы в имени пользователя и пароле кодируются ([percent-encoding](https://www.postgresql.org/docs/15/libpq-connect.html#LIBPQ-CONNSTRING-URIS)); для подключения по TLS указывается `sslmode=require` или `sslmode=verify-full`.

Поля файла конфигурации также задаются переменными окружения: путь поля в верхнем регистре, `.` → `_` (`Auth.Local.Token` → `AUTH_LOCAL_TOKEN`). Значение переменной окружения имеет приоритет над файлом.

## База данных

ai-core использует отдельную базу `flip_ai_core` на том же сервере PostgreSQL, что и backend. База создаётся до первого запуска ai-core:

```sql
CREATE DATABASE flip_ai_core OWNER flip;
```

`flip` — пользователь PostgreSQL приложения. В Standalone-установке (каталог `deploy/docker-compose`):

```bash
docker compose exec flip-postgres sh -c 'createdb -U "$POSTGRES_USER" -O "$POSTGRES_USER" flip_ai_core'
```

## Описание конфигурационных полей

Неизвестный ключ в файле — ошибка запуска.

### Auth.Local

* **Token**: Токен доступа backend к ai-core (секрет), не короче 32 символов. Совпадает с `AI.LocalCore.Token` в конфигурации backend. Генерация: `openssl rand -hex 32`.
* **PreviousToken**: Прежний токен на время [ротации](#ротация-токена). Вне ротации не задаётся.

### Postgres

Необязательные параметры пула соединений.

* **MaxOpenConns**, **MaxIdleConns**: Размер пула соединений. `0` — значение драйвера.\
  Пример: `10`
* **ConnMaxLifetime**: Максимальное время жизни соединения. `0` — без ограничения.\
  Пример: `30m`

## Дополнительные параметры

Уровень логирования, прокси и адреса листенеров задаются отдельным необязательным файлом. Путь к нему указывается в переменной окружения `ADJUSTABLE_CONFIG_FILE`. Эти параметры не задаются в `config.yml` и переменными окружения. Без файла действуют значения по умолчанию.

```yaml
Logger:
  Level: info          # debug | info | warn | error
  Elastic: false       # формат логов ECS
Upstream:
  ProxyURL: ""         # прокси для запросов к https://ai.flip-chart.ru, например http://proxy.example.ru:3128
Server:
  PublicAddr: ":9100"
  MetricsAddr: ":9102"
  ShutdownTimeout: 10s
```

`Upstream.ProxyURL` — абсолютный адрес со схемой `http` или `https`. При изменении портов в `Server` правятся также `AI.LocalCore.BaseURL` в backend и порты контейнера.

## Порты

| Порт | Назначение |
|---|---|
| 9100 | API для backend |
| 9102 | `/metrics`, `/healthz`, `/readyz` |

## Остановка

При остановке ai-core дожидается завершения начатых генераций. Время на остановку контейнера — не меньше 120 секунд: `stop_grace_period: 120s` в docker-compose, `terminationGracePeriodSeconds: 120` в Helm-чарте.

## Ротация токена

1. В конфигурации ai-core укажите текущий токен в `Auth.Local.PreviousToken`, новый — в `Auth.Local.Token`; перезапустите ai-core.
2. Укажите новый токен в `AI.LocalCore.Token` конфигурации backend; перезапустите backend.
3. Удалите `Auth.Local.PreviousToken` из конфигурации ai-core; перезапустите ai-core.

## Отключение

* **Docker Compose**: удалите сервис `flip-ai-core` из `docker-compose.yaml` и секцию `AI` из конфигурации backend, затем выполните `docker compose up -d --remove-orphans`.
* **Kubernetes**: укажите `ai-core.enabled: false` в `values.yaml`, удалите секцию `AI` из конфигурации backend и выполните `helm upgrade`.
