|
|
@@ -1,72 +1,63 @@
|
|
|
-# 测试机 Drone CI(对接 Gogs)
|
|
|
+# 测试机 Drone CI(对接 Gogs)— 生产 Docker 打包
|
|
|
|
|
|
> 目标机:`101.35.245.122`
|
|
|
-> Gogs:`http://101.35.245.122:3000`(已有)
|
|
|
-> Drone UI:`http://101.35.245.122:18088`(云安全组未开 8080,改用已放行的 18088)
|
|
|
-> 范围:编译打包 artifact,**不**自动部署到 `/root/zkxw`
|
|
|
+> Gogs:`http://101.35.245.122:3000`
|
|
|
+> Drone UI:`http://101.35.245.122:18088`
|
|
|
+> 产物目录:`/root/zkxw-releases/`
|
|
|
|
|
|
-## 1. 部署(在测试机)
|
|
|
+## 行为
|
|
|
+
|
|
|
+- **仅 `tag` 触发**(普通 push 不打包)
|
|
|
+- 执行 `./scripts/package-docker-deploy.sh <tag>`
|
|
|
+ → `zkxw-backend:<tag>` + `zkxw-web:<tag>` → `docker save` → 交付包
|
|
|
+- 拷贝到:`/root/zkxw-releases/zkxw-docker-deploy-<tag>.tar.gz`
|
|
|
+
|
|
|
+可选:将发版用 `deploy/docker/.env`(含微信/RSA 等注入项)放到:
|
|
|
+
|
|
|
+```text
|
|
|
+/root/zkxw-releases/.deploy-docker.env
|
|
|
+```
|
|
|
+
|
|
|
+打包前会复制为仓库内 `deploy/docker/.env`(**勿提交 git**)。
|
|
|
+
|
|
|
+## 1. 部署 / 更新 Runner
|
|
|
|
|
|
```bash
|
|
|
-mkdir -p /root/drone
|
|
|
-# 从本仓库同步模板,或手工 scp 本目录
|
|
|
-cp docker-compose.yml .env.example /root/drone/
|
|
|
+mkdir -p /root/drone /root/zkxw-releases
|
|
|
+# 同步本目录 docker-compose.yml 后:
|
|
|
cd /root/drone
|
|
|
-cp .env.example .env
|
|
|
-# 生成共享密钥
|
|
|
-sed -i "s/replace-with-openssl-rand-hex-32/$(openssl rand -hex 32)/" .env
|
|
|
-docker compose pull
|
|
|
-# 预拉构建镜像(Docker Hub 慢时用 daoCloud,再 tag 成流水线里的名字)
|
|
|
-docker pull docker.m.daocloud.io/library/node:20-bookworm
|
|
|
-docker tag docker.m.daocloud.io/library/node:20-bookworm node:20-bookworm
|
|
|
docker compose up -d
|
|
|
-docker compose ps
|
|
|
-docker logs drone-runner 2>&1 | tail -20
|
|
|
-# 期望看到:successfully pinged the remote server
|
|
|
+# 预拉流水线镜像(国内建议 daoCloud)
|
|
|
+docker pull docker.m.daocloud.io/library/docker:27-cli
|
|
|
+docker tag docker.m.daocloud.io/library/docker:27-cli docker:27-cli
|
|
|
```
|
|
|
|
|
|
-云安全组 / 主机防火墙放行 **TCP 18088**(本方案默认端口;勿用未放行的 8080)。
|
|
|
-
|
|
|
-流水线使用默认 `drone/git` clone(`depth: 1`)。构建镜像需预拉 `node:20-bookworm`。
|
|
|
-测试机内存约 3.6G,已加 `/swap-drone`(4G)并限制 Node 堆,避免 web-admin 构建 OOM。
|
|
|
+云安全组放行 **TCP 18088**。测试机建议保留 `/swap-drone`(前端镜像构建吃内存)。
|
|
|
|
|
|
## 2. 登录与激活仓库
|
|
|
|
|
|
-1. 浏览器打开 `http://101.35.245.122:18088`
|
|
|
-2. 使用 **Gogs 用户名/密码** 登录(Gogs 无 OAuth)
|
|
|
-3. Sync 仓库 → 激活 `wuzilong/zkxw`
|
|
|
-4. 在 Gogs 该仓 **Settings → Webhooks** 确认存在 Drone 回调,例如:
|
|
|
- `http://101.35.245.122:18088/hook`
|
|
|
+1. 打开 `http://101.35.245.122:18088`,用 Gogs 账号登录
|
|
|
+2. 激活 `wuzilong/zkxw`
|
|
|
+3. Webhook:`http://101.35.245.122:18088/hook`
|
|
|
|
|
|
-云安全组 / 本机 YJ 防火墙需放行 **TCP 18088**(本机已按此端口部署)。
|
|
|
+## 3. 发版用法
|
|
|
|
|
|
-## 3. 流水线
|
|
|
-
|
|
|
-仓库根目录 [`.drone.yml`](../../.drone.yml):
|
|
|
-
|
|
|
-- `web-admin`:`pnpm build:test` → `artifacts/web-admin-dist.tar.gz`
|
|
|
-- `mobile-oa-h5`:`npm run build -- --mode test` → `artifacts/oa-h5-dist.tar.gz`
|
|
|
-- `backend`:源码打包(排除 venv/logs)→ `artifacts/backend-src.tar.gz`
|
|
|
+```bash
|
|
|
+# 本地打 tag 并推到 Gogs
|
|
|
+git tag v1.2.0
|
|
|
+git push origin v1.2.0
|
|
|
|
|
|
-因 `.env.test` 未入库,流水线构建前会用已跟踪的 `.env.docker` 复制为 `.env.test`(仅保证能编过;若需与线上测试配置一致,可在 Drone 仓库 Secrets 中自行注入后再 `printf` 写入)。
|
|
|
+# 构建完成后在测试机取包
|
|
|
+ls -lh /root/zkxw-releases/zkxw-docker-deploy-v1.2.0.tar.gz
|
|
|
+```
|
|
|
|
|
|
-**不会** rsync、不会执行 `start-test.sh`。
|
|
|
+Drone UI 可看构建日志;包内结构见 `deploy/docker/README.md`。
|
|
|
|
|
|
-## 4. 日常运维
|
|
|
+## 4. 运维
|
|
|
|
|
|
```bash
|
|
|
cd /root/drone
|
|
|
docker compose ps
|
|
|
-docker compose logs -f --tail=100 drone
|
|
|
docker compose logs -f --tail=100 drone-runner
|
|
|
-docker compose restart
|
|
|
-docker compose down # 停止(保留 volume drone-data)
|
|
|
-```
|
|
|
-
|
|
|
-## 5. 验收
|
|
|
-
|
|
|
-```bash
|
|
|
-curl -sI http://101.35.245.122:18088 | head -5
|
|
|
-curl -sI http://101.35.245.122:3000 | head -5
|
|
|
-# push 到 wuzilong/zkxw 或在 Drone UI 点 Rebuild,构建应为绿色
|
|
|
+docker compose restart runner
|
|
|
```
|