services: db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: ${DB_NAME} POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - pgdata:/var/lib/postgresql/data - ./scripts/seed/init.sql:/docker-entrypoint-initdb.d/01-seed.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"] interval: 10s timeout: 5s retries: 5 deploy: resources: limits: memory: 512M cpus: "0.5" logging: driver: json-file options: max-size: "10m" max-file: "3" backend: build: context: . dockerfile: Dockerfile.backend restart: unless-stopped ports: - "127.0.0.1:8080:8080" environment: SPRING_PROFILES_ACTIVE: production SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/${DB_NAME} SPRING_DATASOURCE_USERNAME: ${DB_USER} SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD} CANNAMANAGE_SECURITY_JWT_SECRET: ${JWT_SECRET} STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY} STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET} SMTP_HOST: ${SMTP_HOST:-localhost} SMTP_PORT: ${SMTP_PORT:-587} SMTP_USERNAME: ${SMTP_USERNAME:-} SMTP_PASSWORD: ${SMTP_PASSWORD:-} SMTP_AUTH: ${SMTP_AUTH:-true} SMTP_STARTTLS: ${SMTP_STARTTLS:-true} MAIL_FROM: ${MAIL_FROM:-noreply@cannamanage.de} APP_BASE_URL: https://cannamanage.plate-software.de depends_on: db: condition: service_healthy deploy: resources: limits: memory: 1G cpus: "1.0" healthcheck: test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/actuator/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s logging: driver: json-file options: max-size: "10m" max-file: "3" frontend: build: context: ./cannamanage-frontend dockerfile: Dockerfile restart: unless-stopped ports: - "127.0.0.1:3000:3000" environment: NEXTAUTH_URL: https://cannamanage.plate-software.de NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} BACKEND_URL: http://backend:8080 AUTH_URL: https://cannamanage.plate-software.de depends_on: backend: condition: service_healthy deploy: resources: limits: memory: 512M cpus: "0.5" logging: driver: json-file options: max-size: "10m" max-file: "3" volumes: pgdata: