🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
302 lines
7.8 KiB
YAML
302 lines
7.8 KiB
YAML
version: '3.8'
|
|
|
|
services:
|
|
# ========== 数据库服务 ==========
|
|
mysql:
|
|
image: mysql:8.0
|
|
container_name: kangyang-mysql
|
|
restart: always
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: root123456
|
|
MYSQL_DATABASE: kangyang_dev
|
|
MYSQL_USER: kangyang
|
|
MYSQL_PASSWORD: kangyang123
|
|
ports:
|
|
- "3306:3306"
|
|
volumes:
|
|
- mysql-data:/var/lib/mysql
|
|
- ./scripts/sql/init.sql:/docker-entrypoint-initdb.d/init.sql
|
|
networks:
|
|
- kangyang-network
|
|
healthcheck:
|
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
# ========== 缓存服务 ==========
|
|
redis:
|
|
image: redis:7.0-alpine
|
|
container_name: kangyang-redis
|
|
restart: always
|
|
ports:
|
|
- "6379:6379"
|
|
volumes:
|
|
- redis-data:/data
|
|
networks:
|
|
- kangyang-network
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
# ========== 消息队列 ==========
|
|
zookeeper:
|
|
image: confluentinc/cp-zookeeper:7.4.0
|
|
container_name: kangyang-zookeeper
|
|
environment:
|
|
ZOOKEEPER_CLIENT_PORT: 2181
|
|
ZOOKEEPER_TICK_TIME: 2000
|
|
networks:
|
|
- kangyang-network
|
|
|
|
kafka:
|
|
image: confluentinc/cp-kafka:7.4.0
|
|
container_name: kangyang-kafka
|
|
depends_on:
|
|
- zookeeper
|
|
ports:
|
|
- "9092:9092"
|
|
environment:
|
|
KAFKA_BROKER_ID: 1
|
|
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
|
|
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
|
|
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
|
|
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
|
|
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
|
|
networks:
|
|
- kangyang-network
|
|
|
|
# ========== 时序数据库 ==========
|
|
influxdb:
|
|
image: influxdb:2.7
|
|
container_name: kangyang-influxdb
|
|
ports:
|
|
- "8086:8086"
|
|
environment:
|
|
DOCKER_INFLUXDB_INIT_MODE: setup
|
|
DOCKER_INFLUXDB_INIT_USERNAME: admin
|
|
DOCKER_INFLUXDB_INIT_PASSWORD: admin123456
|
|
DOCKER_INFLUXDB_INIT_ORG: kangyang
|
|
DOCKER_INFLUXDB_INIT_BUCKET: health-metrics
|
|
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: kangyang-super-secret-auth-token
|
|
volumes:
|
|
- influxdb-data:/var/lib/influxdb2
|
|
networks:
|
|
- kangyang-network
|
|
|
|
# ========== 文档数据库 ==========
|
|
mongodb:
|
|
image: mongo:6.0
|
|
container_name: kangyang-mongodb
|
|
ports:
|
|
- "27017:27017"
|
|
environment:
|
|
MONGO_INITDB_ROOT_USERNAME: admin
|
|
MONGO_INITDB_ROOT_PASSWORD: admin123
|
|
MONGO_INITDB_DATABASE: kangyang
|
|
volumes:
|
|
- mongodb-data:/data/db
|
|
networks:
|
|
- kangyang-network
|
|
|
|
# ========== 搜索引擎 ==========
|
|
elasticsearch:
|
|
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
|
|
container_name: kangyang-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:
|
|
- kangyang-network
|
|
|
|
kibana:
|
|
image: docker.elastic.co/kibana/kibana:8.11.0
|
|
container_name: kangyang-kibana
|
|
ports:
|
|
- "5601:5601"
|
|
environment:
|
|
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
|
|
depends_on:
|
|
- elasticsearch
|
|
networks:
|
|
- kangyang-network
|
|
|
|
# ========== 监控服务 ==========
|
|
prometheus:
|
|
image: prom/prometheus:v2.47.0
|
|
container_name: kangyang-prometheus
|
|
ports:
|
|
- "9090:9090"
|
|
volumes:
|
|
- ./monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
|
|
- ./monitoring/prometheus/rules:/etc/prometheus/rules
|
|
- prometheus-data:/prometheus
|
|
command:
|
|
- '--config.file=/etc/prometheus/prometheus.yml'
|
|
- '--storage.tsdb.path=/prometheus'
|
|
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
|
|
- '--web.console.templates=/usr/share/prometheus/consoles'
|
|
networks:
|
|
- kangyang-network
|
|
|
|
grafana:
|
|
image: grafana/grafana:10.1.0
|
|
container_name: kangyang-grafana
|
|
ports:
|
|
- "3001:3000"
|
|
environment:
|
|
- GF_SECURITY_ADMIN_USER=admin
|
|
- GF_SECURITY_ADMIN_PASSWORD=admin123
|
|
- GF_INSTALL_PLUGINS=redis-app,redis-datasource
|
|
volumes:
|
|
- ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards
|
|
- ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources
|
|
- grafana-data:/var/lib/grafana
|
|
depends_on:
|
|
- prometheus
|
|
networks:
|
|
- kangyang-network
|
|
|
|
# ========== 日志服务 ==========
|
|
fluentd:
|
|
build: ./infrastructure/docker/fluentd
|
|
container_name: kangyang-fluentd
|
|
volumes:
|
|
- ./logging/fluentd/fluent.conf:/fluentd/etc/fluent.conf
|
|
- /var/lib/docker/containers:/var/lib/docker/containers:ro
|
|
ports:
|
|
- "24224:24224"
|
|
- "24224:24224/udp"
|
|
networks:
|
|
- kangyang-network
|
|
|
|
# ========== 微服务 ==========
|
|
health-monitoring:
|
|
build:
|
|
context: ./services/health-monitoring
|
|
dockerfile: Dockerfile
|
|
container_name: kangyang-health-monitoring
|
|
ports:
|
|
- "8001:8000"
|
|
environment:
|
|
- DATABASE_URL=mysql://kangyang:kangyang123@mysql:3306/kangyang_dev
|
|
- REDIS_URL=redis://redis:6379
|
|
- KAFKA_BROKER=kafka:9092
|
|
- INFLUXDB_URL=http://influxdb:8086
|
|
- INFLUXDB_TOKEN=kangyang-super-secret-auth-token
|
|
- LOG_LEVEL=DEBUG
|
|
depends_on:
|
|
- mysql
|
|
- redis
|
|
- kafka
|
|
- influxdb
|
|
networks:
|
|
- kangyang-network
|
|
volumes:
|
|
- ./services/health-monitoring:/app
|
|
restart: unless-stopped
|
|
|
|
companion-service:
|
|
build:
|
|
context: ./services/companion-service
|
|
dockerfile: Dockerfile
|
|
container_name: kangyang-companion-service
|
|
ports:
|
|
- "8002:8000"
|
|
environment:
|
|
- DATABASE_URL=mysql://kangyang:kangyang123@mysql:3306/kangyang_dev
|
|
- REDIS_URL=redis://redis:6379
|
|
- KAFKA_BROKER=kafka:9092
|
|
- MONGODB_URL=mongodb://admin:admin123@mongodb:27017
|
|
- LOG_LEVEL=DEBUG
|
|
depends_on:
|
|
- mysql
|
|
- redis
|
|
- kafka
|
|
- mongodb
|
|
networks:
|
|
- kangyang-network
|
|
volumes:
|
|
- ./services/companion-service:/app
|
|
restart: unless-stopped
|
|
|
|
rehabilitation-service:
|
|
build:
|
|
context: ./services/rehabilitation-service
|
|
dockerfile: Dockerfile
|
|
container_name: kangyang-rehabilitation-service
|
|
ports:
|
|
- "8003:8000"
|
|
environment:
|
|
- DATABASE_URL=mysql://kangyang:kangyang123@mysql:3306/kangyang_dev
|
|
- REDIS_URL=redis://redis:6379
|
|
- KAFKA_BROKER=kafka:9092
|
|
- LOG_LEVEL=DEBUG
|
|
depends_on:
|
|
- mysql
|
|
- redis
|
|
- kafka
|
|
networks:
|
|
- kangyang-network
|
|
volumes:
|
|
- ./services/rehabilitation-service:/app
|
|
restart: unless-stopped
|
|
|
|
# ========== API网关 ==========
|
|
api-gateway:
|
|
image: kong:3.4
|
|
container_name: kangyang-api-gateway
|
|
ports:
|
|
- "8000:8000"
|
|
- "8001:8001"
|
|
- "8443:8443"
|
|
- "8444:8444"
|
|
environment:
|
|
KONG_DATABASE: "off"
|
|
KONG_DECLARATIVE_CONFIG: /kong/declarative/kong.yml
|
|
KONG_PROXY_ACCESS_LOG: /dev/stdout
|
|
KONG_ADMIN_ACCESS_LOG: /dev/stdout
|
|
KONG_PROXY_ERROR_LOG: /dev/stderr
|
|
KONG_ADMIN_ERROR_LOG: /dev/stderr
|
|
KONG_ADMIN_LISTEN: 0.0.0.0:8001, 0.0.0.0:8444 ssl
|
|
volumes:
|
|
- ./infrastructure/kong/kong.yml:/kong/declarative/kong.yml:ro
|
|
networks:
|
|
- kangyang-network
|
|
|
|
# ========== 前端服务 ==========
|
|
web-admin:
|
|
build:
|
|
context: ./frontend/web-admin
|
|
dockerfile: Dockerfile.dev
|
|
container_name: kangyang-web-admin
|
|
ports:
|
|
- "3000:3000"
|
|
environment:
|
|
- REACT_APP_API_URL=http://localhost:8000
|
|
- NODE_ENV=development
|
|
volumes:
|
|
- ./frontend/web-admin:/app
|
|
- /app/node_modules
|
|
networks:
|
|
- kangyang-network
|
|
|
|
networks:
|
|
kangyang-network:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
mysql-data:
|
|
redis-data:
|
|
mongodb-data:
|
|
influxdb-data:
|
|
elasticsearch-data:
|
|
prometheus-data:
|
|
grafana-data: |