---
url: >-
  https://flip-chart.ru/developers/on-premise/installation/docker-compose/advanced-setup.md
description: >-
  Установка flip On-Premise через Docker Compose в режиме High Availability:
  внешние PostgreSQL, Valkey, S3-хранилище и обратный прокси, шаги настройки.
---

# Docker Compose — High Availability

## Требования

* Сервер приложения по [системным требованиям](/on-premise/installation/system-requirements) с [Docker Engine](https://docs.docker.com/engine/install/) и [Docker Compose](https://docs.docker.com/compose/install/)
* PostgreSQL 15 (поддерживается 14)
* Valkey 9 (standalone-режим; Sentinel и Cluster не поддерживаются)
* S3-совместимое хранилище с бакетом, доступным на чтение анонимно
* Обратный прокси с терминацией SSL (nginx, HAProxy, облачный балансировщик)
* Два DNS-имени (приложение и MCP-сервер) и сертификаты на оба
* Учётные данные SMTP-сервера

::: danger Примечание
Внешние сервисы должны быть развёрнуты и доступны по сети с сервера приложения.
:::

## Шаги по настройке

### 1. Файлы

Используется каталог `deploy/docker-compose` из архива поставки; `docker-compose.yaml` заменяется на HA-вариант:

```yaml
# flip on-premise — High Availability
# PostgreSQL, Valkey, S3-хранилище и обратный прокси развёрнуты отдельно.
# Переменные — из файла .env в каталоге docker-compose.yaml

services:
  flip-file-handlers:
    image: ${FLIP_REGISTRY_IMAGE}/flip-file-handlers:${FLIP_VERSION}
    container_name: flip-file-handlers
    restart: unless-stopped
    volumes:
      - ./config/file-handlers/config.yaml:/flip/config/config.yaml:ro
    networks:
      - flip

  flip-backend:
    image: ${FLIP_REGISTRY_IMAGE}/flip-backend:${FLIP_VERSION}
    container_name: flip-backend
    restart: unless-stopped
    depends_on:
      - flip-file-handlers
    ports:
      - "9000:9000"
    volumes:
      - ./config/backend/config.yaml:/flip/cfg/config.yaml:ro
      # Корневой сертификат PostgreSQL при SSLmode: verify-full
      # - ./config/backend/ca.pem:/flip/certs/ca.pem:ro
    networks:
      - flip

  flip-frontend:
    image: ${FLIP_REGISTRY_IMAGE}/flip-frontend:${FLIP_VERSION}
    container_name: flip-frontend
    restart: unless-stopped
    depends_on:
      - flip-backend
    ports:
      - "8080:80"
    volumes:
      - ./config/frontend/config.js:/usr/share/nginx/html/app/assets/config.js:ro
    networks:
      - flip

  flip-mcp-server:
    image: ${FLIP_REGISTRY_IMAGE}/flip-mcp-server:${FLIP_VERSION}
    container_name: flip-mcp-server
    restart: unless-stopped
    depends_on:
      - flip-backend
    ports:
      - "8090:8090"
    volumes:
      - ./config/mcp-server/config.yaml:/flip/cfg/config.yaml:ro
    networks:
      - flip

networks:
  flip:
    driver: bridge

```

[Скачать docker-compose.ha.yaml](/deploy/docker-compose.ha.yaml)

Контейнеры публикуют порты на хосте: backend `9000`, frontend `8080`, mcp-server `8090`. При размещении обратного прокси на том же сервере публикацию портов допускается заменить подключением прокси к сети `flip`.

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

В файле `.env` задаются реестр и версия образов:

```ini
FLIP_REGISTRY_IMAGE=cr.yandex/crpbj8irels1kqult74e/onpremise
FLIP_VERSION=v1.2.0
```

### 3. Конфигурационные файлы

Заполните файлы в каталоге `config`, указав адреса внешних PostgreSQL, Valkey и S3:

| Файл | Описание | Ключевые поля |
|---|---|---|
| `config/backend/config.yaml` | [Backend](/on-premise/config/backend) | `Postgres`, `RedisClient`, `S3`, `Mail`, секреты |
| `config/file-handlers/config.yaml` | [File-handlers](/on-premise/config/file-handlers) | `S3Config`, `RedisConfig` |
| `config/frontend/config.js` | [Frontend](/on-premise/config/frontend) | `API_URL`, `S3_URL`, `WEBSOCKET_URL` |
| `config/mcp-server/config.yaml` | [MCP-server](/on-premise/config/mcp) | `flipApi`, `RedisClient` |

::: danger Права на файлы
Процессы в контейнерах работают не от root. Конфигурационные файлы должны быть доступны на чтение: `chmod -R a+rX config`.
:::

::: tip PostgreSQL по TLS
Для внешней базы данных используется `SSLmode: require` или `verify-full`. Для `verify-full` корневой сертификат монтируется в контейнер (закомментированная строка в `docker-compose.ha.yaml`), путь задаётся в `Postgres.SSLRootCert`.
:::

### 4. S3-хранилище

* Создайте бакет и разрешите анонимное чтение объектов (политика `download` / `public-read`).
* Загрузите медиа-ресурсы приложения: распакуйте `sources/gifs.tar` и скопируйте каталог `gifs` в корень бакета:

```bash
tar -xf sources/gifs.tar -C .
aws --endpoint-url https://s3.example.ru s3 cp gifs s3://flip/gifs --recursive
```

### 5. Обратный прокси

Маршруты и тайм-ауты — по [конфигурации nginx](/on-premise/config/nginx): WebSocket `/app/api/v1/ws`, увеличенный лимит тела запроса `/app/api/v1/flip/backup/upload`, проксирование S3 `/app/s3/`, отдельный виртуальный хост MCP-сервера.

### 6. Доступ к реестру и запуск

```bash
cat ../../credentials/authorized_key.json | docker login --username json_key --password-stdin cr.yandex
docker compose pull
docker compose up -d
docker compose ps
```

Приложение доступно по адресу `https://example.flip-chart.ru/app`. Дальнейшие действия — [первый запуск](/on-premise/installation/first-boot).
