本文介绍了利用 Docker 部署 Gitea、Act Runner 和 Zot 构建私有 DevOps 平台的方案。针对国内网络环境,提出将 Gitea 部署在国内服务器以保证代码访问速度,而将 Act Runner 和 Zot 部署在海外服务器以加速依赖下载与镜像推送。详细说明了各组件的部署步骤、配置方法与集成验证流程,为需要跨境网络优化的团队提供了有效参考。

在搭建私有开发环境时,代码托管、持续集成与制品存储是三个核心环节。Gitea 是一个轻量级的 Git 服务,搭配其原生的 CI Runner(Act Runner)可实现完整的 CI/CD 流水线;Zot 则是一个高效的自托管容器镜像仓库,适合存储构建产物。本文将阐述如何利用 Docker 部署这三者,并针对国内网络环境给出推荐方案:将 Gitea 部署在国内服务器以获得低延迟访问,而将 Act Runner 和 Zot 部署在海外服务器以加速依赖下载与公共镜像同步。

场景分析

许多团队希望拥有完全自主可控的代码仓库和 CI/CD 系统,以避免对公共平台的依赖。然而在国内,直接访问部分海外资源(例如 GitHub Actions 所需依赖或公共镜像仓库)速度较慢。因此,一种合理的做法是将核心 Git 服务留在国内,而将 CI 执行节点和镜像仓库置于海外。这样既保证了代码操作的流畅性,又让流水线能快速获取外部资源。

整体架构

  • Gitea:运行于国内服务器,提供 Git 仓库、Issue、PR 等功能。
  • Act Runner:运行于海外服务器,通过注册连接到 Gitea,作为 CI 任务执行器。
  • Zot:运行于海外服务器,作为私有容器镜像注册中心,用于存储构建出的镜像。

上述所有组件均采用 Docker 部署,便于管理、扩展与迁移。

部署步骤

1. 部署 Gitea

使用 Docker 运行 Gitea 实例。推荐使用国内服务器,并挂载持久化数据目录。

docker run -d --name=gitea \
  -p 3000:3000 -p 22:22 \
  -v /data/gitea:/data \
  --restart always \
  gitea/gitea:latest

启动后访问 http://<服务器IP>:3000 进行初始化配置,包括数据库选择(SQLite 或 MySQL 等)、站点信息、管理员账号等。

2. 部署 Zot

在海外服务器上部署 Zot。Zot 配置简单,仅需一个 YAML 配置文件指定存储路径和监听端口。

# config.yaml
storage:
  root: /data/zot
default: true
http:
  address: 0.0.0.0
  port: 5000

启动容器:

docker run -d --name=zot \
  -p 5000:5000 \
  -v /data/zot:/data/zot \
  -v /path/to/config.yaml:/etc/zot/config.yaml \
  --restart always \
  zotregistry/zot:latest

此时 Zot 即运行在海外服务器 5000 端口,可作为私有镜像仓库使用。

3. 部署 Act Runner

Act Runner 需注册到特定的 Gitea 实例。在海外服务器上执行以下步骤:

首先,在 Gitea 管理界面创建 Runner 注册令牌。然后运行 Runner 容器:

docker run -d --name=act-runner \
  -e GITEA_INSTANCE_URL=https://your-gitea-domain \
  -e GITEA_RUNNER_REGISTRATION_TOKEN=your_token \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --restart always \
  gitea/act_runner:latest

容器启动后会自动注册并开始轮询任务。注意挂载 Docker 套接字使 Runner 能执行 Docker 命令。

集成与验证

成功部署后,可以在 Gitea 仓库中添加 .gitea/workflows/ 下的工作流文件,触发 CI 任务。Act Runner 会从海外执行,拉取依赖时由于自身位于海外,速度较快。同时,CI 中构建的镜像可推送至部署在海外同一区域的 Zot 仓库,实现低延迟存储与分发。

总结

通过上述混合部署方案,团队在国内即可享受到高效的 Git 服务,同时利用海外资源完成 CI/CD 与镜像存储,兼顾速度与自主性。所有组件均基于 Docker,维护简单,升级方便。这种架构适合有跨境网络优化需求的团队,是构建私有 DevOps 平台的一个有效参考。