version: '3.8' services: # Main Sync Service sync-service: build: context: . dockerfile: Dockerfile container_name: eonacat-sync ports: - "5000:80" environment: - DOTNET_ENVIRONMENT=Production - SYNC_DATA_PATH=/data/sync - SYNC_BACKUP_PATH=/data/backups - SYNC_LOG_PATH=/data/logs - ConnectionStrings__DefaultConnection=Server=sqlserver;Database=EonaCat;User Id=sa;Password=${SA_PASSWORD}; volumes: - sync-data:/data/sync - sync-backups:/data/backups - sync-logs:/data/logs depends_on: - sqlserver networks: - sync-network restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost/health"] interval: 30s timeout: 3s retries: 3 start_period: 40s # SQL Server Database sqlserver: image: mcr.microsoft.com/mssql/server:2019-latest container_name: eonacat-sqlserver environment: - SA_PASSWORD=${SA_PASSWORD:-SecurePassword123!} - ACCEPT_EULA=Y - MSSQL_PID=Express ports: - "1433:1433" volumes: - sqlserver-data:/var/opt/mssql networks: - sync-network restart: unless-stopped healthcheck: test: ["/opt/mssql-tools/bin/sqlcmd", "-S", "localhost", "-U", "sa", "-P", "${SA_PASSWORD}", "-Q", "select 1"] interval: 15s timeout: 3s retries: 5 start_period: 10s # Redis Cache (Optional) redis: image: redis:7-alpine container_name: eonacat-redis ports: - "6379:6379" volumes: - redis-data:/data networks: - sync-network restart: unless-stopped command: redis-server --appendonly yes healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 3 # Monitoring - Prometheus (Optional) prometheus: image: prom/prometheus:latest container_name: eonacat-prometheus ports: - "9090:9090" volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus-data:/prometheus networks: - sync-network restart: unless-stopped command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' # Monitoring - Grafana (Optional) grafana: image: grafana/grafana:latest container_name: eonacat-grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin} - GF_INSTALL_PLUGINS=grafana-piechart-panel volumes: - grafana-data:/var/lib/grafana depends_on: - prometheus networks: - sync-network restart: unless-stopped # Logging - Elasticsearch (Optional) elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.0.0 container_name: eonacat-elasticsearch environment: - discovery.type=single-node - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ports: - "9200:9200" volumes: - elasticsearch-data:/usr/share/elasticsearch/data networks: - sync-network restart: unless-stopped # Logging - Kibana (Optional) kibana: image: docker.elastic.co/kibana/kibana:8.0.0 container_name: eonacat-kibana ports: - "5601:5601" environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 depends_on: - elasticsearch networks: - sync-network restart: unless-stopped networks: sync-network: driver: bridge volumes: sync-data: sync-backups: sync-logs: sqlserver-data: redis-data: prometheus-data: grafana-data: elasticsearch-data: