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.dev 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 develop: watch: - action: sync path: ./backend/src target: /app/src - action: rebuild path: ./backend/requirements.txt - action: sync path: ./backend/assets target: /app/assets volumes: - ./backend/src:/app/src - ./backend/assets:/app/assets 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: