docs: 更新 CI 部署文档,补充国内网络适配配置

- 新增 Docker 镜像加速配置(服务器初始化)
- 重写 Act Runner 安装章节:自定义镜像构建、config.yaml 关键配置、systemd --config 参数
- 补充三个国内网络问题的解决方案:Docker Hub 加速、github_mirror、--network host
- 更新故障排查:新增 Action 拉取失败、checkout 失败两个排查项
- 更新目录结构:新增 act-runner/ 和 runner-image/
- 版本更新至 v5.1.0
This commit is contained in:
Wang Zhuoxuan 2026-04-17 14:01:25 +08:00
parent 02a50617e7
commit 7856d53635

View File

@ -111,7 +111,18 @@ dnf install -y curl git nginx certbot python3-certbot-nginx
dnf install -y docker docker-compose-plugin dnf install -y docker docker-compose-plugin
systemctl enable --now docker systemctl enable --now docker
# 4. 配置防火墙firewalld # 4. 配置 Docker 镜像加速(国内网络必须)
tee /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
EOF
systemctl restart docker
# 5. 配置防火墙firewalld
# 所有服务通过 Nginx 反向代理,只需开放 22/80/443 # 所有服务通过 Nginx 反向代理,只需开放 22/80/443
systemctl enable --now firewalld systemctl enable --now firewalld
firewall-cmd --permanent --add-service=ssh firewall-cmd --permanent --add-service=ssh
@ -119,12 +130,13 @@ firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https firewall-cmd --permanent --add-service=https
firewall-cmd --reload firewall-cmd --reload
# 5. 创建项目目录 # 6. 创建项目目录
mkdir -p /opt/duoqi-api mkdir -p /opt/duoqi-api
mkdir -p /opt/gitea mkdir -p /opt/gitea
mkdir -p /opt/backups mkdir -p /opt/backups
mkdir -p /opt/runner-image
# 6. 验证 # 7. 验证
cat /etc/os-release # 确认 Alibaba Cloud Linux cat /etc/os-release # 确认 Alibaba Cloud Linux
docker --version docker --version
nginx -v nginx -v
@ -275,6 +287,31 @@ cd /opt/gitea && docker compose up -d
#### 安装 Act RunnerCI/CD 执行器) #### 安装 Act RunnerCI/CD 执行器)
> **国内网络关键配置**Gitea Act Runner 使用 Docker 执行器,需要解决三个网络问题:
> 1. Docker Hub 镜像拉取 → 通过 Docker 镜像加速解决(已在服务器初始化配置)
> 2. GitHub Actions 拉取 → 通过 `github_mirror` 配置从 gitea.com 镜像解决
> 3. 容器访问 Gitea API → 通过 `--network host` 让容器共享宿主机网络
##### 1. 构建 Runner 自定义镜像
> `oven/bun:latest` 不包含 git`actions/checkout` 会回退到 REST API 下载代码,
> 但 GitHub 风格的 REST API URL`/tarball/{ref}`)与 Gitea`/archive/{ref}.tar.gz`)不兼容。
> 因此需要构建预装 git 的自定义镜像,避免每次 CI 安装。
```bash
# 创建 Dockerfile
cat > /opt/runner-image/Dockerfile << 'EOF'
FROM oven/bun:latest
RUN sed -i 's|deb.debian.org|mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources \
&& apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
EOF
# 构建镜像(使用阿里云 Debian 镜像源加速)
docker build -t duoqi-runner:bun-git /opt/runner-image
```
##### 2. 安装并注册 Runner
```bash ```bash
# 下载 Act Runner # 下载 Act Runner
wget -O /usr/local/bin/act_runner https://gitea.com/gitea/act_runner/releases/latest/download/act_runner-linux-amd64 wget -O /usr/local/bin/act_runner https://gitea.com/gitea/act_runner/releases/latest/download/act_runner-linux-amd64
@ -286,14 +323,42 @@ chmod +x /usr/local/bin/act_runner
# 创建专用工作目录register 和 daemon 必须在同一目录) # 创建专用工作目录register 和 daemon 必须在同一目录)
mkdir -p /opt/act-runner mkdir -p /opt/act-runner
# 注册 Runner # 注册 Runner(使用自定义镜像)
cd /opt/act-runner && act_runner register \ cd /opt/act-runner && act_runner register \
--instance http://localhost:3200 \ --instance http://localhost:3200 \
--token YOUR_RUNNER_TOKEN \ --token YOUR_RUNNER_TOKEN \
--name duoqi-runner \ --name duoqi-runner \
--labels ubuntu-latest:docker://oven/bun:latest --labels ubuntu-latest:docker://duoqi-runner:bun-git
```
# 创建 systemd 服务 ##### 3. 生成并配置 Runner 配置文件
```bash
# 生成默认配置
cd /opt/act-runner && act_runner generate-config > config.yaml
```
编辑 `/opt/act-runner/config.yaml`,修改以下关键配置:
```yaml
runner:
# 移除默认的测试环境变量
envs: {}
# 从 gitea.com 镜像拉取 GitHub Actions解决国内无法访问 GitHub 的问题)
github_mirror: 'https://gitea.com'
labels:
- "ubuntu-latest:docker://duoqi-runner:bun-git"
container:
# 容器使用宿主机网络(解决容器无法访问 127.0.0.1:3200 Gitea 的问题)
network: "host"
# 不强制每次拉取镜像(国内网络下减少失败风险)
force_pull: false
```
##### 4. 创建 systemd 服务并启动
```bash
cat > /etc/systemd/system/act-runner.service << 'EOF' cat > /etc/systemd/system/act-runner.service << 'EOF'
[Unit] [Unit]
Description=Gitea Act Runner Description=Gitea Act Runner
@ -301,7 +366,7 @@ After=docker.service
[Service] [Service]
WorkingDirectory=/opt/act-runner WorkingDirectory=/opt/act-runner
ExecStart=/usr/local/bin/act_runner daemon ExecStart=/usr/local/bin/act_runner daemon --config /opt/act-runner/config.yaml
Restart=always Restart=always
Environment=HOME=/root Environment=HOME=/root
@ -482,7 +547,7 @@ develop 分支(开发测试) main 分支(生产发布)
│ │ │ │
▼ ▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐
│ quality │ ← Lint + 类型检查 │ quality │ ← Lint + 类型检查 │ quality │ ← 类型检查 │ quality │ ← 类型检查
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘
▼ ▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐
@ -543,6 +608,9 @@ git push origin main
| 测试环境使用 Docker profiles | 按需启停,节省内存 | | 测试环境使用 Docker profiles | 按需启停,节省内存 |
| 生产部署手动确认 | 防止误操作,确保人工验证后才上线 | | 生产部署手动确认 | 防止误操作,确保人工验证后才上线 |
| 使用 Gitea Actions | 兼容 GitHub Actions 语法,学习成本低 | | 使用 Gitea Actions | 兼容 GitHub Actions 语法,学习成本低 |
| Runner 使用 `--network host` | 容器共享宿主机网络,解决容器无法访问 Gitea 的问题 |
| Runner 使用 `github_mirror` | 从 gitea.com 镜像拉取 Actions解决国内无法访问 GitHub 的问题 |
| 自定义 Runner 镜像bun + git | 避免 checkout REST API 与 Gitea 不兼容的问题,跳过每次安装 |
### 部署操作 ### 部署操作
@ -919,7 +987,32 @@ systemctl restart act-runner
journalctl -u act-runner -f journalctl -u act-runner -f
``` ```
#### 4. 数据库连接失败 #### 4. CI Action 拉取失败(国内网络)
```bash
# 检查 github_mirror 配置
grep github_mirror /opt/act-runner/config.yaml
# 应输出github_mirror: 'https://gitea.com'
# 清除缓存的 action修复损坏的缓存
rm -rf /root/.cache/act/
# 重启 Runner
systemctl restart act-runner
```
#### 5. CI checkout 失败ECONNREFUSED 或 404
```bash
# 检查容器网络配置
grep -A2 "network:" /opt/act-runner/config.yaml
# 应包含network: "host"
# 确认 Gitea API 可达
curl http://localhost:3200/api/v1/repos/search?q=duoqi-api
```
#### 6. 数据库连接失败
```bash ```bash
# 从服务器测试 RDS 连通性 # 从服务器测试 RDS 连通性
@ -953,6 +1046,11 @@ docker compose up -d api-prod
├── gitea/ # Gitea 代码托管 ├── gitea/ # Gitea 代码托管
│ ├── docker-compose.yml │ ├── docker-compose.yml
│ └── data/ # Gitea 数据(仓库、配置) │ └── data/ # Gitea 数据(仓库、配置)
├── act-runner/ # Act Runner CI/CD 执行器
│ ├── config.yaml # Runner 配置(网络、镜像源等)
│ └── .runner # 注册数据
├── runner-image/ # Runner 自定义镜像
│ └── Dockerfile # 基于 oven/bun + git
├── duoqi-api/ # 应用部署 ├── duoqi-api/ # 应用部署
│ ├── docker-compose.yml # 包含 prod + test 配置 │ ├── docker-compose.yml # 包含 prod + test 配置
│ ├── .env.prod # 生产环境变量 │ ├── .env.prod # 生产环境变量
@ -1001,6 +1099,6 @@ docker compose up -d api-prod
--- ---
**文档版本**: v5.0.0 (双分支工作流) **文档版本**: v5.1.0 (双分支工作流 + 国内网络适配)
**最后更新**: 2026-04-16 **最后更新**: 2026-04-17
**维护者**: Duoqi Team **维护者**: Duoqi Team