博客与 Wiki 私有化迁移
本文记录将个人博客从 GitHub Pages 迁移到自托管服务器,以及将 wiki 从 GitHub 推送到私有 Git 服务器的完整过程。
前置:服务器已就绪 → 从零购买并配置云服务器
为什么从 GitHub 迁走
GitHub Pages 的问题
- 仓库必须公开——GitHub Pages 的免费方案要求 repo 为 public(除非付费)
- 构建由 GitHub 控制——你无法自定义部署流程
- 国内访问慢——GitHub Pages 服务器在美国,国内加载可能 3-5 秒
- 域名受制——必须 CNAME 到
xxx.github.io
自己服务器的好处
- 博客源码可以私有
- 国内访问快(广州服务器,全国 <50ms)
- 完全控制部署流程
- Wiki 推送不经过第三方
博客迁移(Nginx 部分)
安装 Nginx
sudo apt install -y nginx
sudo systemctl enable nginx
创建站点配置
# 创建博客目录
sudo mkdir -p /var/www/blog
sudo chown ops:ops /var/www/blog
Nginx 配置文件 /etc/nginx/sites-available/blog:
server {
listen 80;
server_name www.lyrical-wander.cn lyrical-wander.cn;
root /var/www/blog;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# Let's Encrypt 验证用
location ^~ /.well-known/acme-challenge/ {
root /var/www/blog;
}
}
启用和测试:
sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default # 删除默认站点
sudo nginx -t # 检查配置语法
sudo systemctl reload nginx
🕳 Nginx server_name 匹配逻辑:
当你
curl http://localhost时,Nginx 会找server_name包含localhost的 server 块。我们的配置只匹配域名,所以访问 localhost 会回退到默认页面。这是正常的——用域名访问就会匹配。
开放端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
ICP 备案(进行中)
国内服务器需要 ICP 备案。备案流程:
| 步骤 | 耗时 |
|---|---|
| 腾讯云在线提交 | 30 分钟 |
| 腾讯云初审 | 1-2 天 |
| 广东管局审核 | 7-15 个工作日 |
备案期间网站不能用域名访问——在腾讯云 beian.cloud.tencent.com 在线提交即可,全程不用跑任何地方。
🕳 常见被退回原因:
- 网站名称含「博客」二字(建议用「个人技术分享」)
- 身份证照片模糊
- 手机号与身份证归属地不一致
备案通过后待完成
- [ ] DNS 改 A 记录:
www.lyrical-wander.cn→ 服务器 IP - [ ] Let's Encrypt 申请 SSL 证书(
certbot --nginx) - [ ] 改 GitHub Actions:构建后
rsync到服务器,不再推 GitHub Pages
Wiki 私有化(Git bare repos)
创建 bare repo
Bare repo 是「没有工作目录的 Git 仓库」——只存历史记录,不能直接编辑文件。专门用来做远程推送目标。
sudo mkdir -p /srv/git
sudo chown ops:ops /srv/git
cd /srv/git
git init --bare work-wiki.git
git init --bare study-wiki.git
切换 remote
在本地 wiki 目录里:
cd ~/work-wiki
git remote set-url origin ops@服务器IP:/srv/git/work-wiki.git
git push origin master
cd ~/study-wiki
git remote set-url origin ops@服务器IP:/srv/git/study-wiki.git
git push origin master
🕳
git push origin main报src refspec main does not match any?你的默认分支可能是
master而不是main。用git branch查看,然后 push 正确的分支名。
验证
ssh ops@服务器IP
cd /srv/git/work-wiki.git
git log --oneline -3 # 应该看到提交记录
Obsidian 如何配合
Obsidian vault 本质上就是一个 Git 仓库目录。改了 remote 后 Obsidian 编辑体验完全不变——变化的只是 git push 的目的地。
在你的电脑上切换 remote
⚠️ 这一步必须在你运行 Obsidian 的电脑上执行,不只是服务器端。
打开终端:
# work-wiki
cd ~/work-wiki # 你的 Obsidian vault 目录
git remote set-url origin ops@139.199.70.119:/srv/git/work-wiki.git
git remote -v # 确认 remote 已改
# study-wiki
cd ~/study-wiki
git remote set-url origin ops@139.199.70.119:/srv/git/study-wiki.git
git remote -v
| 操作 | 改之前 | 改之后 |
|---|---|---|
git push |
→ GitHub | → 你的服务器 |
git pull |
← GitHub | ← 你的服务器 |
| Obsidian 编辑 | 不变 | 不变 |
🕳 需要先配 SSH 免密登录。 如果没配,每次
git push都要输密码,很烦。ssh-keygen -t ed25519 # 一路 Enter,已有则跳过 ssh-copy-id ops@139.199.70.119 # 输一次密码
日常使用流程
- Obsidian 里照常编辑笔记
Ctrl+S保存(或自动保存)- 终端里:
cd ~/work-wiki git add -A git commit -m "今日笔记" git push - 笔记自动推到你自己的服务器
🕳 如果 push 报
src refspec main does not match any: 你的仓库默认分支是master不是main。用git branch查看当前分支名,然后git push origin master(或你的分支名)。一次配置以后记住即可:git config --global init.defaultBranch main # 可选:统一改成 main
架构总览
你的电脑 (Obsidian)
│ git push
▼
私有 Git 服务器 (/srv/git/*.git)
│
├──→ Hermes Agent 可 clone 处理
│
▼
你的手机 (微信)
│ 发消息
▼
Hermes Gateway (cron @reboot)
│
├──→ DeepSeek API (推理)
│
▼
微信回复
GitHub Actions (构建 Hugo)
│ rsync (备案后)
▼
Nginx (/var/www/blog)
│
▼
www.lyrical-wander.cn
验证清单
- [ ] Nginx 运行中:
sudo systemctl status nginx - [ ]
/srv/git/下有两个 bare repo - [ ] 本地 wiki
git push成功 - [ ] ICP 备案已提交
- [ ] cron @reboot 配置存在
相关阅读:
- 服务器配置 → 从零购买并配置云服务器
- Hermes 安装 → Hermes Agent 安装与踩坑实录
- 微信 Gateway → 微信 Gateway 接入 Hermes