# Bifrost — LLM-gateway (github.com/maximhq/bifrost). Единый OpenAI-совместимый # шлюз для AI-фич других приложений (сейчас — tududi). За ним провайдер DeepSeek. # Клиенты ходят в него по имени bifrost_app:8080 в общей web_proxy_network и про # провайдера/модель ничего не знают — роутинг решает config.json. # See versions: https://hub.docker.com/r/maximhq/bifrost/tags # Тег образа = GitHub-релиз transports/vX.Y.Z (там же changelog и миграции БД); # релизы helm-chart-vX.Y.Z в том же списке — это чарт, не образ, и нумерация у # него своя и убегает вперёд (helm-chart-v2.1.40 против transports/v2.1.0). Часть # миграций config.db необратима (и в v2.0.0, и в v2.1.0): откат = снести config.db # (он целиком восстанавливается из config.json) и вернуть прежний тег. Конфиг # после апдейта валидировать по transports/config.schema.json из нужного тега: Bifrost на Go # молча игнорирует ключ, положенный не в ту секцию, в логах этого не видно. # # В контейнере Bifrost слушает 8080 (дефолт). Наружу host-порт НЕ пробрасываем: # веб-UI (Dashboard + Logs) и API доступны только через Caddy # (bifrost.vakhrushev.me, за Authelia forward_auth) и внутри web_proxy_network. # # App-dir Bifrost по умолчанию — /app/data; туда монтируется config_dir с # config.json (источник правды, с секретами, 0600). SQLite-сторы config.db / # logs.db вынесены в data_dir -> /app/store (пути заданы явно в config.json). services: bifrost_app: image: maximhq/bifrost:v2.1.1 container_name: bifrost_app restart: unless-stopped user: "{{ owner_create_result.uid }}:{{ owner_create_result.group }}" networks: - "web_proxy_network" volumes: # App-dir: config.json (рендерит плейбук). - "{{ config_dir }}:/app/data" # Сторы, создаёт и держит сам Bifrost — бекапить не нужно (config.db # восстанавливается из config.json, logs.db — просто логи запросов). - "{{ data_dir }}:/app/store" networks: web_proxy_network: external: true