Skip to content

Commit 112638e

Browse files
authored
Merge pull request #83 from JaD1ng/develop
docs(mock/s3): 添加部署文档和脚本
2 parents 02240de + 6487075 commit 112638e

File tree

13 files changed

+1122
-37
lines changed

13 files changed

+1122
-37
lines changed

mock/s3/DEPLOYMENT.md

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
MockS3 部署全流程总结
2+
3+
1. 文件传输到服务器
4+
5+
# 在服务器上执行
6+
cd /tmp/dingnanjia
7+
8+
2. 解压部署包
9+
10+
# 解压
11+
tar -xzf mock-s3-*.tar.gz
12+
13+
# 验证内容
14+
ls -la
15+
# 应该看到: bin/ config/ scripts/ 目录
16+
17+
3. 执行部署
18+
19+
chmod +x deploy.sh
20+
./deploy.sh
21+
22+
这个脚本会:
23+
- 创建目录结构 /home/qboxserver/zeroops_*
24+
- 部署二进制文件到 _package 目录
25+
- 部署配置文件到 _package/config 目录
26+
- 创建启动脚本 manual-start.sh 和 manual-stop.sh
27+
28+
4. 部署基础设施(Docker)
29+
30+
# 启动 PostgreSQL、Redis、Consul 等
31+
docker-compose -f docker-compose.infra.yml up -d
32+
33+
# 验证
34+
docker-compose -f docker-compose.infra.yml ps
35+
36+
5. 启动业务服务
37+
38+
方式A:手动启动(推荐,无需sudo)
39+
40+
./manual-start.sh
41+
42+
方式B:使用 Supervisor(需要sudo)
43+
44+
# 安装配置
45+
sudo cp mock-s3-simple.conf /etc/supervisord/zeroops-mock-s3.conf
46+
47+
# 启动服务
48+
sudo supervisorctl reread
49+
sudo supervisorctl update
50+
sudo supervisorctl start zeroops_*
51+
52+
6. 验证服务
53+
54+
# 查看进程
55+
ps aux | grep zeroops_
56+
57+
# 健康检查
58+
curl http://localhost:8181/health # metadata-service
59+
curl http://localhost:8191/health # storage-service
60+
curl http://localhost:8201/health # queue-service
61+
curl http://localhost:8211/health # third-party-service
62+
curl http://localhost:8221/health # mock-error-service
63+
64+
# 查看日志
65+
tail -f /home/qboxserver/zeroops_metadata_1/logs/service.log
66+
67+
# Supervisor 状态(如使用)
68+
supervisorctl status | grep zeroops_
69+
70+
7. 服务管理
71+
72+
# 停止服务
73+
./manual-stop.sh
74+
#
75+
supervisorctl stop zeroops_*
76+
77+
# 重启服务
78+
./manual-stop.sh && ./manual-start.sh
79+
#
80+
supervisorctl restart zeroops_*
81+
82+
# 查看特定服务日志
83+
supervisorctl tail -f zeroops_metadata_1
84+
85+
目录结构
86+
87+
/home/qboxserver/
88+
├── zeroops_metadata_1/
89+
│ ├── _package/
90+
│ │ ├── metadata-service # 二进制文件
91+
│ │ ├── config/
92+
│ │ │ └── metadata-config.yaml
93+
│ │ └── start.sh
94+
│ ├── logs/
95+
│ └── data/
96+
├── zeroops_storage_1/
97+
│ └── ... (类似结构)
98+
└── ... (其他服务)
99+
100+
端口分配
101+
102+
| 服务 | 实例 | 端口 |
103+
|-------------|-----|-----------|
104+
| metadata | 1-3 | 8181-8183 |
105+
| storage | 1-2 | 8191-8192 |
106+
| queue | 1-2 | 8201-8202 |
107+
| third_party | 1 | 8211 |
108+
| mock_error | 1 | 8221 |
109+
110+
故障排查
111+
112+
# 如果服务无法启动,检查配置文件
113+
cat /home/qboxserver/zeroops_queue_1/_package/config/queue-config.yaml
114+
115+
# 检查端口占用
116+
netstat -tlnp | grep 81
117+
118+
# 查看错误日志
119+
tail -100 /home/qboxserver/zeroops_*/logs/*.log
120+
121+
# 手动测试启动
122+
cd /home/qboxserver/zeroops_metadata_1/_package
123+
./metadata-service --port=8181
Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,10 @@
11
{
22
"datacenter": "mock-s3-dc",
3-
"node_name": "consul-server",
3+
"data_dir": "/consul/data",
4+
"log_level": "INFO",
45
"server": true,
56
"bootstrap_expect": 1,
6-
"bind_addr": "172.20.0.10",
7-
"client_addr": "0.0.0.0",
8-
"retry_join": [
9-
"consul"
10-
],
117
"ui_config": {
128
"enabled": true
13-
},
14-
"connect": {
15-
"enabled": true
16-
},
17-
"ports": {
18-
"grpc": 8502,
19-
"grpc_tls": 8503
20-
},
21-
"acl": {
22-
"enabled": false,
23-
"default_policy": "allow"
24-
},
25-
"log_level": "INFO",
26-
"enable_syslog": false,
27-
"data_dir": "/consul/data",
28-
"encrypt_verify_incoming": false,
29-
"encrypt_verify_outgoing": false,
30-
"verify_incoming": false,
31-
"verify_outgoing": false,
32-
"ca_file": "",
33-
"cert_file": "",
34-
"key_file": "",
35-
"verify_server_hostname": false
9+
}
3610
}
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
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
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# OpenTelemetry Collector配置
2+
receivers:
3+
otlp:
4+
protocols:
5+
grpc:
6+
endpoint: 0.0.0.0:4317
7+
http:
8+
endpoint: 0.0.0.0:4318
9+
10+
processors:
11+
batch:
12+
13+
exporters:
14+
prometheus:
15+
endpoint: "0.0.0.0:8889" # 改用8889端口避免冲突
16+
17+
service:
18+
pipelines:
19+
metrics:
20+
receivers: [otlp]
21+
processors: [batch]
22+
exporters: [prometheus]

mock/s3/deployments/observability/prometheus.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ scrape_configs:
1414
# OpenTelemetry Collector指标
1515
- job_name: 'otel-collector'
1616
static_configs:
17-
- targets: ['otel-collector:8888']
17+
- targets: ['172.21.0.24:8889'] # 使用otel-collector的固定IP和新端口
1818
scrape_interval: 10s
1919
metrics_path: /metrics
2020

2121
# Mock S3服务通过Consul服务发现
2222
- job_name: 'mock-s3-services'
2323
consul_sd_configs:
24-
- server: 'consul:8500'
24+
- server: '172.21.0.10:8500' # 使用Consul的固定IP地址
2525
services:
2626
- metadata-service
2727
- storage-service

mock/s3/deployments/postgres/init.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ CREATE INDEX IF NOT EXISTS idx_metadata_status ON metadata(status);
1919
CREATE INDEX IF NOT EXISTS idx_metadata_created_at ON metadata(created_at);
2020

2121
-- 权限设置
22-
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO admin;
23-
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO admin;
24-
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO admin;
22+
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO postgres;
23+
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO postgres;
24+
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO postgres;
2525

2626
COMMIT;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Redis配置文件
2+
bind 0.0.0.0
3+
protected-mode no
4+
port 6379

0 commit comments

Comments
 (0)