Gitea Webhook 自动部署:零依赖实现 Astro 博客多端同步发布

简介: 该工具实现Gitea触发的Astro博客自动构建部署:推送代码后,Webhook服务自动拉取、安装依赖、构建并更新Nginx站点。零依赖、异步响应、systemd守护,彻底告别SSH手动操作。(239字)

之前我每次写完文章都要重复这些流程:SSH 登录服务器 -> 手动拉取代码 -> 等待 pnpm install 安装依赖 -> 执行 pnpm build 构建博客 -> 手动复制构建产物到 Nginx 目录。

在家里和公司两地办公的时候,这种重复性的机械劳动让人崩溃。


解决方案

项目地址https://github.com/moewah/gitea-astro-webhook

在多个地方(家里、公司)推送代码后,服务器上的 Webhook 服务会自动触发构建流程,拉取最新代码、安装依赖、构建博客,全程无需人工干预。

核心特点:

  • 零依赖: 仅使用 Node.js 原生模块,无需 npm install
  • 异步构建: 立即响应 Gitea,不超时
  • systemd 管理: 开机自启,崩溃自动重启

部署步骤

在部署之前,这里我先假设已经在服务器部署了 Gitea 个人代码托管服务,并在此服务器中有一个 Astro 等静态博客,下面的操作指引帮助你实现从家里及公司的电脑中随时随地的发布管理文章。

1. 克隆项目到服务器

Terminal window

# SSH 登录服务器

ssh root@your-server

cd /opt

git clone https://github.com/moewah/gitea-astro-webhook.git

2. 配置环境变量

Terminal window

# 进入服务器项目目录cd /opt/gitea-astro-webhook
# 复制配置文件cp .env.example .env
# 编辑配置nano .env

配置示例

Terminal window显示更多

# Webhook 服务端口PORT=28080
# Gitea Webhook 密钥WEBHOOK_SECRET=your-webhook-secret-here
# 博客项目路径BLOG_PATH=/home/wwwroot/blog
# Git 仓库地址(SSH 格式)GIT_REPO=ssh://git@git.example.com:222/username/blog.git
# 监听的 Git 分支GIT_BRANCH=main
# 日志级别:info | errorLOG_LEVEL=info

显示更多

生成密钥

Terminal window

openssl rand -hex 32

将生成的密钥粘贴到 WEBHOOK_SECRET

3. 配置 systemd 服务

Terminal window

# 修改服务文件中的路径

nano gitea-astro-webhook.service

将以下三个路径改为实际路径:

  • WorkingDirectory=/opt/gitea-astro-webhook
  • ExecStart=/usr/bin/node /opt/gitea-astro-webhook/webhook.js
  • EnvironmentFile=/opt/gitea-astro-webhook/.env

Terminal window

# 安装服务sudo cp gitea-astro-webhook.service /etc/systemd/system/
# 重新加载 systemdsudo systemctl daemon-reload
# 启动服务sudo systemctl start gitea-astro-webhook
# 设置开机自启sudo systemctl enable gitea-astro-webhook
# 查看服务状态sudo systemctl status gitea-astro-webhook

4. 配置 Nginx 反向代理

Terminal window

# 编辑你的 Nginx 配置文件

nano /etc/nginx/conf.d/blog.example.com.conf

添加以下配置:

location /webhook {    proxy_pass http://127.0.0.1:28080/webhook;
    # 传递必要的请求头    proxy_pass_request_headers on;    proxy_set_header Host $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_set_header X-Forwarded-Proto $scheme;
    # 传递 Gitea 签名头    proxy_set_header X-Gitea-Signature $http_x_gitea_signature;    proxy_set_header X-Gitea-Event $http_x_gitea_event;
    # 增加超时时间    proxy_connect_timeout 600s;    proxy_send_timeout 600s;    proxy_read_timeout 600s;
    # 禁用缓冲    proxy_buffering off;}

显示更多

Terminal window

# 测试并重启 Nginx

sudo nginx -t

sudo systemctl restart nginx

5. 测试服务

Terminal window

# 健康检查curl http://localhost:28080/health
# 通过 Nginx 测试 Webhook 端点curl https://blog.example.com/webhook
# 查看日志sudo journalctl -u gitea-astro-webhook -f

6. 配置 Gitea Webhook

在 Gitea 中:

  1. 打开仓库 → 设置Webhooks
  2. 添加 Webhook:
    • URLhttps://blog.example.com/webhook
    • Content Typeapplication/json
    • Secret:粘贴 .env 中的 WEBHOOK_SECRET
    • Events:Push Events
    • Branch: main

验证部署

在本地电脑推送测试代码:

如果是 Astro,注意测试时上传的文章 Frontmatter 属性要符合规范要求,Astro 对这一块校验很严格。

Terminal window

cd /path/to/your/blog

echo "test $(date)" > test.md

git add test.md

git commit -m "test: 测试自动部署"

git push origin main

在服务器查看日志:

Terminal window

sudo journalctl -u gitea-astro-webhook -f

故障排查

  1. 签名验证失败:检查 Gitea 和 .env 中的 WEBHOOK_SECRET 是否完全一致。
  2. Git 拉取失败:测试 SSH 连接 ssh -T -p 222 git@git.example.com
  3. 服务无法启动:检查 Node.js 版本(需要 >= 18.0.0),手动启动测试 node webhook.js

扩展阅读

也许刚开始接触 Git 命令有点懵 —— 这一大堆命令要记到什么时候?但其实,你只需要掌握几个基础操作就完全够用了。我整理了一份 超实用的👉 《Git 常用命令速查与使用详解》

一旦你上手了,就会真香 —— Git 真的超级顺手,commit、push、pull 这几个命令敲多了,根本不用过脑子就完成了。

而且,最骚的来了:当你把这个流程调通之后,你完全可以自己写个 SKILL 交给 OpenClaw 来帮你自动发布内容。想想就很美对吧?

目录
相关文章
|
4月前
|
机器学习/深度学习 人工智能 运维
8 个提问技巧,让 AI 问答质量翻几倍
本文分享8个提升AI问答质量的实用技巧:让AI先提问、设定超具体角色、明确受众、展示思考过程、自己开头续写、提供背景信息、多角度求解、反问AI如何提问。核心在于减少AI猜测,用清晰约束换来精准输出——不是AI变聪明了,而是你问得更准了。(239字)
|
4月前
|
前端开发 网络安全
tmux 终端效率提升 300% 的实战指南
本文手把手教你从零掌握tmux:解决多终端切换痛点,详解安装配置、鼠标支持、vi模式、核心快捷键(Ctrl+a+c/n/p/"/%/o等),并提供可复用的自动化脚本,助你1个终端高效管理多个项目,远程断连不丢工作,效率提升300%!
|
4月前
|
人工智能 机器人 网络安全
使用 Lume 在 macOS 虚拟机中隔离运行 OpenClaw/Moltbot:完整部署指南
OpenClaw(龙虾)是开源本地AI智能体,可7×24小时在你设备上自主执行任务。支持微信/飞书/Telegram等50+渠道,具备持久记忆、网页浏览、文件操作与自我扩展能力,数据全留本地,隐私可控。(239字)
819 7
使用 Lume 在 macOS 虚拟机中隔离运行 OpenClaw/Moltbot:完整部署指南
|
4月前
|
Linux 数据安全/隐私保护 iOS开发
为知笔记Docker私有部署全流程教程
本文详解为知笔记Docker私有部署全流程:从Docker安装、数据目录创建、容器启动到浏览器访问,涵盖默认账号密码、端口配置及更新脚本编写。支持多平台,5账号内免费,适合追求沉浸式UI体验的用户自建笔记服务。(239字)
622 5
为知笔记Docker私有部署全流程教程
|
4月前
|
存储 搜索推荐 应用服务中间件
Searx自建搜索平台全攻略:私有化部署实战指南
Searx是开源免费的元搜索引擎,聚合Google、Bing等70+站点结果,支持视频/图片/磁力搜索;不追踪、不存档用户数据,中文友好,一键部署便捷,适合替代受限搜索引擎。
326 1
Searx自建搜索平台全攻略:私有化部署实战指南
|
4月前
|
安全 数据处理 文件存储
从断供到自救:如何备份MinIO多架构Docker镜像
MinIO官方停供预编译Docker镜像,跨架构部署面临挑战。本文详解如何自主备份amd64/arm64双架构MinIO镜像,含打标、推送、清单创建四步实操,并提供已打包的多架构镜像直拉方案。(239字)
433 6
|
4月前
|
调度 算法框架/工具
Mac mini M4 性能压榨:Flux.dev 与 Z-image 实测组合
本文实测Mac mini M4(24G统一内存)下Flux.dev与Z-image大模型的最优采样组合:Flux推荐Euler+Beta(25步/Guidance 3.5),兼顾速度与画质;Z-image首选euler_ancestral+Beta(2–8步/CFG 1.0),激发多样性。附内存优化、CFG避坑与步数阈值建议,助你在有限资源下榨干M4性能。(239字)
695 6
|
4月前
|
安全 开发工具 git
Git 奇招:无缝接轨远程分支,解锁未合并PR的新特性!
本文手把手教你如何优雅体验开源项目中尚未合并的PR功能:从克隆原仓库、添加fork远程源、获取分支,到创建安全分支、合并并解决冲突。8步清晰流程+避坑提示,助你零基础快速上手,安全尝鲜最新特性!
258 5
|
4月前
|
缓存 JavaScript 安全
Node.js 和 NPM 更新到最新版本的完整指南
本文提供Node.js与NPM安全、高效更新的完整指南:涵盖NVM、官方安装包及各系统包管理器(Homebrew、NodeSource、nvm-windows)操作步骤,强调更新新功能、修复漏洞、提升兼容性,并提醒备份、本地测试等最佳实践。(239字)
9778 3