缘起
一直想有个自己的地方,能随手写点东西。不想折腾服务器,也不想每年交钱,于是看中了 XinghuisamaBlogs 这个项目——毛玻璃风格、带后台管理、能一键部署到 Vercel。听起来很美好,实际做下来坑不少,记一笔,也给后来的人省点时间。
整体链路
先理清楚这套东西是怎么运转的:
- GitHub 私有仓库:存源码,
FGHBlogs - Vercel:监听仓库,代码一推上去就自动重新构建、发布
- 本地管理台:一个 Python + Next.js 的桌面程序,用来写文章、改配置
- 写作流程:本地改 → 推 GitHub → Vercel 自动上线
所以核心就是一句话:推代码,自动上线。管理台只是让写文章不用直接改文件。
踩过的坑
一、登录卡在 OAuth
第一次是网络问题。程序要访问 Google 的 oauth2.googleapis.com 换 token,直连超时。后来是账号需要额外验证(Google 对 AI 服务新增的要求)。
这类问题有个通用判断法:看报错里有没有具体的 IP 和错误类型。connectex: A connection attempt failed 是连不上;Further action is required 是账号问题。前者查网络,后者查账号。
二、npm install 装了 21 分钟
这一步最折磨人。日志里显示:
http fetch GET 200 https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz 638346ms
一个 638KB 的包下了 10 分钟,平均速度 1KB/s。
换国内镜像后有改善,但依然慢——瓶颈在网络上,不在源。最后是靠耐心等过去的。
教训:这种环境里装依赖,一定要有心理准备,别以为卡死了。判断死活的办法是看 node_modules 的目录体积有没有在涨。
三、启动脚本闪退
双击启动脚本,黑框一闪就没了。
原因藏在 .bat 文件里:
for /f "tokens=2 delims=." %%i in ('python --version') do set "py_major=%%i"
if %py_major% equ 3 (
...
)
Windows 批处理默认不做延迟展开,在同一对括号里刚赋值的变量读出来是空的。变量为空,if 判断就变成语法错误,窗口直接关闭。
绕开方式很简单:直接跑底层脚本,不走那个 .bat。
四、控制台黑屏
启动后窗口一片黑,什么都没有。
原因是这个控制台用了无边框窗口 + 深色背景,靠系统 WebView 渲染。在某些环境下 WebView 出不来,就只剩背景色。
解决思路:既然它本质是个网页应用,那就跳过桌面窗口,直接用浏览器打开。我把启动逻辑改成「只起前后端服务 + 调系统浏览器」,问题消失。
一些心得
1. 会看日志,问题就解决了一半
这次遇到的每个问题,答案都写在日志里。npm 的日志在 %LOCALAPPDATA%/npm-cache/_logs/,脚本的输出重定向到文件就能看。与其反复点按钮,不如去看它到底说了什么。
2. 网络环境决定了工具的选择
同一个操作,在不同网络下成本可能差几十倍。镜像源、超时时间、重试策略,这些不是可选项,是必需品。
3. 出问题先问「这是什么类型的错误」
我习惯把错误分三类:
- 连不上(超时、拒绝连接)→ 查网络、查代理
- 被拒绝(401、402、403)→ 查凭据、查余额、查权限
- 自己崩了(语法错误、找不到模块)→ 查代码、查环境
分类之后,排查方向就清楚了,不会漫无目的地乱试。
4. 改配置要分清「本地」和「线上」
中途我在管理台里填了个本地文件路径当背景图,本地预览一切正常,线上却是坏的——因为 file:///C:/... 这种路径只有我自己的电脑能访问。
凡是给网站用的资源,路径必须是网站自己能访问到的。最稳的做法是把图片放进项目里一起部署。
最后
站搭好了,后面就慢慢写吧。
搭站只是开始,写才是目的。希望这个站能一直开着,也希望这里的文字对得起打开它的人。
