stupa-pdf-api/docker-compose.yml

100 lines
2.4 KiB
YAML

services:
db:
image: mysql:8.0
container_name: stupa_db
restart: unless-stopped
command:
[
"mysqld",
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_unicode_ci",
"--default-authentication-plugin=mysql_native_password",
]
environment:
MYSQL_DATABASE: ${MYSQL_DB:-stupa}
MYSQL_USER: ${MYSQL_USER:-stupa}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-secret}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootsecret}
healthcheck:
test:
[
"CMD-SHELL",
"mysqladmin ping -h 127.0.0.1 -uroot -p${MYSQL_ROOT_PASSWORD:-rootsecret} --silent",
]
interval: 10s
timeout: 5s
retries: 6
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
api:
build:
context: ./backend
dockerfile: Dockerfile
network: host
container_name: stupa_api
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
# DB
MYSQL_HOST: db
MYSQL_PORT: 3306
MYSQL_DB: ${MYSQL_DB:-stupa}
MYSQL_USER: ${MYSQL_USER:-stupa}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-secret}
# Auth / Limits
MASTER_KEY: ${MASTER_KEY:-change_me}
RATE_IP_PER_MIN: ${RATE_IP_PER_MIN:-60}
RATE_KEY_PER_MIN: ${RATE_KEY_PER_MIN:-30}
# PDF-Templates (liegen im Image in /app/assets)
QSM_TEMPLATE: /app/assets/qsm.pdf
VSM_TEMPLATE: /app/assets/vsm.pdf
# Optional: TZ
TZ: ${TZ:-Europe/Berlin}
ports:
- "8000:8000"
# Healthcheck: ping FastAPI root
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:8000/ || exit 1"]
interval: 10s
timeout: 5s
retries: 6
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
network: host
container_name: stupa_frontend
restart: unless-stopped
depends_on:
- api
ports:
- "3001:80"
environment:
- NODE_ENV=production
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost/ || exit 1"]
interval: 10s
timeout: 5s
retries: 6
adminer:
image: adminer:4
container_name: stupa_adminer
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
ADMINER_DEFAULT_SERVER: db
ports:
- "8080:8080"
volumes:
db_data: