Docker Compose — High Availability
Требования
- Сервер приложения по системным требованиям с Docker Engine и Docker Compose
- PostgreSQL 15 (поддерживается 14)
- Valkey 9 (standalone-режим; Sentinel и Cluster не поддерживаются)
- S3-совместимое хранилище с бакетом, доступным на чтение анонимно
- Обратный прокси с терминацией SSL (nginx, HAProxy, облачный балансировщик)
- Два DNS-имени (приложение и MCP-сервер) и сертификаты на оба
- Учётные данные SMTP-сервера
Примечание
Внешние сервисы должны быть развёрнуты и доступны по сети с сервера приложения.
Шаги по настройке
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
Контейнеры публикуют порты на хосте: backend 9000, frontend 8080, mcp-server 8090. При размещении обратного прокси на том же сервере публикацию портов допускается заменить подключением прокси к сети flip.
2. Переменные окружения
В файле .env задаются реестр и версия образов:
ini
FLIP_REGISTRY_IMAGE=cr.yandex/crpbj8irels1kqult74e/onpremise
FLIP_VERSION=v1.2.03. Конфигурационные файлы
Заполните файлы в каталоге config, указав адреса внешних PostgreSQL, Valkey и S3:
| Файл | Описание | Ключевые поля |
|---|---|---|
config/backend/config.yaml | Backend | Postgres, RedisClient, S3, Mail, секреты |
config/file-handlers/config.yaml | File-handlers | S3Config, RedisConfig |
config/frontend/config.js | Frontend | API_URL, S3_URL, WEBSOCKET_URL |
config/mcp-server/config.yaml | MCP-server | flipApi, RedisClient |
Права на файлы
Процессы в контейнерах работают не от root. Конфигурационные файлы должны быть доступны на чтение: chmod -R a+rX config.
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 --recursive5. Обратный прокси
Маршруты и тайм-ауты — по конфигурации 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. Дальнейшие действия — первый запуск.