



























Gitea 本身是一个轻量级的 Git 服务,但官方暂未提供类似 GitHub Pages 的原生静态站点托管功能。如果你需要在 Gitea 环境中实现自动化部署并托管静态文档或前端构建产物,可以引入开源项目kekxv/gitea-pages 作为解决方案。
本文将介绍该项目的工作机制,并重点解析服务端的 Docker 部署方式,以及如何通过 Gitea Actions 编写 CI/CD 工作流,实现代码提交后的全自动构建与部署。
kekxv/gitea-pages 的定位是一个适配 Gitea 的无状态(Actionless)静态站点托管服务。其底层运行逻辑如下:
push 事件。gh-pages)时,服务会通过浅克隆(Shallow Clone)将该分支的内容拉取到服务器本地。*.pages.example.com),内置的 Nginx 容器会将请求路由到对应仓库的克隆目录中,实现类似 username.pages.example.com/repo 的访问效果。kekxv/gitea-pages 的服务端架构解耦为两个核心容器:负责处理 Webhook 和拉取代码的 deployer,以及负责解析泛域名和托管静态文件的 pages-nginx。
你可以通过以下 docker-compose.yaml 文件快速拉起服务:
1 | services: |
deployer 将拉取的静态文件写入 ./pages/webroot,而 pages-nginx 以只读 (ro) 模式挂载该目录,实现了构建产物写入与对外发布的安全隔离。8080 端口用于接收 Gitea 侧发出的 Webhook 请求,需确保 Gitea 实例能够访问该端口。8888 端口为 Nginx 服务的暴露端口,生产环境中通常需要在外层再配置一层反向代理(如 Nginx 或 Traefik),将泛域名 *.pages.example.com 指向此端口。GITEA_ACCESS_TOKEN 两种方式,供拉取私有仓库内容时进行身份认证。在服务端配置完成并成功运行后,开发者端的任务是将构建产物自动化地推送到 gh-pages 分支。由于 Gitea Actions 兼容 GitHub Actions 的语法和生态,我们可以直接利用现有的 Actions 插件。
以下是在 Gitea 仓库中实现自动打包并推送到 gh-pages 分支的标准 workflow 配置文件(保存路径:.gitea/workflows/deploy.yml):
1 | name: Deploy to gh-pages |
上述 YAML 文件中有几个针对 Gitea Actions 环境的必要配置,需要特别注意:
permissions: contents: write (写入权限声明)GITHUB_TOKEN 可能是只读权限。部署步骤需要向仓库的 gh-pages 分支执行 git push 操作,因此必须显式声明 contents: write 提升 Token 权限,否则会在部署阶段触发 HTTP 403 权限拒绝异常。github_token: ${{ secrets.GITHUB_TOKEN }} (免密认证)force_orphan: true (重置提交历史)gh-pages 分支创建一个无父节点的新提交(Orphan Commit),丢弃历史记录。静态资源分支通常只需要保留最新版本的产物,此举可避免 Git 仓库因累积大量构建产物历史(如无用的 Source Map)而导致存储体积急剧膨胀。完成全部配置后,整体的工程发布链路如下:
main 分支。npm run build 生成 dist 目录。actions-gh-pages 插件将 dist 目录作为根节点,强推至当前仓库的 gh-pages 分支。deployer 的 8080 端口。deployer 验证 Webhook 请求合法后,通过浅克隆拉取 gh-pages 分支内容,写入共享数据卷。pages-nginx 实时读取挂载目录的最新静态文件,外部通过泛域名即可访问最新发布的站点。此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。