# docker-compose.full.yml # 전체 스택 설정 (모든 서비스 포함) version: "3.8" services: # 기존 서비스들은 base 설정을 상속 # 추가 서비스들 # timescaledb: # image: timescale/timescaledb:latest-pg15 # restart: unless-stopped # expose: # - "5432" # environment: # POSTGRES_DB: ${TIMESCALEDB_DB} # POSTGRES_USER: ${TIMESCALEDB_USER} # POSTGRES_PASSWORD: ${TIMESCALEDB_PASSWORD} # volumes: # - timescaledb_data:/var/lib/postgresql/data # healthcheck: # test: # ["CMD-SHELL", "pg_isready -U ${TIMESCALEDB_USER} -d ${TIMESCALEDB_DB}"] # networks: # - internal # mosquitto: # image: eclipse-mosquitto:latest # restart: unless-stopped # expose: # - "1883" # - "9001" # labels: # - "traefik.enable=true" # - "traefik.http.routers.mqtt-ws.rule=Host(`${MQTT_SUBDOMAIN}`)" # - "traefik.http.routers.mqtt-ws.entrypoints=websecure" # - "traefik.http.routers.mqtt-ws.tls=true" # volumes: # - ./config/mosquitto:/mosquitto/config # - mosquitto_data:/mosquitto/data # security_opt: # - no-new-privileges:true # networks: # - ${TRAEFIK_NETWORK} # - internal # node-red: # image: nodered/node-red:latest # restart: unless-stopped # expose: # - "1880" # labels: # - "traefik.enable=true" # - "traefik.http.routers.node-red.rule=Host(`${NODERED_SUBDOMAIN}`)" # - "traefik.http.routers.node-red.entrypoints=websecure" # - "traefik.http.routers.node-red.tls=true" # volumes: # - node_red_data:/data # networks: # - ${TRAEFIK_NETWORK} # - internal # 백업 서비스 추가 backup-service: image: backup-image volumes: - postgres_data:/backup/postgres:ro - timescaledb_data:/backup/timescale:ro environment: - BACKUP_SCHEDULE=0 0 * * * networks: - internal # Monitoring Stack prometheus: image: prom/prometheus:latest restart: unless-stopped expose: - "9090" labels: - "traefik.enable=true" - "traefik.http.routers.prometheus.rule=Host(`${PROMETHEUS_SUBDOMAIN}`)" - "traefik.http.routers.prometheus.entrypoints=websecure" - "traefik.http.routers.prometheus.tls=true" - "traefik.http.services.prometheus.loadbalancer.server.port=9090" volumes: - ./config/prometheus:/etc/prometheus - prometheus_data:/prometheus depends_on: - fems-admin - fems-app - fems-api networks: - ${TRAEFIK_NETWORK} - internal grafana: image: grafana/grafana:latest restart: unless-stopped expose: - "3000" labels: - "traefik.enable=true" - "traefik.http.routers.grafana.rule=Host(`${GRAFANA_SUBDOMAIN}`)" - "traefik.http.routers.grafana.entrypoints=websecure" - "traefik.http.routers.grafana.tls=true" - "traefik.http.services.grafana.loadbalancer.server.port=3000" volumes: - ./config/grafana:/etc/grafana/provisioning - grafana_data:/var/lib/grafana networks: - ${TRAEFIK_NETWORK} - internal # Logging Stack elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.8.0 restart: unless-stopped environment: - discovery.type=single-node - ES_JAVA_OPTS=-Xms512m -Xmx512m ports: - "${ELASTICSEARCH_PORT:-9200}:9200" volumes: - elasticsearch_data:/usr/share/elasticsearch/data networks: - internal # Kibana kibana: image: docker.elastic.co/kibana/kibana:8.8.0 restart: unless-stopped expose: - "5601" labels: - "traefik.enable=true" - "traefik.http.routers.kibana.rule=Host(`${KIBANA_SUBDOMAIN}`)" - "traefik.http.routers.kibana.entrypoints=websecure" - "traefik.http.routers.kibana.tls=true" - "traefik.http.services.kibana.loadbalancer.server.port=5601" environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 networks: - ${TRAEFIK_NETWORK} - internal depends_on: - elasticsearch volumes: timescaledb_data: mosquitto_data: node_red_data: prometheus_data: grafana_data: elasticsearch_data: networks: ${TRAEFIK_NETWORK}: external: true internal: driver: bridge