|
|
@@ -2,42 +2,53 @@
|
|
2
|
2
|
|
|
3
|
3
|
## 概述
|
|
4
|
4
|
|
|
5
|
|
-本项目使用 systemd 管理进程,通过 `deploy.sh` 脚本实现一键构建、上传、备份、健康检查和自动回滚。
|
|
|
5
|
+本项目使用 Podman 容器化部署,通过 `deploy.sh` 脚本实现一键构建、上传、构建镜像、健康检查和自动回滚。
|
|
6
|
6
|
|
|
7
|
7
|
## 服务器环境
|
|
8
|
8
|
|
|
9
|
9
|
- **服务器**: online180 (47.104.204.180)
|
|
10
|
10
|
- **OS**: Alibaba Cloud Linux 3
|
|
11
|
|
-- **Java**: OpenJDK 1.8.0_412
|
|
|
11
|
+- **容器运行时**: Podman 4.9.4 (docker 兼容)
|
|
|
12
|
+- **Java**: OpenJDK 1.8 (容器内)
|
|
12
|
13
|
- **安装目录**: `/opt/iot-platform/`
|
|
13
|
|
-- **服务名称**: `iot-platform`
|
|
|
14
|
+- **容器名称**: `iot-platform`
|
|
14
|
15
|
|
|
15
|
16
|
## 目录结构
|
|
16
|
17
|
|
|
17
|
18
|
```
|
|
18
|
19
|
/opt/iot-platform/
|
|
19
|
20
|
├── iot-platform.jar # 当前运行版本
|
|
|
21
|
+├── Dockerfile # 容器镜像构建定义
|
|
|
22
|
+├── start-container.sh # 容器启动脚本(加载 .env)
|
|
20
|
23
|
├── .env # 环境变量(密码、凭据)
|
|
21
|
24
|
├── backup/ # 版本备份(自动创建)
|
|
22
|
25
|
├── bin/
|
|
23
|
26
|
│ ├── deploy.sh # 一键部署脚本(本地运行)
|
|
24
|
27
|
│ └── health-check.sh # 健康检查脚本
|
|
25
|
28
|
├── config/ # 线上专属配置
|
|
26
|
|
-└── logs/ # 日志输出
|
|
|
29
|
+└── logs/ # 日志输出(宿主机挂载)
|
|
27
|
30
|
```
|
|
28
|
31
|
|
|
29
|
32
|
## 快速开始
|
|
30
|
33
|
|
|
31
|
34
|
### 首次部署(服务器初始化)
|
|
32
|
35
|
|
|
33
|
|
-如果服务器上还没有安装 systemd 服务,执行初始化:
|
|
|
36
|
+确保服务器上已有 `/opt/iot-platform/` 目录,并包含 `Dockerfile`、`.env`、`start-container.sh`:
|
|
|
37
|
+
|
|
|
38
|
+```bash
|
|
|
39
|
+# 从本地同步必要文件到服务器
|
|
|
40
|
+scp deploy/setup-server.sh root@47.104.204.180:/opt/iot-platform/
|
|
|
41
|
+scp .env root@47.104.204.180:/opt/iot-platform/
|
|
|
42
|
+scp Dockerfile root@47.104.204.180:/opt/iot-platform/
|
|
|
43
|
+scp start-container.sh root@47.104.204.180:/opt/iot-platform/
|
|
|
44
|
+ssh root@47.104.204.180 "chmod +x /opt/iot-platform/start-container.sh"
|
|
|
45
|
+```
|
|
|
46
|
+
|
|
|
47
|
+然后执行首次部署:
|
|
34
|
48
|
|
|
35
|
49
|
```bash
|
|
36
|
50
|
cd deploy
|
|
37
|
|
-scp setup-server.sh root@47.104.204.180:/tmp/
|
|
38
|
|
-scp iot-platform.service root@47.104.204.180:/tmp/
|
|
39
|
|
-scp ../.env root@47.104.204.180:/tmp/iot-platform.env
|
|
40
|
|
-ssh root@47.104.204.180 "chmod +x /tmp/setup-server.sh && /tmp/setup-server.sh"
|
|
|
51
|
+./deploy.sh --build
|
|
41
|
52
|
```
|
|
42
|
53
|
|
|
43
|
54
|
### 日常部署
|
|
|
@@ -53,9 +64,9 @@ cd deploy
|
|
53
|
64
|
1. 本地执行 `mvn clean package`
|
|
54
|
65
|
2. 上传 jar 到服务器
|
|
55
|
66
|
3. 备份当前版本(带时间戳)
|
|
56
|
|
-4. 停止 systemd 服务
|
|
57
|
|
-5. 替换 jar
|
|
58
|
|
-6. 启动服务
|
|
|
67
|
+4. 停止并删除旧容器
|
|
|
68
|
+5. 替换 jar 并构建新镜像
|
|
|
69
|
+6. 启动容器(host 网络模式)
|
|
59
|
70
|
7. 健康检查(`/actuator/health`)
|
|
60
|
71
|
8. 失败则自动回滚到上一个版本
|
|
61
|
72
|
|
|
|
@@ -104,20 +115,26 @@ DRUID_PASSWORD=...
|
|
104
|
115
|
## 服务器管理
|
|
105
|
116
|
|
|
106
|
117
|
```bash
|
|
107
|
|
-# 查看状态
|
|
108
|
|
-systemctl status iot-platform
|
|
|
118
|
+# 查看容器状态
|
|
|
119
|
+podman ps | grep iot-platform
|
|
109
|
120
|
|
|
110
|
|
-# 重启
|
|
111
|
|
-systemctl restart iot-platform
|
|
|
121
|
+# 查看实时日志
|
|
|
122
|
+podman logs -f iot-platform
|
|
112
|
123
|
|
|
113
|
|
-# 停止
|
|
114
|
|
-systemctl stop iot-platform
|
|
|
124
|
+# 查看最后 100 行日志
|
|
|
125
|
+podman logs --tail 100 iot-platform
|
|
115
|
126
|
|
|
116
|
|
-# 查看日志
|
|
117
|
|
-journalctl -u iot-platform -f
|
|
|
127
|
+# 查看宿主机上的日志文件(和容器内同步)
|
|
|
128
|
+tail -f /opt/iot-platform/logs/iot-platform.$(date +%Y-%m-%d).*.log
|
|
118
|
129
|
|
|
119
|
|
-# 查看历史日志
|
|
120
|
|
-journalctl -u iot-platform --since "1 hour ago"
|
|
|
130
|
+# 停止容器
|
|
|
131
|
+podman stop iot-platform
|
|
|
132
|
+
|
|
|
133
|
+# 删除容器
|
|
|
134
|
+podman rm iot-platform
|
|
|
135
|
+
|
|
|
136
|
+# 重启容器
|
|
|
137
|
+podman restart iot-platform
|
|
121
|
138
|
```
|
|
122
|
139
|
|
|
123
|
140
|
## 健康检查
|
|
|
@@ -142,10 +159,22 @@ curl -s http://47.104.204.180:8887/actuator/health
|
|
142
|
159
|
|
|
143
|
160
|
```bash
|
|
144
|
161
|
ssh root@47.104.204.180
|
|
145
|
|
-systemctl stop iot-platform
|
|
|
162
|
+
|
|
|
163
|
+# 停止并删除当前容器
|
|
|
164
|
+podman stop iot-platform && podman rm iot-platform
|
|
|
165
|
+
|
|
|
166
|
+# 恢复旧版本 jar
|
|
146
|
167
|
ls /opt/iot-platform/backup/ # 查看可用备份
|
|
147
|
168
|
cp /opt/iot-platform/backup/iot-platform-XXXX.jar /opt/iot-platform/iot-platform.jar
|
|
148
|
|
-systemctl start iot-platform
|
|
|
169
|
+
|
|
|
170
|
+# 重新构建镜像并启动
|
|
|
171
|
+cd /opt/iot-platform && podman build -t iot-platform:latest .
|
|
|
172
|
+podman run -d \
|
|
|
173
|
+ --name iot-platform \
|
|
|
174
|
+ --network host \
|
|
|
175
|
+ --restart unless-stopped \
|
|
|
176
|
+ -v /opt/iot-platform/logs:/opt/iot-platform/logs \
|
|
|
177
|
+ localhost/iot-platform:latest
|
|
149
|
178
|
```
|
|
150
|
179
|
|
|
151
|
180
|
## 配置文件说明
|
|
|
@@ -153,6 +182,8 @@ systemctl start iot-platform
|
|
153
|
182
|
| 文件 | 说明 |
|
|
154
|
183
|
|------|------|
|
|
155
|
184
|
| `deploy.sh` | 一键部署脚本(本地执行) |
|
|
156
|
|
-| `setup-server.sh` | 服务器初始化脚本(服务器执行) |
|
|
|
185
|
+| `setup-server.sh` | 服务器初始化脚本 |
|
|
157
|
186
|
| `health-check.sh` | 健康检查脚本 |
|
|
158
|
|
-| `iot-platform.service` | systemd 服务定义 |
|
|
|
187
|
+| `Dockerfile` | 容器镜像构建定义 |
|
|
|
188
|
+| `start-container.sh` | 容器内启动脚本(加载 .env) |
|
|
|
189
|
+| `iot-platform.service` | systemd 服务定义(已废弃,保留备用) |
|