version: '3.8' services: mariadb: image: mariadb:latest container_name: evoting_db environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-rootpass123} MYSQL_DATABASE: ${DB_NAME:-evoting_db} MYSQL_USER: ${DB_USER:-evoting_user} MYSQL_PASSWORD: ${DB_PASSWORD:-evoting_pass123} ports: - "${DB_PORT:-3306}:3306" volumes: - evoting_data:/var/lib/mysql - ./docker/init.sql:/docker-entrypoint-initdb.d/init.sql networks: - evoting_network healthcheck: test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "--silent"] timeout: 20s retries: 10 start_period: 30s backend: build: context: . dockerfile: docker/Dockerfile.backend container_name: evoting_backend environment: DB_HOST: mariadb DB_PORT: 3306 DB_NAME: ${DB_NAME:-evoting_db} DB_USER: ${DB_USER:-evoting_user} DB_PASSWORD: ${DB_PASSWORD:-evoting_pass123} SECRET_KEY: ${SECRET_KEY:-your-secret-key-change-in-production} DEBUG: ${DEBUG:-false} ports: - "${BACKEND_PORT:-8000}:8000" depends_on: mariadb: condition: service_healthy volumes: - ./src:/app/src networks: - evoting_network command: uvicorn src.backend.main:app --host 0.0.0.0 --port 8000 --reload frontend: build: context: . dockerfile: docker/Dockerfile.frontend container_name: evoting_frontend ports: - "${FRONTEND_PORT:-3000}:3000" volumes: - ./src/frontend:/app networks: - evoting_network environment: - VITE_API_URL=http://localhost:8000 volumes: evoting_data: networks: evoting_network: driver: bridge