Skip to content

Commit b919177

Browse files
committed
ci(deploy): 实现自动化部署并优化 CI/CD 流程
- 添加部署脚本和 Docker Compose 配置文件 - 更新 CI/CD 工作流以支持自动化部署 - 新增环境变量配置示例和部署说明文档 - 注释掉 ruoyi-gen、ruoyi-job 和 ruoyi-resource 的构建和部署 - 调整部署条件,仅在 dev 和 master 分支触发部署
1 parent f008d87 commit b919177

File tree

5 files changed

+324
-25
lines changed

5 files changed

+324
-25
lines changed

.github/workflows/ci.yml

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -92,19 +92,19 @@ jobs:
9292
push: true
9393
tags: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/ruoyi-system:${{ github.sha }}
9494

95-
- name: Build and push ruoyi-gen
96-
uses: docker/build-push-action@v5
97-
with:
98-
context: ./framework/ruoyi-modules/ruoyi-gen
99-
push: true
100-
tags: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/ruoyi-gen:${{ github.sha }}
95+
# - name: Build and push ruoyi-gen
96+
# uses: docker/build-push-action@v5
97+
# with:
98+
# context: ./framework/ruoyi-modules/ruoyi-gen
99+
# push: true
100+
# tags: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/ruoyi-gen:${{ github.sha }}
101101

102-
- name: Build and push ruoyi-job
103-
uses: docker/build-push-action@v5
104-
with:
105-
context: ./framework/ruoyi-modules/ruoyi-job
106-
push: true
107-
tags: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/ruoyi-job:${{ github.sha }}
102+
# - name: Build and push ruoyi-job
103+
# uses: docker/build-push-action@v5
104+
# with:
105+
# context: ./framework/ruoyi-modules/ruoyi-job
106+
# push: true
107+
# tags: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/ruoyi-job:${{ github.sha }}
108108

109109
- name: Build and push ruoyi-resource
110110
uses: docker/build-push-action@v5
@@ -123,29 +123,43 @@ jobs:
123123
deploy:
124124
needs: docker-build
125125
runs-on: ubuntu-latest
126-
if: github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master'
126+
if: github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/master'
127127
steps:
128+
- uses: actions/checkout@v4
129+
130+
- name: Copy deployment files to server
131+
uses: appleboy/[email protected]
132+
with:
133+
host: ${{ secrets.SERVER_IP }}
134+
username: ${{ secrets.SSH_USERNAME }}
135+
key: ${{ secrets.SSH_PRIVATE_KEY }}
136+
source: "docker-compose.yml,deploy.sh,env-example"
137+
target: "/home/${{ secrets.SSH_USERNAME }}/im-ai-deploy"
138+
overwrite: true
139+
128140
- name: SSH Deploy
129141
uses: appleboy/[email protected]
130142
with:
131143
host: ${{ secrets.SERVER_IP }}
132144
username: ${{ secrets.SSH_USERNAME }}
133145
key: ${{ secrets.SSH_PRIVATE_KEY }}
134146
script: |
135-
sleep 2
136-
docker login ${{ env.DOCKER_REGISTRY }} --username=${{ secrets.TENCENT_REGISTRY_USERNAME }} --password=${{ secrets.TENCENT_REGISTRY_PASSWORD }}
147+
cd /home/${{ secrets.SSH_USERNAME }}/im-ai-deploy
148+
chmod +x deploy.sh
149+
150+
# 设置环境变量
151+
export DOCKER_REGISTRY=${{ env.DOCKER_REGISTRY }}
152+
export DOCKER_NAMESPACE=${{ env.DOCKER_NAMESPACE }}
153+
export REGISTRY_USERNAME=${{ secrets.TENCENT_REGISTRY_USERNAME }}
154+
export REGISTRY_PASSWORD=${{ secrets.TENCENT_REGISTRY_PASSWORD }}
137155
138-
# 拉取最新的镜像
139-
docker pull ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/im-gateway:${{ github.sha }}
140-
docker pull ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/ruoyi-auth:${{ github.sha }}
141-
docker pull ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/ruoyi-system:${{ github.sha }}
142-
docker pull ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/ruoyi-gen:${{ github.sha }}
143-
docker pull ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/ruoyi-job:${{ github.sha }}
144-
docker pull ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/ruoyi-resource:${{ github.sha }}
145-
docker pull ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_NAMESPACE }}/im-core-server:${{ github.sha }}
156+
# 如果不存在.env文件,则复制示例文件
157+
if [ ! -f .env ]; then
158+
cp env-example .env
159+
fi
146160
147-
# 可以在这里添加停止旧容器、启动新容器的命令
148-
# 例如:docker-compose up -d 或 kubectl apply -f k8s-deployment.yaml
161+
# 使用GitHub SHA作为标签部署
162+
./deploy.sh ${{ github.sha }}
149163
150164
# - name: Manual approval
151165
# uses: trstringer/manual-approval@v2

README-deployment.md

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
# 部署说明
2+
3+
## 环境要求
4+
5+
- Docker Engine 20.10+
6+
- Docker Compose 2.0+
7+
8+
## 部署步骤
9+
10+
### 1. 准备环境变量文件
11+
12+
复制环境变量示例文件并编辑:
13+
14+
```bash
15+
cp env-example .env
16+
```
17+
18+
根据需要修改.env文件中的变量,特别是Nacos相关配置:
19+
20+
```
21+
# Nacos配置
22+
NACOS_SERVER=nacos.myimkit.com:8848
23+
NACOS_USERNAME=nacos
24+
NACOS_PASSWORD=abcdimkit8989a
25+
NACOS_DISCOVERY_GROUP=DEFAULT_GROUP
26+
NACOS_CONFIG_GROUP=DEFAULT_GROUP
27+
```
28+
29+
### 2. 配置Docker Registry登录信息
30+
31+
设置以下环境变量:
32+
33+
```bash
34+
export REGISTRY_USERNAME=您的用户名
35+
export REGISTRY_PASSWORD=您的密码
36+
```
37+
38+
### 3. 部署服务
39+
40+
使用标签部署(例如使用GitHub SHA作为标签):
41+
42+
```bash
43+
./deploy.sh 具体的标签
44+
```
45+
46+
或者使用最新版本部署:
47+
48+
```bash
49+
./deploy.sh
50+
```
51+
52+
如果想要临时覆盖Nacos配置,可以在启动时指定:
53+
54+
```bash
55+
NACOS_SERVER=192.168.1.100:8848 ./deploy.sh
56+
```
57+
58+
### 4. 查看服务状态
59+
60+
```bash
61+
docker-compose ps
62+
```
63+
64+
### 5. 查看服务日志
65+
66+
```bash
67+
docker-compose logs -f 服务名称
68+
```
69+
70+
例如:
71+
72+
```bash
73+
docker-compose logs -f im-gateway
74+
```
75+
76+
## Host配置说明
77+
78+
docker-compose.yml已配置每个服务的extra_hosts,添加了以下主机映射:
79+
80+
```
81+
nacos.myimkit.com:192.168.1.101
82+
mysql.myimkit.com:192.168.1.101
83+
redis.myimkit.com:192.168.1.101
84+
```
85+
86+
这确保了容器内部可以通过这些域名访问对应的服务。
87+
88+
## Nacos配置说明
89+
90+
在docker-compose.yml中,每个服务都配置了Nacos相关的环境变量:
91+
92+
```yaml
93+
environment:
94+
- SPRING_CLOUD_NACOS_SERVER_ADDR=${NACOS_SERVER:-nacos.myimkit.com:8848}
95+
- SPRING_CLOUD_NACOS_USERNAME=${NACOS_USERNAME:-nacos}
96+
- SPRING_CLOUD_NACOS_PASSWORD=${NACOS_PASSWORD:-abcdimkit8989a}
97+
- SPRING_CLOUD_NACOS_DISCOVERY_GROUP=${NACOS_DISCOVERY_GROUP:-DEFAULT_GROUP}
98+
- SPRING_CLOUD_NACOS_CONFIG_GROUP=${NACOS_CONFIG_GROUP:-DEFAULT_GROUP}
99+
```
100+
101+
这些环境变量会覆盖应用程序中的@nacos.server@等占位符,使应用能够连接到指定的Nacos服务。
102+
103+
## 更新部署
104+
105+
当有新版本发布时,只需重新运行部署脚本即可:
106+
107+
```bash
108+
./deploy.sh 新的标签
109+
```
110+
111+
## 停止所有服务
112+
113+
```bash
114+
docker-compose down
115+
```

