duckil_plm/docker-compose.full.yml
2024-11-02 00:28:57 +09:00

161 lines
4.1 KiB
YAML

# 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