将托管在CodeBerg上的博客使用CI在Vercel上部署博客
Outline

将托管在CodeBerg上的博客使用CI在Vercel上部署博客

󰈈 10min 2026/4/1󰚰 2026/4/1

近期GitHub宣布要拿项目去练ai了。虽然我对这种行为也不是很抵触,但巨硬默认开启这个选项,关闭说明写的又不明不白。我打算搬家搬去CodeBerg。今天研究了一天跑通了CodeBerg + Forgejo Runner。记录下。

近期GitHub宣布要拿项目去练ai了。虽然我对这种行为也不是很抵触,但巨硬默认开启这个选项,关闭说明写的又不明不白。我打算搬家搬去CodeBerg。今天研究了一天跑通了CodeBerg + Forgejo Runner。记录下。

非常遗憾,Vercel并不支持CodeBerg,所以我们无法像在GitHub上那样推送完就傻瓜式部署了。 不过我们可以通过Vercel cli手动将代码推送到Vercel上,再在CI中使用改cli,就可以和以前一样自动部署。

首先,我们需要去申请一个Vercel Tokenvercel cli的指令都需要它来执行。

Vercel
avatar你可以在这里申请Vercel Token

申请完Vercel Token后,我们就可以在本地安装Vercel cli了。安装方法很简单,直接使用npm install -g vercel安装即可:

安装完后,我们可以一下命令将代码推送到预览环境:

Shell
vercel --token=你的Token

但在CI中,我们是不可能手动确认项目的,所以我们需要加上--yes。 也不想占用宝贵的CI时间,来等待Vercel编译完成,所以我们还需要加上--no-wait

Shell
vercel --yes --no-wait --token=你的Token

WARNING

你需要确保你的项目文件夹名称和你在Vercel上创建的项目名称一致,否则会部署失败。可能需要手动编写vercel.json来指定项目名称。

如果没有问题的话,我们就可以在CI中使用这个命令了。当然,在CI中我们需要加上--prod参数来部署到生产环境。最终的命令长这个样子。

Shell
vercel --no-wait --prod --yes --token=你的Token

相对于GitHubCodeBerg支持自托管运行环境,但并没有内置的运行环境,所谓的官方运行环境也是官方自己部署的。 CodeBerg支持Forgejo RunnerWoodpecker两种CI工具。 要使用Woodpecker需要像官方发出申请,而Forgejo Runner则有三种免费的运行环境。 我并没有怎么研究Woodpecker,这里主要讲Forgejo Runner

CodeBerg是一个非营利组织,主要为了支持开源软件。如果你的软件是闭源的,你可能就不符合CodeBerg的CI使用条件了,需要自行部署了。

目前CodeBerg提供了三种无需申请的运行环境:

名称CPU内存时间限制
codeberg-tiny12G2分钟
codeberg-small24G5分钟
codeberg-medium48G10分钟

架构都是X86的,环境应该是Linux。可以满足博客打包上传了。

如果你的任务不是很紧急,可以加上-lazy后缀,如codeberg-tiny-lazy,它会在1天内的空闲时间执行,减轻服务器的压力。

官方原文如下:

meta
2026/1/30
 47 16 3
Forgejo Actions @ Codeberg
avatar
Information and discussions around hosted Forgejo Actions at Codeberg
 47 16 3

Forgejo Runner的配置文件在.forgejo/workflows目录下,格式和GitHub Actions的配置文件基本一样,都是YAML格式的。

下面是我的博客部署到Vercel的CI配置文件:

YAML
name: Deploy Nuxt4 to Vercel

on:
  push:
    branches:
      - v2
  workflow_dispatch:

jobs:
  deploy:
    runs-on: codeberg-tiny
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Setup Node.js environment
        uses: pnpm/action-setup@v5

      - name: Install Vercel CLI
        run: pnpm i vercel

      - name: Push To Vercel
        run: pnpx vercel --no-wait --prod --yes --token=${{ secrets.VERCEL_TOKEN }}

需要注意的是,runs-on填写的是codeberg-tinycodeberg-smallcodeberg-medium等运行环境名称。如果你有自部署的,也可以填写自部署的环境名称。

我采用了Docker来配合Forgejo Runner使用。但怀疑是我科学上网环境变量配置的有问题,导致网速奇差无比,基本上不能使用。因此我并没有在正文中介绍它。

Forgejo Runner的文档说的十分详细。但有人和我一样英语不好,或者有些大聪明根本不看文档...我还是简单介绍一下部署方法吧。

Forgejo
avatarForgejo Runner安装指导

我是搭配Docker使用的,所以要先安装Docker。至于Docker如何安装,这里不展开赘述。

在科学上网+root环境下执行以下命令,完成Forgejo Runner的下载和验证:

