version: '3.8' services: # ============================================================================ # FTP Server (Traditional FTP) # ============================================================================ ftp-server: build: . container_name: ase-ftp-server ports: - "2121:2121" # FTP control port - "40000-40449:40000-40449" # FTP passive ports range environment: # Server Mode FTP_MODE: "ftp" # Mode: ftp or sftp # FTP Configuration FTP_PASSIVE_PORTS: "40000" # Prima porta del range passivo FTP_EXTERNAL_IP: "192.168.1.100" # IP esterno/VIP da pubblicizzare ai client # Database Configuration DB_HOST: "mysql-server" DB_PORT: "3306" DB_USER: "ase_user" DB_PASSWORD: "your_secure_password" DB_NAME: "ase_lar" # File Processing Behavior # DELETE_AFTER_PROCESSING: "true" # Cancella file dopo elaborazione corretta (default: false = mantiene i file) # Logging (opzionale) LOG_LEVEL: "INFO" volumes: - ./logs/ftp:/app/logs - ./data:/app/data depends_on: - mysql-server restart: unless-stopped networks: - ase-network # ============================================================================ # SFTP Server (SSH File Transfer Protocol) # ============================================================================ sftp-server: build: . container_name: ase-sftp-server ports: - "2222:22" # SFTP port (SSH) environment: # Server Mode FTP_MODE: "sftp" # Mode: ftp or sftp # Database Configuration DB_HOST: "mysql-server" DB_PORT: "3306" DB_USER: "ase_user" DB_PASSWORD: "your_secure_password" DB_NAME: "ase_lar" # File Processing Behavior # DELETE_AFTER_PROCESSING: "true" # Cancella file dopo elaborazione corretta (default: false = mantiene i file) # Logging (opzionale) LOG_LEVEL: "INFO" volumes: - ./logs/sftp:/app/logs - ./data:/app/data - ./ssh_host_key:/app/ssh_host_key:ro # SSH host key (generate with: ssh-keygen -t rsa -f ssh_host_key) depends_on: - mysql-server restart: unless-stopped networks: - ase-network # ============================================================================ # Esempio: Setup HA con più istanze FTP (stesso VIP) # ============================================================================ ftp-server-2: build: . container_name: ase-ftp-server-2 ports: - "2122:2121" # Diversa porta di controllo per seconda istanza - "41000-41449:40000-40449" # Diverso range passivo sull'host environment: FTP_MODE: "ftp" FTP_PASSIVE_PORTS: "40000" # Stessa config interna FTP_EXTERNAL_IP: "192.168.1.100" # Stesso VIP condiviso DB_HOST: "mysql-server" DB_PORT: "3306" DB_USER: "ase_user" DB_PASSWORD: "your_secure_password" DB_NAME: "ase_lar" # DELETE_AFTER_PROCESSING: "true" # Cancella file dopo elaborazione corretta (default: false = mantiene i file) LOG_LEVEL: "INFO" volumes: - ./logs/ftp2:/app/logs - ./data:/app/data depends_on: - mysql-server restart: unless-stopped networks: - ase-network mysql-server: image: mysql:8.0 container_name: ase-mysql environment: MYSQL_ROOT_PASSWORD: "root_password" MYSQL_DATABASE: "ase_lar" MYSQL_USER: "ase_user" MYSQL_PASSWORD: "your_secure_password" ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql - ./dbddl:/docker-entrypoint-initdb.d restart: unless-stopped networks: - ase-network networks: ase-network: driver: bridge volumes: mysql-data: