161 lines
4.1 KiB
YAML
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
|