1+ version : ' 3.8'
2+
3+ # 仅部署基础设施组件的Docker Compose配置
4+ # 业务服务将通过二进制方式部署
5+
6+ networks :
7+ infra-network :
8+ driver : bridge
9+ ipam :
10+ config :
11+ - subnet : 172.21.0.0/16
12+
13+ volumes :
14+ consul-data :
15+ postgres-data :
16+ redis-data :
17+ prometheus-data :
18+ grafana-data :
19+ elasticsearch-data :
20+
21+ services :
22+ # Consul - 服务发现
23+ consul :
24+ image : docker.m.daocloud.io/hashicorp/consul:1.16
25+ container_name : mock-s3-consul
26+ hostname : consul
27+ networks :
28+ infra-network :
29+ ipv4_address : 172.21.0.10
30+ ports :
31+ - " 8500:8500"
32+ - " 8600:8600/udp"
33+ volumes :
34+ - consul-data:/consul/data
35+ - ./consul/consul-config.json:/consul/config/consul-config.json:ro
36+ command : consul agent -server -bootstrap -ui -node=consul-server -bind=172.21.0.10 -client=0.0.0.0 -data-dir=/consul/data
37+ restart : unless-stopped
38+
39+ # PostgreSQL - 数据存储
40+ postgres :
41+ image : docker.m.daocloud.io/postgres:15-alpine
42+ container_name : mock-s3-postgres
43+ hostname : postgres
44+ networks :
45+ infra-network :
46+ ipv4_address : 172.21.0.11
47+ ports :
48+ - " 5532:5432" # 改为5532避免与系统PostgreSQL冲突
49+ environment :
50+ POSTGRES_USER : postgres
51+ POSTGRES_PASSWORD : ${POSTGRES_PASSWORD:-postgres123}
52+ POSTGRES_DB : mock_s3
53+ volumes :
54+ - postgres-data:/var/lib/postgresql/data
55+ - ./postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
56+ restart : unless-stopped
57+
58+ # Redis - 缓存和队列
59+ redis :
60+ image : docker.m.daocloud.io/redis:7-alpine
61+ container_name : mock-s3-redis
62+ hostname : redis
63+ networks :
64+ infra-network :
65+ ipv4_address : 172.21.0.12
66+ ports :
67+ - " 16379:6379" # 改为16379避免与系统Redis冲突
68+ volumes :
69+ - redis-data:/data
70+ - ./redis/redis.conf:/usr/local/etc/redis/redis.conf:ro
71+ command : redis-server /usr/local/etc/redis/redis.conf
72+ restart : unless-stopped
73+
74+ # Prometheus - 指标收集
75+ prometheus :
76+ image : docker.m.daocloud.io/prom/prometheus:latest
77+ container_name : mock-s3-prometheus
78+ hostname : prometheus
79+ networks :
80+ infra-network :
81+ ipv4_address : 172.21.0.20
82+ ports :
83+ - " 9090:9090"
84+ volumes :
85+ - prometheus-data:/prometheus
86+ - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
87+ command :
88+ - ' --config.file=/etc/prometheus/prometheus.yml'
89+ - ' --storage.tsdb.path=/prometheus'
90+ - ' --web.enable-lifecycle'
91+ restart : unless-stopped
92+
93+ # Grafana - 可视化
94+ grafana :
95+ image : docker.m.daocloud.io/grafana/grafana:latest
96+ container_name : mock-s3-grafana
97+ hostname : grafana
98+ networks :
99+ infra-network :
100+ ipv4_address : 172.21.0.21
101+ ports :
102+ - " 3000:3000"
103+ environment :
104+ GF_SECURITY_ADMIN_USER : ${GRAFANA_USER:-admin}
105+ GF_SECURITY_ADMIN_PASSWORD : ${GRAFANA_PASSWORD:-admin123}
106+ GF_INSTALL_PLUGINS : grafana-piechart-panel
107+ volumes :
108+ - grafana-data:/var/lib/grafana
109+ - ./grafana/provisioning:/etc/grafana/provisioning:ro
110+ restart : unless-stopped
111+
112+ # Elasticsearch - 日志存储
113+ elasticsearch :
114+ image : docker.m.daocloud.io/elastic/elasticsearch:8.10.2
115+ container_name : mock-s3-elasticsearch
116+ hostname : elasticsearch
117+ networks :
118+ infra-network :
119+ ipv4_address : 172.21.0.22
120+ ports :
121+ - " 9200:9200"
122+ - " 9300:9300"
123+ environment :
124+ - discovery.type=single-node
125+ - xpack.security.enabled=false
126+ - ES_JAVA_OPTS=-Xms512m -Xmx512m
127+ volumes :
128+ - elasticsearch-data:/usr/share/elasticsearch/data
129+ restart : unless-stopped
130+
131+ # Kibana - 日志查询
132+ kibana :
133+ image : docker.m.daocloud.io/elastic/kibana:8.10.2
134+ container_name : mock-s3-kibana
135+ hostname : kibana
136+ networks :
137+ infra-network :
138+ ipv4_address : 172.21.0.23
139+ ports :
140+ - " 5601:5601"
141+ environment :
142+ ELASTICSEARCH_HOSTS : ' ["http://elasticsearch:9200"]'
143+ depends_on :
144+ - elasticsearch
145+ restart : unless-stopped
146+
147+ # OpenTelemetry Collector
148+ otel-collector :
149+ image : docker.m.daocloud.io/otel/opentelemetry-collector-contrib:latest
150+ container_name : mock-s3-otel
151+ hostname : otel-collector
152+ networks :
153+ infra-network :
154+ ipv4_address : 172.21.0.24
155+ ports :
156+ - " 4317:4317" # OTLP gRPC
157+ - " 4318:4318" # OTLP HTTP
158+ - " 18888:8889" # Prometheus metrics - 使用8889内部端口避免冲突
159+ volumes :
160+ - ./otel/otel-config.yaml:/etc/otel-collector-config.yaml:ro
161+ command : ["--config=/etc/otel-collector-config.yaml"]
162+ restart : unless-stopped
0 commit comments