services: # mysql: # image: mysql:8.0 # container_name: membership_mysql # restart: unless-stopped # environment: # MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD:-secure_root_password_change_this} # MYSQL_DATABASE: ${DATABASE_NAME:-membership_db} # MYSQL_USER: ${DATABASE_USER:-membership_user} # MYSQL_PASSWORD: ${DATABASE_PASSWORD:-secure_password_change_this} # # No external port exposure - database only accessible on private network # expose: # - "3306" # volumes: # - mysql_data:/var/lib/mysql # networks: # - membership_private # healthcheck: # test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] # start_period: 10s # interval: 5s # timeout: 5s # retries: 10 backend: build: context: ./backend dockerfile: Dockerfile restart: unless-stopped env_file: - .env environment: # Database configuration - DATABASE_HOST=${DATABASE_HOST} - DATABASE_PORT=${DATABASE_PORT} - DATABASE_USER=${DATABASE_USER} - DATABASE_PASSWORD=${DATABASE_PASSWORD} - DATABASE_NAME=${DATABASE_NAME} # Application configuration - SECRET_KEY=${SECRET_KEY} - ALGORITHM=${ALGORITHM} - ACCESS_TOKEN_EXPIRE_MINUTES=${ACCESS_TOKEN_EXPIRE_MINUTES} extra_hosts: - "host.docker.internal:host-gateway" ports: - "6000:8000" # Only expose backend API to host volumes: - ./backend/app:/app/app - ./backend/alembic:/app/alembic - ./backend/alembic.ini:/app/alembic.ini - uploads_data:/app/uploads command: > sh -c "alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload" # depends_on: # mysql: # condition: service_healthy # frontend: # build: # context: ./frontend # dockerfile: Dockerfile # target: development # restart: unless-stopped # environment: # - VITE_HOST_CHECK=false # - VITE_ALLOWED_HOSTS=${VITE_ALLOWED_HOSTS} # ports: # - "8050:3000" # Expose frontend to host # volumes: # - ./frontend/src:/app/src # - ./frontend/public:/app/public # - ./frontend/vite.config.ts:/app/vite.config.ts # depends_on: # - backend frontend-prod: build: context: ./frontend dockerfile: Dockerfile target: production restart: unless-stopped ports: - "8050:80" # Nginx default port depends_on: - backend volumes: # mysql_data: uploads_data: