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 # container_name: membership_frontend_prod # restart: unless-stopped # ports: # - "8050:80" # Nginx default port # depends_on: # - backend # networks: # - membership_private volumes: # mysql_data: uploads_data: