用自己的 Forgejo Runner 在 Codeberg 上跑 CI/CD

用自己的 Forgejo Runner 在 Codeberg 上跑 CI/CD

五月 22, 2026 codeberg forgejo ci-cd docker self-hosting github-alternative devops automation

为什么自己跑 CI/CD?

用过 Codeberg 的朋友应该都知道,它是目前 GitHub 之外一个很不错的替代选择。平台开源、注重隐私,还由非营利组织维护。不过因为资源有限,Codeberg 提供的共享 runner 经常要排队,速度和稳定性都不太理想。

那怎么办?自己架一个 Forgejo runner 就行了。好处是 runner 是主动往外连 Codeberg 的,所以不管你用 VPS、家里服务器还是笔记本,都能直接跑,不用折腾端口映射。

先搞懂架构

简单来说,Forgejo runner 就是一个干活的,它负责接收 Codeberg 发来的任务,然后执行。考虑到安全,我们不会让 runner 直接碰主机上的 Docker,而是用 Docker-in-Docker(DinD)把它隔离开。这样 runner 自己起容器跑任务,不会影响主机环境。

用 Docker Compose 部署

整个部署只需要两个容器:

version: '3.8'

services:
  docker-in-docker:
    image: docker:dind
    container_name: 'docker_dind'
    privileged: 'true'
    command: ['dockerd', '-H', 'tcp://0.0.0.0:2375', '--tls=false']
    restart: 'unless-stopped'

  runner:
    image: 'data.forgejo.org/forgejo/runner:12'
    links:
      - docker-in-docker
    depends_on:
      docker-in-docker:
        condition: service_started
    container_name: 'runner'
    environment:
      DOCKER_HOST: tcp://docker-in-docker:2375
    user: 1001:1001
    volumes:
      - ./data:/data
    restart: 'unless-stopped'
    command: 'forgejo-runner daemon --config runner-config.yml'

一个容器提供隔离的 Docker 环境,另一个就是实际跑任务的 runner。

准备系统环境

先建好目录结构,建议把配置放在 /opt/forgejo-runner

cd /opt/forgejo-runner
mkdir -p data/.cache
chown -R 1001:1001 data
chmod 775 data/.cache
chmod g+s data/.cache

然后生成默认配置文件:

sudo sh -c 'docker run --rm data.forgejo.org/forgejo/runner:12 forgejo-runner generate-config > data/runner-config.yml'

在 Codeberg 上注册 runner

登录 Codeberg,进入账号或组织设置,找到 Actions → Runners,点击“Create new runner”。给 runner 起个名字,填上描述。

系统会生成 UUID 和 Token,记得马上抄下来,这两个信息之后不会再显示。

Codeberg 还会直接给你一段 YAML 配置代码,直接复制就行。

配置 Labels 和并发数

打开 runner-config.yml,主要做两件事:

1. 填认证信息
把 Codeberg 给的 UUID 和 Token 填到 server 部分。

2. 设置 Labels
Labels 决定 workflow 怎么找到你的 runner,格式是 [Workflow Label]:[Method]://[环境]

比如:

labels: 
  - 'ubuntu-latest:docker://node:20-bookworm'
  - 'ubuntu-22.04:docker://node:20-bookworm'
  - 'ubuntu-24.04:docker://node:22-bookworm'

当 workflow 写 runs-on: ubuntu-latest 时,Codeberg 就会把任务分配给这个 runner。

可选:调整并发
默认 runner 一次只能跑一个任务。如果你机器配置不错,可以把 capacity 改成 4,让它同时处理多个任务。

启动运行

配置好后,直接启动:

docker-compose up -d

用日志查看是否连接成功:

docker-compose logs -f runner

看到 runner 注册成功的提示,就说明一切正常了。之后你仓库里的 workflow,只要指定了你的 Labels,就会跑到你自己的 runner 上执行。

自己跑的好处

  • 任务直接执行,不用排队
  • 完全控制运行环境和依赖
  • 省钱,还能减轻 Codeberg 的负担
  • 日志和数据留在自己手上,更放心
  • 可以根据需求随时扩容

总结

自己搭 Forgejo runner 其实挺简单的,花一个下午就能搞定,而且效果立竿见影。如果你已经在用 Codeberg,这几乎是下一步的自然选择。如果还在 GitHub 纠结要不要换,CI/CD 的速度和稳定性往往是决定因素,而现在你完全可以自己掌控。

Read in other languages:

RU BG EL CS UZ TR SV FI RO PT PL NB NL HU IT FR ES DE DA EN