146 lines
6.5 KiB
YAML
146 lines
6.5 KiB
YAML
services:
|
||
# Прокси-сервер приложения DFWebOS — направляет внешний трафик на наш nginx.
|
||
app_proxy:
|
||
environment:
|
||
APP_HOST: bffless_nginx_1
|
||
APP_PORT: 5537
|
||
PROXY_AUTH_ADD: 'false'
|
||
|
||
# Обратный прокси-сервер Nginx — обслуживает интерфейс, маршрутизирует вызовы API.
|
||
# Использует собственное изображение зонтика со встроенным шаблоном конфигурации и страницей настройки.
|
||
nginx:
|
||
image: ghcr.io/bffless/ce-nginx:dfwebos@sha256:40b8f8dd37dd1483a08e687b1f0efe6061c62fcd73013fb46749c74407dbdf84
|
||
restart: on-failure
|
||
stop_grace_period: 30s
|
||
environment:
|
||
DEVICE_DOMAIN_NAME: ${DEVICE_DOMAIN_NAME:-dfwebos.local}
|
||
volumes:
|
||
# Конфигурация пользователя (domain.txt) — доступна для записи пользователем
|
||
- ${APP_DATA_DIR}/data/config:/app/config:ro
|
||
# Статические файлы внешнего интерфейса из контейнера внешнего интерфейса
|
||
- ${APP_DATA_DIR}/data/frontend:/usr/share/nginx/html/app:ro
|
||
# Конфигурации динамического домена, написанные серверной частью
|
||
- ${APP_DATA_DIR}/data/nginx:/etc/nginx/sites-enabled
|
||
depends_on:
|
||
- backend
|
||
- frontend
|
||
|
||
# База данных PostgreSQL
|
||
postgres:
|
||
image: pgvector/pgvector:0.8.2-pg17@sha256:494dff7e67e7bc2c826b94c331364978d145ebb86fd338154138b084223b7f67
|
||
restart: on-failure
|
||
stop_grace_period: 30s
|
||
environment:
|
||
POSTGRES_USER: postgres
|
||
POSTGRES_PASSWORD: staticfilesgobrrrr
|
||
POSTGRES_DB: assethost
|
||
volumes:
|
||
- ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data
|
||
- ${APP_DATA_DIR}/data/db/init-databases.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
||
command: >
|
||
postgres
|
||
-c shared_buffers=64MB
|
||
-c effective_cache_size=128MB
|
||
-c work_mem=4MB
|
||
-c maintenance_work_mem=32MB
|
||
-c max_connections=20
|
||
-c wal_buffers=4MB
|
||
healthcheck:
|
||
test: ['CMD-SHELL', 'pg_isready -U postgres']
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 5
|
||
|
||
# Служба аутентификации SuperTokens
|
||
supertokens:
|
||
image: supertokens/supertokens-postgresql:9.3@sha256:39c36693b19c4e231684c9e614422c1c95751c346c6fc3ffd74980161d0b041c
|
||
restart: on-failure
|
||
stop_grace_period: 30s
|
||
depends_on:
|
||
postgres:
|
||
condition: service_healthy
|
||
environment:
|
||
# Используйте отдельные параметры вместо соединения URI (более надежно)
|
||
POSTGRESQL_HOST: bffless_postgres_1
|
||
POSTGRESQL_PORT: '5432'
|
||
POSTGRESQL_USER: postgres
|
||
POSTGRESQL_PASSWORD: staticfilesgobrrrr
|
||
POSTGRESQL_DATABASE_NAME: supertokens
|
||
# Увеличена память для запуска JVM на ARM64.
|
||
JAVA_OPTS: '-Xmx192m -Xms96m -XX:+UseSerialGC -XX:MaxMetaspaceSize=64m'
|
||
POSTGRESQL_CONNECTION_POOL_SIZE: '3'
|
||
healthcheck:
|
||
test: ['CMD', 'curl', '-f', 'http://localhost:3567/hello']
|
||
interval: 15s
|
||
timeout: 10s
|
||
retries: 8
|
||
start_period: 45s
|
||
|
||
# NestJS серверная часть API
|
||
# Использует собственное изображение зонтика со встроенной точкой входа, которая извлекает ключи из APP_SEED.
|
||
backend:
|
||
image: ghcr.io/bffless/ce-backend:dfwebos@sha256:7c4d4c15a186d5bb3b9e916aaadbe9602a0701db1ff2e3c47b9e7f3814967e61
|
||
restart: on-failure
|
||
stop_grace_period: 30s
|
||
depends_on:
|
||
postgres:
|
||
condition: service_healthy
|
||
supertokens:
|
||
condition: service_healthy
|
||
environment:
|
||
NODE_OPTIONS: '--max-old-space-size=128'
|
||
NODE_ENV: production
|
||
PORT: '3000'
|
||
LOG_LEVEL: 'error,warn,log'
|
||
# DFWebOS предоставляет APP_SEED — точка входа наследует ENCRYPTION_KEY, JWT_SECRET, API_KEY_SALT
|
||
APP_SEED: ${APP_SEED:-}
|
||
APP_DATA_DIR: ${APP_DATA_DIR:-/data}
|
||
# База данных
|
||
DATABASE_URL: postgresql://postgres:staticfilesgobrrrr@bffless_postgres_1:5432/assethost
|
||
# Хранилище — локальная файловая система (без MinIO)
|
||
STORAGE_TYPE: local
|
||
ENABLE_MINIO: 'false'
|
||
# Кэш — в памяти (без Redis)
|
||
CACHE_TYPE: memory
|
||
ENABLE_REDIS: 'false'
|
||
# Супертокены
|
||
SUPERTOKENS_MODE: local
|
||
SUPERTOKENS_CONNECTION_URI: http://bffless_supertokens_1:3567
|
||
SUPERTOKENS_API_KEY: ''
|
||
# По умолчанию URLs — переопределяется точкой входа, если domain.txt существует.
|
||
PRIMARY_DOMAIN: localhost
|
||
FRONTEND_URL: http://localhost:5537
|
||
API_DOMAIN: http://localhost:5537
|
||
ADMIN_DOMAIN: localhost
|
||
# Настройки файлов cookie – переопределяются точкой входа для реальных доменов.
|
||
COOKIE_SECURE: 'false'
|
||
COOKIE_DOMAIN: 'dfwebos.local'
|
||
# Конфигурация Nginx
|
||
NGINX_SITES_PATH: /etc/nginx/sites-enabled
|
||
NGINX_RELOAD_WAIT_MS: '3000'
|
||
NGINX_LISTEN_PORT: '5537'
|
||
BACKEND_HOST: backend
|
||
# SSL обрабатывается Cloudflare Tunnel — nginx генерирует конфигурации, отличные от SSL.
|
||
PROXY_MODE: 'cloudflare-tunnel'
|
||
# Флаги функций (интерфейс-related)
|
||
FEATURE_WILDCARD_SSL: 'false'
|
||
FEATURE_WILDCARD_SSL_BANNER: 'false'
|
||
FEATURE_DOMAIN_SSL_TOGGLE: 'false'
|
||
volumes:
|
||
# Пользовательские загрузки
|
||
- ${APP_DATA_DIR}/data/uploads:/app/apps/backend/uploads
|
||
# Конфигурация пользователя (domain.txt)
|
||
- ${APP_DATA_DIR}/data/config:/app/config:ro
|
||
# Динамические конфигурации nginx, написанные бэкэндом
|
||
- ${APP_DATA_DIR}/data/nginx:/etc/nginx/sites-enabled
|
||
|
||
# Интерфейс React (обслуживает статические файлы)
|
||
frontend:
|
||
image: ghcr.io/bffless/ce-frontend:dfwebos@sha256:9b02e77aec76a5abeaa45f07f64ec6add565b124bbb37a639fb4d633a774f1d9
|
||
restart: on-failure
|
||
stop_grace_period: 30s
|
||
volumes:
|
||
- ${APP_DATA_DIR}/data/frontend:/app/dist
|
||
depends_on:
|
||
- backend
|