version: '3.8' services: mysql: image: mysql:8.0 container_name: harborforge-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-harborforge_root} MYSQL_DATABASE: ${MYSQL_DATABASE:-harborforge} MYSQL_USER: ${MYSQL_USER:-harborforge} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-harborforge_pass} volumes: - mysql_data:/var/lib/mysql ports: - 3306:3306 networks: - harborforge healthcheck: test: - CMD - mysqladmin - ping - -h - localhost interval: 10s timeout: 5s retries: 5 deploy: resources: limits: cpus: '0.5' memory: 512M backend: build: context: ./HarborForge.Backend dockerfile: Dockerfile container_name: harborforge-backend restart: unless-stopped environment: DATABASE_URL: mysql+pymysql://${MYSQL_USER:-harborforge}:${MYSQL_PASSWORD:-harborforge_pass}@mysql:3306/${MYSQL_DATABASE:-harborforge} SECRET_KEY: ${SECRET_KEY:-change_me_in_production} LOG_LEVEL: ${LOG_LEVEL:-INFO} ports: - 8000:8000 depends_on: mysql: condition: service_healthy networks: - harborforge volumes: - ./HarborForge.Backend:/app deploy: resources: limits: cpus: '0.5' memory: 512M healthcheck: test: - CMD - curl - -f - http://localhost:8000/health interval: 30s timeout: 10s retries: 3 start_period: 10s networks: harborforge: driver: bridge volumes: mysql_data: driver: local