← All field notes

GlobalPilot 建站复盘:从个人品牌网站到本地 AI 聊天系统

复盘 GlobalPilot 从 Next.js 网站、Obsidian 发布流、VM 部署,到 Mac mini Ollama 与 Telegram 线索通知的完整搭建过程。

7 min read

GlobalPilot 建站复盘:从个人品牌网站到本地 AI 聊天系统

GlobalPilot 一开始不是一个“大项目”,只是一个很简单的目标:搭一个可以长期运营的个人品牌网站。

但真正做下来以后,它逐渐变成了一套完整的小型数字基础设施:

  • 有首页、Blog、服务页和 AI Chat
  • 可以通过 Obsidian 写文章
  • 推送到 GitHub 后自动部署到 VM
  • 用 Nginx Proxy Manager 处理 HTTPS
  • 用 Mac mini 上的 Ollama + Qwen 提供本地 AI 能力
  • 用 Telegram 接收聊天线索和系统通知

这篇文章复盘整个搭建过程,也记录我为什么选择这套架构。

为什么不用复杂 CMS

最开始的问题是:Blog 应该怎么发布?

我不想为了写文章打开一个复杂后台,也不想把内容锁在 Notion、微信公众号或某个 SaaS 平台里。最理想的工作流应该是:

Obsidian 写文章
↓
Commit-and-sync
↓
GitHub
↓
网站自动更新

所以内容层选择 Markdown,文章放在:

content/blog

每篇文章就是一个 .md 文件,带上 frontmatter:

---
title: 文章标题
date: 2026-07-04
description: 一句话摘要
tags: [AI, Website]
---

这个选择的好处是简单、可迁移、可版本管理。它不像传统 CMS 那样有很多后台概念,也不像纯社交平台那样难以沉淀搜索资产。

网站技术栈

网站本体使用 Next.js。原因很直接:

  • 适合做静态内容和动态 API
  • Blog、服务页、RSS、sitemap 都容易处理
  • /chat 可以直接接后端 API
  • Docker 部署比较成熟

最终网站包含这些核心页面:

/
/blog
/blog/[slug]
/services
/services/ai-website-builder
/services/ai-automation
/services/global-growth
/chat
/feed.xml
/sitemap.xml

首页负责建立品牌印象,Blog 负责长期 SEO,Services 负责解释服务方向,Chat 负责接住即时咨询。

为什么选择 VM + Nginx Proxy Manager

一开始也考虑过 Vercel。Vercel 对 Next.js 很友好,但这个项目有一个特殊点:AI 模型运行在本地 Mac mini 上。

如果网站放在 Vercel,它无法直接访问家里或办公室局域网里的 Ollama,需要额外做公网 tunnel 和权限保护。相比之下,我已经有 VM 和 Nginx Proxy Manager,所以最终选择:

访客
↓
globalpilot.attodigitalhk.com
↓
Nginx Proxy Manager
↓
VM:3000
↓
Next.js app

VM 上只运行网站容器,HTTPS 和反向代理交给 Nginx Proxy Manager。这样结构更贴合已有基础设施,也避免在项目里重复跑 Caddy。

自动部署:从 GitHub 推送到 VM 主动拉取

理想状态是 GitHub Actions 直接 SSH 到 VM 部署。但实际环境里,SSH 是通过 FRP 暴露的,MacBook 可以连接,GitHub-hosted runner 却不一定能稳定访问。

所以部署方案改成 VM 主动拉取:

GitHub main 更新
↓
VM systemd timer 每 5 分钟检查
↓
发现新提交
↓
git pull
↓
docker compose build
↓
健康检查通过

这个方式更适合 FRP/NPM 架构,因为不需要 GitHub 从外部连进 VM。VM 自己能访问 GitHub,就可以完成部署。

目前自动部署频率设为 5 分钟。它不会每次都重建,只有发现远程提交变化时才会执行部署。

本地 AI:Mac mini + Ollama + Qwen

AI Chat 没有接 OpenAI API,而是接了 Mac mini 上的 Ollama。

当前模型是:

qwen3:8b

连接链路是:

网站 /chat
↓
VM Next.js API
↓
Tailscale
↓
Mac mini Ollama
↓
Qwen 回复

Ollama 通过 macOS launchd 常驻运行,监听:

0.0.0.0:11434

但这个端口没有暴露到公网,只通过 Tailscale 给 VM 访问。这样既能利用本地硬件,也避免把 Ollama 直接暴露到互联网。

Telegram 作为后台接线索

AI Chat 的每轮对话会同步到 Telegram。

后来又加了一层线索判断:

  • 如果用户留下邮箱、Telegram、微信或电话,会自动识别
  • 如果用户提到预算、报价、合作、咨询,会提高线索分数
  • Telegram 通知会标记 HOT LEADWARM LEAD 或普通 CHAT

这样 Telegram 不只是“消息备份”,而是一个轻量 CRM 入口。

对我来说,最有价值的是:访客可以先跟 AI 聊,AI 帮他整理问题;当对方真的有意向时,我在 Telegram 后台看到的是一段更完整的上下文。

监控与稳定性

网站上线后,最怕的不是功能少,而是不知道它什么时候坏。

所以 VM 上加了两个 systemd timer:

globalpilot-auto-deploy.timer
globalpilot-health-check.timer

前者负责自动部署,后者负责检查本地 app health endpoint:

http://127.0.0.1:3000/api/health

如果检查失败,会通过 Telegram 发告警;恢复后也会发恢复通知。

公网域名监控更适合用 UptimeRobot 或 Better Stack 这类外部监控工具,因为 VM 自己访问自己的公网域名时,可能遇到 Nginx Proxy Manager 或网络回环限制,容易误报。

这套架构适合谁

这套方案不是给所有人用的。如果只是想最快上线一个静态网站,Vercel 仍然是非常好的选择。

但如果你同时满足这些条件,它就很有吸引力:

  • 已经有 VM 或 VPS
  • 想用 Obsidian 管理内容
  • 想保留 Markdown 和 Git 历史
  • 想接本地模型,而不是完全依赖云 API
  • 想用 Telegram 作为轻量后台
  • 希望网站、内容、AI、自动化在一套系统里协同

GlobalPilot 本身就是这套方法的第一个案例。

最大的收获

这次搭建让我重新确认了一件事:

网站不是页面集合,而是一套持续运行的业务系统。

它不只是“看起来专业”,还要能写内容、能发布、能被搜索、能接咨询、能通知、能监控、能恢复。

真正有价值的不是某个单点技术,而是这些环节连起来以后,形成一个低成本、可持续、自己可控的工作流。

下一步,我会继续把 GlobalPilot 当作一个公开样板:一边运营,一边把 AI 网站、自动化和全球增长的方法写下来。

END NOTE

Keep building.

Read the next idea →