services: mysql: image: mysql:8.0 container_name: mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-Ase@2025} MYSQL_DATABASE: ${MYSQL_DATABASE:-ase_lar} MYSQL_USER: ${MYSQL_USER:-ase_lar} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-ase_lar} TZ: Europe/Rome volumes: - mysql_data:/var/lib/mysql - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro networks: - app-network ports: - "3306:3306" healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD:-Ase@2025}"] interval: 10s timeout: 5s retries: 3 labels: logging: "promtail" logging_jobname: "mysql" orchestrator-1-load: build: . container_name: orchestrator-1-load restart: unless-stopped command: ["python", "-m", "src.load_orchestrator"] environment: DB_HOST: ${VIP:-192.168.1.210} ORCHESTRATOR_ID: 1 TZ: Europe/Rome volumes: - app-logs:/app/logs - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro networks: - app-network labels: logging: "promtail" orchestrator-2-elab: build: . container_name: orchestrator-2-elab restart: unless-stopped command: ["python", "-m", "src.elab_orchestrator"] environment: DB_HOST: ${VIP:-192.168.1.210} ORCHESTRATOR_ID: 2 TZ: Europe/Rome volumes: - app-logs:/app/logs - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro networks: - app-network labels: logging: "promtail" orchestrator-3-send: build: . container_name: orchestrator-3-send restart: unless-stopped command: ["python", "-m", "src.send_orchestrator"] environment: DB_HOST: ${VIP:-192.168.1.210} ORCHESTRATOR_ID: 3 TZ: Europe/Rome volumes: - app-logs:/app/logs - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro networks: - app-network labels: logging: "promtail" ftp-server-1: build: . container_name: ftp-server-1 restart: unless-stopped command: ["python", "-m", "src.ftp_csv_receiver"] environment: DB_HOST: ${VIP:-192.168.1.210} FTP_INSTANCE_ID: 1 TZ: Europe/Rome FTP_PASSIVE_PORT: "40000" FTP_EXTERNAL_IP: ${VIP:-192.168.1.210} volumes: - app-logs:/app/logs - ./aseftp:/app/aseftp - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro networks: - app-network ports: - "40000-40499:40000-40499" expose: - "21" labels: logging: "promtail" haproxy: image: haproxy:2.8-alpine container_name: haproxy restart: unless-stopped volumes: - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro networks: - app-network ports: - "21:21" - "8404:8404" labels: logging: "promtail" keepalived: image: alpine:latest container_name: keepalived restart: unless-stopped cap_add: - NET_ADMIN - NET_BROADCAST - NET_RAW network_mode: host volumes: - ./keepalived-master.conf:/etc/keepalived/keepalived.conf:ro command: sh -c "apk add --no-cache keepalived && keepalived -n -l -f /etc/keepalived/keepalived.conf" promtail: image: grafana/promtail:2.9.3 container_name: promtail restart: unless-stopped environment: TZ: Europe/Rome volumes: - ./promtail-config.yml:/etc/promtail/config.yml:ro - /var/run/docker.sock:/var/run/docker.sock:ro - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro networks: - app-network networks: app-network: volumes: mysql_data: app-logs: