Quellcode durchsuchen

build(deploy): 优化 Dockerfile 和部署流程

- 重构 Dockerfile 以利用缓存层,加快构建速度
- 新增 deploy.sh 脚本实现自动化部署,支持 API 和 Task 服务- 更新 README.md,增加优化部署脚本的使用说明
-调整手动部署命令,区分 API 和 Task 服务
fusu vor 3 Monaten
Ursprung
Commit
d97722c332
2 geänderte Dateien mit 44 neuen und 14 gelöschten Zeilen
  1. 38 13
      README.md
  2. 6 1
      deploy/build/Dockerfile

+ 38 - 13
README.md

@@ -1,6 +1,6 @@
 # Nunu 高级布局项目部署指南
 
-本文档提供在宝塔Linux服务器上部署此Go项目的详细步骤。
+本文档提供在宝塔Linux服务器上部署此Go项目的详细步骤。项目支持同时部署API服务和Task任务服务。
 
 ## 方法一:使用Docker部署(推荐)
 
@@ -24,23 +24,48 @@
  // docker build -t go-app:v1 --build-arg APP_RELATIVE_PATH=./cmd/server/... -f deploy/build/Dockerfile .
   ```
 
-### 4. 运行Docker容器
-```bash
-docker run -d --restart=always --name go-app -p 8000:8000 go-app:v1
-```
+### 4. 使用优化部署脚本
+
+项目提供了优化的部署脚本,支持同时部署API服务和Task任务服务,并且可以显著提高构建速度:
 
-- 代码变更后:需要重新构建Docker镜像,这个过程会重新编译您的Go代码
 ```bash
-docker build -t go-app:v1 -f deploy/build/Dockerfile .
+# 将脚本权限设置为可执行
+chmod +x deploy/deploy.sh
+
+# 默认部署全部服务(API和Task)
+./deploy/deploy.sh
+
+# 只部署API服务
+./deploy/deploy.sh --api
+
+# 只部署Task服务
+./deploy/deploy.sh --task
+
+# 强制重新创建容器
+./deploy/deploy.sh --force
+
+# 不使用Docker缓存构建
+./deploy/deploy.sh --no-cache
 ```
-- 然后替换运行中的容器
+
+脚本会自动:
+1. 创建必要的目录结构
+2. 利用Docker卷缓存Go模块以加快构建速度
+3. 挂载配置和日志目录
+4. 仅在需要时重新创建容器
+
+### 5. 手动运行Docker容器
+如果您想手动管理容器,可以使用以下命令:
+
 ```bash
-docker stop go-app
-docker rm go-app
-docker run -d --restart=always --name go-app -p 8000:8000 go-app:v1
+# API服务
+docker run -d --restart=always --name nunu-api -p 8000:8000 -v /www/wwwroot/nunu/storage:/data/app/storage -v /www/wwwroot/nunu/config:/data/app/config nunu-api:v1
+
+# Task服务
+docker run -d --restart=always --name nunu-task -v /www/wwwroot/nunu/storage:/data/app/storage -v /www/wwwroot/nunu/config:/data/app/config nunu-task:v1
 ```
 
-### 5. Docker容器管理命令
+### 6. Docker容器管理命令
 
 ```bash
 # 停止容器
@@ -65,7 +90,7 @@ docker ps -a
 docker rm go-app
 ```
 
-### 6. 配置反向代理(可选)
+### 7. 配置反向代理(可选)
 - 在宝塔面板中添加站点
 - 设置反向代理到 `http://127.0.0.1:8000`
 

+ 6 - 1
deploy/build/Dockerfile

@@ -7,8 +7,13 @@ ARG APP_RELATIVE_PATH
 # 定义应用名称参数,用于指定输出的二进制文件名
 ARG APP_NAME=app
 
-COPY .. /data/app
+# 先复制依赖文件,利用缓存层
 WORKDIR /data/app
+COPY go.mod go.sum /data/app/
+RUN export GOPROXY=https://goproxy.cn,direct && go mod download
+
+# 再复制其他文件
+COPY . /data/app/
 
 RUN mkdir -p /data/app/bin/
 RUN export GOPROXY=https://goproxy.cn,direct && go mod tidy && go build -ldflags="-s -w" -o ./bin/${APP_NAME} ${APP_RELATIVE_PATH}