Shell
export ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
export RUNNER_VERSION=$(curl -X 'GET' https://data.forgejo.org/api/v1/repos/forgejo/runner/releases/latest | jq .name -r | cut -c 2-)
export FORGEJO_URL="https://code.forgejo.org/forgejo/runner/releases/download/v${RUNNER_VERSION}/forgejo-runner-${RUNNER_VERSION}-linux-${ARCH}"
wget -O forgejo-runner ${FORGEJO_URL} || curl -o forgejo-runner ${FORGEJO_URL}
chmod +x forgejo-runner
wget -O forgejo-runner.asc ${FORGEJO_URL}.asc || curl -o forgejo-runner.asc ${FORGEJO_URL}.asc
gpg --keyserver hkps://keys.openpgp.org --recv EB114F5E6C0DC2BCDD183550A4B61A2DC5923710
gpg --verify forgejo-runner.asc forgejo-runner && echo "✓ Verified" || echo "✗ Failed"

接着将forgejo-runner移动到软件目录下,并设置相应权限:

Shell
cp forgejo-runner /usr/local/bin/forgejo-runner
chmod 755 /usr/local/bin/forgejo-runner

完成上述操作后,你可以输入forgejo-runner -v来验证安装是否成功,正确的话它会输出版本号。

裸root运行是十分不安全的,官方推荐创建一个runner用户来运行Forgejo Runner,官方的systemd也是以runner用户身份来运行的。 所以我们也来创建一个runner用户:

Shell
useradd --create-home runner
usermod -aG docker runner

完成以下操作后,我们通过su runner切换到runner用户,并切换到~目录,来配置环境。

我们通过下面的步骤来创建默认配置文件:

Shell
forgejo-runner generate-config > config.yml

配置文件的注释很详细,请根据自己的需求进行修改

WARNING

我使用时,配置文件最下面的connections不需要填写,后面有专门的命令来注册链接。

完成这之后,我们可以通过下面命令来启动Forgejo Runner了。

Shell
forgejo-runner daemon -c ./runner-config.yml

它在启动后会输出Starting runner daemon,之后马上会因为没有连接而报错退出。

要连接到CodeBerg,我们首先拿到一个Token。在设置 -> Actions -> 运行器 -> 创建新运行器 可以找到你的Token

获取Token

之后执行下面的命令来添加连接:

Shell
forgejo-runner register

接着按要求填入Git托管平台url,token就可以完成注册。

这时再执行下面的命令,则不会收到报错,并且可以在CodeBerg上看到你的运行器。

如果上述步骤没有问题的话,可以将 官方的systemd单元格文件 复制到/etc/systemd/system/forgejo-runner.service,然后systemctl enable --now forgejo-runner来启动了。不要忘记看日志它是否正常工作。

CodeBerg有全中文,不用再和GitHub一样啃生肉了。 你都做程序员了,还看不懂English? 而且CodeBerg可以为你的项目设置头像,之前一直都觉得项目都顶着一个用户的头像...非常奇怪。

CodeBerg支持从GitHub快速迁移,输入url就能进行克隆,非常方便。项目主题,issue什么的一个都不缺。 同时CodeBerg的API是完全没有任何速率限制的,不用像GitHub一样要自行申请一个API Token

CodeBerg
avatarCodeBerg API文档

但在Actions上,CodeBerg相对于GitHub还是非常脆弱的。 上文讲述的官方Forgejo Runner也才刚上线一年左右。之前的环境都要向官方申请才能使用CI。 同时codeberg-medium也才10分钟的运行时长,我的Stapxs-QQ-Lite-X编译Electron平均时长都在10分钟以上,根本不可能够用。 而且仅有疑似Linux的环境,相对于能同时提供WinWin ArmMacOSGitHub而言,十分孱弱了。 如果真的想承担软件编译,还是自行部署吧。

正在屠戮GitHub的巨硬

GitHub被巨硬收购后,已经变得越来越糟糕了。之前GitHub的拿它的新UI乱推Copilot已经搞得我想写个新主页了。

正在屠戮GitHub的巨硬

作为一个Git托管平台GitHub主页的一半篇幅是AI聊天框,另一半是你最近的IssueFork。 我是无法理解,你收不到回应通知,光点开Issue看看就有人搭理你了吗?将用户已经知道的信息放在主页上,完全就是在浪费空间。 更加糟糕的是,在IssueFork上,是由Copilot的处理按钮的。 前段时间matplotlibAI乱发Fork还攻击开发者,闹得沸沸扬扬的。过度往开源社区里塞AI,让AI占领IssueFork,并非是正确的事情。

将AI聊天框和不知有何意义的IssueFork拼合在一起,就得到了现在的GitHub主页了。不知道的看到这占大头的聊天框还以为是个AI聊天平台了。

现在GitHub又要拿开源项目乱练AI。往日最大的开源社区——GitHub正在转变为巨硬手下售卖Token的打工人。真是悲哀——!

INFO

本文章采用     CC BY-NC-SA 4.0 协议进行许可。如需转载,请注明出处。
评论
0 /1000
20a6771
Post.vue
utf-8
TOP
1:1