Files
MikrotikManager/deploy/docker-compose.test.yml

122 lines
3.3 KiB
YAML

name: mmapp-test
services:
postgres:
image: ${POSTGRES_IMAGE_TAG:-postgres:18-alpine}
container_name: mmapp-test-postgres
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
shm_size: "256mb"
environment:
POSTGRES_USER: mmapp
POSTGRES_DB: mmapp
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env}
POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C.UTF-8 --data-checksums"
TZ: UTC
PGTZ: UTC
command:
- postgres
- -c
- timezone=UTC
- -c
- listen_addresses=*
- -c
- max_connections=100
- -c
- shared_buffers=256MB
- -c
- work_mem=16MB
- -c
- maintenance_work_mem=128MB
- -c
- wal_compression=lz4
- -c
- default_toast_compression=lz4
- -c
- io_method=worker
- -c
- io_workers=3
- -c
- effective_io_concurrency=200
- -c
- max_wal_size=2GB
- -c
- checkpoint_timeout=15min
- -c
- checkpoint_completion_target=0.9
volumes:
# PostgreSQL 18+: VOLUME is /var/lib/postgresql (PGDATA = .../18/docker)
- mmapp-pgdata:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mmapp -d mmapp"]
interval: 5s
timeout: 5s
retries: 10
backend:
image: mmapp-test/backend:${BACKEND_IMAGE_TAG:-${MMAPP_IMAGE_TAG:?set MMAPP_IMAGE_TAG}}
container_name: mmapp-test-backend
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
depends_on:
postgres:
condition: service_healthy
ports:
- "127.0.0.1:8000:8000"
# IPFIX: только на WG-адресе хоста после `wg-quick up wg-flow`, не 0.0.0.0
# - "10.255.254.1:4739:4739/udp"
environment:
CORS_ORIGIN: ${CORS_ORIGIN:-http://localhost:3000}
DATABASE_URL: postgres://mmapp:${POSTGRES_PASSWORD}@postgres:5432/mmapp
DATABASE_PATH: /app/data/mikrotik.db
AUTH_REQUIRED: ${AUTH_REQUIRED:-false}
AUTH_JWT_SECRET: ${AUTH_JWT_SECRET:?set AUTH_JWT_SECRET}
AUTH_ISSUER: ${AUTH_ISSUER:-https://auth.test.local}
AUTH_PORTAL_URL: ${AUTH_PORTAL_URL:-http://localhost:5175}
# IPFIX: внутри контейнера слушаем все интерфейсы; на хосте UDP 4739 публикуется только на WG-IP
FLOW_LISTEN_HOST: "0.0.0.0"
volumes:
- ./data:/app/data
# Native .rsc files must survive backend recreation.
- ./data/backups:/app/storage/backups
healthcheck:
test:
[
"CMD",
"node",
"-e",
"fetch('http://127.0.0.1:8000/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))",
]
interval: 30s
timeout: 5s
retries: 3
start_period: 300s
frontend:
image: mmapp-test/frontend:${MMAPP_IMAGE_TAG:?set MMAPP_IMAGE_TAG}
container_name: mmapp-test-frontend
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
depends_on:
- backend
ports:
- "127.0.0.1:3000:3000"
environment:
BACKEND_INTERNAL_URL: http://backend:8000
volumes:
mmapp-pgdata: