本文介绍了利用 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 平台的一个有效参考。
DISCUSSION
评论
还没有公开评论,欢迎留下想法。