跳到主要内容

Gitea Actions 适用于 Docusaurus

这是一个适用于 Docusaurus + Gitea Actions 的完整工作流,包含以下两步:

  1. 构建 Docusaurus:npm run build
  2. rsyncbuild/ 目录同步到你指定的远程服务器目录

示例:.gitea/workflows/deploy.yml

name: docusaurus-deploy

# 触发条件:推送到 main 分支时自动触发
on:
push:
branches: [main]

jobs:
deploy:
# 当前 Gitea Actions 仅支持 docker runner
runs-on: docker

steps:
# 第一步:检出当前仓库代码
- uses: actions/checkout@v3

# 第二步:设置 Node.js 环境
- uses: actions/setup-node@v3
with:
node-version: 18

# 第三步:安装依赖
- run: npm ci

# 第四步:构建 Docusaurus 静态网站
- run: npm run build

# 第五步:通过 rsync 将 build/ 目录同步到远程服务器
- name: 同步到远程服务器
env:
# 以下变量通过 Gitea Secrets 提供(仓库设置中添加)
SSH_USER: ${{ secrets.SSH_USER }} # SSH 用户名
SSH_HOST: ${{ secrets.SSH_HOST }} # SSH 服务器 IP 或域名
SSH_PORT: ${{ secrets.SSH_PORT }} # SSH 端口(默认 22)
SSH_PATH: ${{ secrets.SSH_PATH }} # 远程部署路径
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} # SSH 私钥
run: |
# 写入私钥到临时文件,并设置权限
echo "$SSH_PRIVATE_KEY" > /tmp/key && chmod 600 /tmp/key

# 执行 rsync 同步 build 目录
rsync -avz \
-e "ssh -i /tmp/key -p $SSH_PORT -o StrictHostKeyChecking=no" \
build/ $SSH_USER@$SSH_HOST:$SSH_PATH


你需要配置的 secret(Gitea 仓库设置里):

名称说明
SSH_USER远程服务器用户名
SSH_HOST远程服务器 IP 或域名
SSH_PORTSSH 端口,默认是 22
SSH_PATH远程部署目标路径,如 /var/www/docs
SSH_PRIVATE_KEY本地私钥(对应服务器公钥授权)

你可以通过如下方式生成专用的 SSH key:

ssh-keygen -t ed25519 -C "gitea-deploy" -f ~/.ssh/gitea_deploy

然后:

  • ~/.ssh/gitea_deploy.pub 内容添加到目标服务器的 ~/.ssh/authorized_keys
  • ~/.ssh/gitea_deploy 内容添加到 Gitea Secrets:SSH_PRIVATE_KEY

密钥是否会泄漏?

不会,只要你用 Gitea 的 Secrets 功能 来存放密钥,它是安全的,密钥内容不会泄漏到仓库。

✅ 安全做法(推荐)

使用 Gitea 的「仓库密钥/Secrets」,添加密钥信息后:

  • 不会保存在仓库代码里(不是 commit 上去的)
  • 在 Actions 执行时会以环境变量形式传给 runner
  • 在日志中也会自动隐藏(即使 echo $SSH_PRIVATE_KEY,日志会显示 ***

❌ 不安全做法(别这样)

  • 不要 把密钥写进 .yml 文件或上传到仓库文件(比如 .envdeploy.sh 这种)
  • 也不要写在 runechocat 命令里打印出来

如何添加 Secrets(Gitea 1.21+)

  1. 打开你的仓库 → SettingsSecrets
  2. 点击 New secret
  3. 填入名字(例如:SSH_PRIVATE_KEY)和值(你生成的私钥内容)
  4. 在工作流中用 ${{ secrets.XXX }} 调用它