services: mysql: image: mysql:8.0 container_name: tmflow-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:-root_password_change_me} MYSQL_DATABASE: ${DB_NAME:-tiemeasureflow} MYSQL_USER: ${DB_USER:-tmflow} MYSQL_PASSWORD: ${DB_PASSWORD:-change_me_in_production} volumes: - mysql_data:/var/lib/mysql command: > --authentication-policy=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 networks: - tmflow-net server: build: context: . dockerfile: Dockerfile container_name: tmflow-server restart: unless-stopped env_file: - .env environment: DB_HOST: mysql UPLOAD_DIR: uploads volumes: - upload_data:/app/uploads depends_on: mysql: condition: service_healthy networks: - tmflow-net client: build: context: . dockerfile: Dockerfile.frontend container_name: tmflow-client restart: unless-stopped env_file: - .env environment: API_SERVER_URL: http://server:8000 depends_on: - server networks: - tmflow-net nginx: image: nginx:alpine container_name: tmflow-nginx restart: unless-stopped ports: - "${NGINX_PORT:-80}:80" - "${NGINX_SSL_PORT:-443}:443" volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro # Uncomment for SSL: # - ./certbot/conf:/etc/letsencrypt:ro # - ./certbot/www:/var/www/certbot:ro depends_on: - server - client networks: - tmflow-net volumes: mysql_data: driver: local upload_data: driver: local networks: tmflow-net: driver: bridge