version: '3.8' services: # MySQL Database 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 # FastAPI Backend backend: build: context: ./HarborForge.Backend/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/backend:/app deploy: resources: limits: cpus: '0.5' memory: 512M # React Frontend (optional, for future) # frontend: # build: # context: ./frontend # dockerfile: Dockerfile # container_name: harborforge-frontend # restart: unless-stopped # ports: # - "3000:3000" # depends_on: # - backend # networks: # - harborforge # volumes: # - ./frontend:/app # - /app/node_modules # CLI (run on demand) # cli: # build: # context: ./cli # dockerfile: Dockerfile # volumes: # - ./cli:/app # - ~/.harborforge:/root/.harborforge # networks: # - harborforge networks: harborforge: driver: bridge volumes: mysql_data: driver: local