deploy.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/bin/bash
2+
3+
# 设置镜像标签,如果没有指定则使用latest
4+
export TAG=${1:-latest}
5+
6+
# 登录Docker Registry
7+
echo "登录Docker Registry..."
8+
docker login ${DOCKER_REGISTRY} --username=$REGISTRY_USERNAME --password=$REGISTRY_PASSWORD
9+
10+
# 拉取最新镜像
11+
echo "拉取最新镜像..."
12+
docker-compose pull
13+
14+
# 启动服务
15+
echo "启动服务..."
16+
docker-compose up -d
17+
18+
echo "部署完成!"

docker-compose.yml

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
version: '3.8'
2+
3+
services:
4+
im-gateway:
5+
image: ${DOCKER_REGISTRY}/${DOCKER_NAMESPACE}/im-gateway:${TAG:-latest}
6+
container_name: im-gateway
7+
restart: always
8+
ports:
9+
- "8080:8080"
10+
- "9688:9688"
11+
environment:
12+
- SERVER_PORT=8080
13+
- WS_PORT=9688
14+
- JAVA_OPTS=-Xms128m -Xmx128m
15+
- SPRING_CLOUD_NACOS_SERVER_ADDR=${NACOS_SERVER:-10.1.12.11:8848}
16+
- SPRING_CLOUD_NACOS_USERNAME=${NACOS_USERNAME:-nacos}
17+
- SPRING_CLOUD_NACOS_PASSWORD=${NACOS_PASSWORD:-abcdimkit8989a}
18+
- SPRING_CLOUD_NACOS_DISCOVERY_GROUP=${NACOS_DISCOVERY_GROUP:-DEFAULT_GROUP}
19+
- SPRING_CLOUD_NACOS_CONFIG_GROUP=${NACOS_CONFIG_GROUP:-DEFAULT_GROUP}
20+
extra_hosts:
21+
- "nacos.myimkit.com:192.168.1.101"
22+
- "mysql.myimkit.com:192.168.1.101"
23+
- "redis.myimkit.com:192.168.1.101"
24+
25+
im-core-server:
26+
image: ${DOCKER_REGISTRY}/${DOCKER_NAMESPACE}/im-core-server:${TAG:-latest}
27+
container_name: im-core-server
28+
restart: always
29+
ports:
30+
- "9400:9400"
31+
environment:
32+
- SERVER_PORT=9400
33+
- JAVA_OPTS=-Xms128m -Xmx128m
34+
- SPRING_CLOUD_NACOS_SERVER_ADDR=${NACOS_SERVER:-10.1.12.11:8848}
35+
- SPRING_CLOUD_NACOS_USERNAME=${NACOS_USERNAME:-nacos}
36+
- SPRING_CLOUD_NACOS_PASSWORD=${NACOS_PASSWORD:-abcdimkit8989a}
37+
- SPRING_CLOUD_NACOS_DISCOVERY_GROUP=${NACOS_DISCOVERY_GROUP:-DEFAULT_GROUP}
38+
- SPRING_CLOUD_NACOS_CONFIG_GROUP=${NACOS_CONFIG_GROUP:-DEFAULT_GROUP}
39+
extra_hosts:
40+
- "nacos.myimkit.com:192.168.1.101"
41+
- "mysql.myimkit.com:192.168.1.101"
42+
- "redis.myimkit.com:192.168.1.101"
43+
ruoyi-auth:
44+
image: ${DOCKER_REGISTRY}/${DOCKER_NAMESPACE}/ruoyi-auth:${TAG:-latest}
45+
container_name: ruoyi-auth
46+
restart: always
47+
ports:
48+
- "9200:9200"
49+
environment:
50+
- SERVER_PORT=9200
51+
- JAVA_OPTS=-Xms128m -Xmx128m
52+
- SPRING_CLOUD_NACOS_SERVER_ADDR=${NACOS_SERVER:-10.1.12.11:8848}
53+
- SPRING_CLOUD_NACOS_USERNAME=${NACOS_USERNAME:-nacos}
54+
- SPRING_CLOUD_NACOS_PASSWORD=${NACOS_PASSWORD:-abcdimkit8989a}
55+
- SPRING_CLOUD_NACOS_DISCOVERY_GROUP=${NACOS_DISCOVERY_GROUP:-DEFAULT_GROUP}
56+
- SPRING_CLOUD_NACOS_CONFIG_GROUP=${NACOS_CONFIG_GROUP:-DEFAULT_GROUP}
57+
extra_hosts:
58+
- "nacos.myimkit.com:192.168.1.101"
59+
- "mysql.myimkit.com:192.168.1.101"
60+
- "redis.myimkit.com:192.168.1.101"
61+
62+
ruoyi-system:
63+
image: ${DOCKER_REGISTRY}/${DOCKER_NAMESPACE}/ruoyi-system:${TAG:-latest}
64+
container_name: ruoyi-system
65+
restart: always
66+
ports:
67+
- "9201:9201"
68+
environment:
69+
- SERVER_PORT=9201
70+
- JAVA_OPTS=-Xms128m -Xmx128m
71+
- SPRING_CLOUD_NACOS_SERVER_ADDR=${NACOS_SERVER:-10.1.12.11:8848}
72+
- SPRING_CLOUD_NACOS_USERNAME=${NACOS_USERNAME:-nacos}
73+
- SPRING_CLOUD_NACOS_PASSWORD=${NACOS_PASSWORD:-abcdimkit8989a}
74+
- SPRING_CLOUD_NACOS_DISCOVERY_GROUP=${NACOS_DISCOVERY_GROUP:-DEFAULT_GROUP}
75+
- SPRING_CLOUD_NACOS_CONFIG_GROUP=${NACOS_CONFIG_GROUP:-DEFAULT_GROUP}
76+
extra_hosts:
77+
- "nacos.myimkit.com:192.168.1.101"
78+
- "mysql.myimkit.com:192.168.1.101"
79+
- "redis.myimkit.com:192.168.1.101"
80+
81+
# ruoyi-gen:
82+
# image: ${DOCKER_REGISTRY}/${DOCKER_NAMESPACE}/ruoyi-gen:${TAG:-latest}
83+
# container_name: ruoyi-gen
84+
# restart: always
85+
# ports:
86+
# - "9202:9202"
87+
# environment:
88+
# - SERVER_PORT=9202
89+
# - JAVA_OPTS=-Xms128m -Xmx128m
90+
# - SPRING_CLOUD_NACOS_SERVER_ADDR=${NACOS_SERVER:-10.1.12.11:8848}
91+
# - SPRING_CLOUD_NACOS_USERNAME=${NACOS_USERNAME:-nacos}
92+
# - SPRING_CLOUD_NACOS_PASSWORD=${NACOS_PASSWORD:-abcdimkit8989a}
93+
# - SPRING_CLOUD_NACOS_DISCOVERY_GROUP=${NACOS_DISCOVERY_GROUP:-DEFAULT_GROUP}
94+
# - SPRING_CLOUD_NACOS_CONFIG_GROUP=${NACOS_CONFIG_GROUP:-DEFAULT_GROUP}
95+
# extra_hosts:
96+
# - "nacos.myimkit.com:192.168.1.101"
97+
# - "mysql.myimkit.com:192.168.1.101"
98+
# - "redis.myimkit.com:192.168.1.101"
99+
100+
# ruoyi-job:
101+
# image: ${DOCKER_REGISTRY}/${DOCKER_NAMESPACE}/ruoyi-job:${TAG:-latest}
102+
# container_name: ruoyi-job
103+
# restart: always
104+
# ports:
105+
# - "9203:9203"
106+
# environment:
107+
# - SERVER_PORT=9203
108+
# - JAVA_OPTS=-Xms128m -Xmx128m
109+
# - SPRING_CLOUD_NACOS_SERVER_ADDR=${NACOS_SERVER:-10.1.12.11:8848}
110+
# - SPRING_CLOUD_NACOS_USERNAME=${NACOS_USERNAME:-nacos}
111+
# - SPRING_CLOUD_NACOS_PASSWORD=${NACOS_PASSWORD:-abcdimkit8989a}
112+
# - SPRING_CLOUD_NACOS_DISCOVERY_GROUP=${NACOS_DISCOVERY_GROUP:-DEFAULT_GROUP}
113+
# - SPRING_CLOUD_NACOS_CONFIG_GROUP=${NACOS_CONFIG_GROUP:-DEFAULT_GROUP}
114+
# extra_hosts:
115+
# - "nacos.myimkit.com:192.168.1.101"
116+
# - "mysql.myimkit.com:192.168.1.101"
117+
# - "redis.myimkit.com:192.168.1.101"
118+
119+
# ruoyi-resource:
120+
# image: ${DOCKER_REGISTRY}/${DOCKER_NAMESPACE}/ruoyi-resource:${TAG:-latest}
121+
# container_name: ruoyi-resource
122+
# restart: always
123+
# ports:
124+
# - "9300:9300"
125+
# environment:
126+
# - SERVER_PORT=9300
127+
# - JAVA_OPTS=-Xms128m -Xmx128m
128+
# - SPRING_CLOUD_NACOS_SERVER_ADDR=${NACOS_SERVER:-10.1.12.11:8848}
129+
# - SPRING_CLOUD_NACOS_USERNAME=${NACOS_USERNAME:-nacos}
130+
# - SPRING_CLOUD_NACOS_PASSWORD=${NACOS_PASSWORD:-abcdimkit8989a}
131+
# - SPRING_CLOUD_NACOS_DISCOVERY_GROUP=${NACOS_DISCOVERY_GROUP:-DEFAULT_GROUP}
132+
# - SPRING_CLOUD_NACOS_CONFIG_GROUP=${NACOS_CONFIG_GROUP:-DEFAULT_GROUP}
133+
# extra_hosts:
134+
# - "nacos.myimkit.com:192.168.1.101"
135+
# - "mysql.myimkit.com:192.168.1.101"
136+
# - "redis.myimkit.com:192.168.1.101"
137+

env-example

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Docker Registry配置
2+
DOCKER_REGISTRY=useccr.ccs.tencentyun.com
3+
DOCKER_NAMESPACE=java-im-ai
4+
# 使用latest作为默认标签,可在启动时通过TAG环境变量覆盖
5+
TAG=latest
6+
7+
# Nacos配置
8+
NACOS_SERVER=10.1.12.11:8848
9+
NACOS_USERNAME=nacos
10+
NACOS_PASSWORD=abcdimkit8989a
11+
NACOS_DISCOVERY_GROUP=DEFAULT_GROUP
12+
NACOS_CONFIG_GROUP=DEFAULT_GROUP
13+
14+
# 可以设置其他全局环境变量
15+
TZ=Asia/Shanghai

0 commit comments

Comments
 (0)