Files

146 lines
6.5 KiB
YAML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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