将服务器迁移到阿里云
最开始博客是部署在 Vercel 上的。当时觉得 Vercel 部署方便,且免费额度对于博客来说绰绰有余。但随着我对博客的不断折腾,Vercel 的限制愈发明显,这部分后文细说。
首先,最初的思路是通过 GitHub 和 Vercel 的联动实现自动部署。每次我向 GitHub 提交代码后,Vercel 会自动检测更新并部署。这意味着我在本地写好文章后,必须走一遍 GitHub 的提交流程,再等待 Vercel 部署完成。虽然整个过程只需一两分钟,但这部分体验其实还可以接受。
接着,我开始设计文章浏览量记录和评论功能。这时我发现了问题:由于 Vercel 本身无法提供数据库服务,我需要引入 Vercel 提供的免费第三方服务。虽然容量对于存储少量文本绰绰有余,但作为独立服务,既要单独实现 API,后期修改表结构也很麻烦。
再后来,我想做一个照片墙功能。说来奇怪,以前我没有拍照的习惯,但现在总喜欢随手一拍,所有照片会自动同步到 OneDrive。图片保存的方法有了,但每次回顾照片还得打开 OneDrive,且 OneDrive 图片加载速度较慢,有点折磨。于是我就想能不能直接把照片在博客的照片墙展示。
这时问题就开始严重了。首先,国内访问 Vercel 的速度很慢。之前没做照片墙时就挺明显了,部分地区和运营商的网络加载文章插图都很慢,无法支持照片墙。其次,当需要存储大量照片时,GitHub 单个仓库的存储空间(通常是 1G)很容易捉襟见肘,后面肯定会爆掉。
那怎么办呢?
首先是访问速度,这时就到了“大善人” Cloudflare 出场的时候了。依旧是白嫖,通过 Cloudflare CDN 加速,国内访问速度瞬间提升。虽然照片墙原图不至于秒开,但等个两三秒还是能加载完成的。不过这两三秒仍需优化,我的方法是单独生成低质量缩略图,先展示缩略图,加载完成后再替换为原图。这个解法其实挺烂的:一是要提前生成缩略图,二是缩略图也占空间,三是会产生额外流量,后续得寻找更好的实现方法。
然后是存储空间。即便现在照片墙的原图还是存在 GitHub 上,这个问题我还真没想好怎么处理。我想了两种方法:一是使用收费图床;二是保存在服务器,思路是服务器定时同步 OneDrive 上的图片并在本地保存。也许方法二更适合我,但还得调查 OneDrive 是否支持定时同步。
最后是自定义方面的问题。免费版 Vercel 似乎只能很好地支持静态网站。Vercel 的核心是 Serverless Functions,这意味着没有“常驻”服务器,函数“用完即走”,无法保持长连接,因此原生不支持 WebSocket。Serverless 函数运行时虽可写入 /tmp 目录,但该目录随时可能被销毁,无法持久保存上传的文件。虽然 Vercel 支持多种框架,但对自家 Next.js 的优化断层式领先。部署 Vue、React 纯静态站点没问题,但部署 Python (Django/Flask) 或 Go 等后端应用时,体验和配置复杂度远不如 Node.js 应用。我也无法随意控制底层的 Linux 环境依赖。
其实我最无法接受的是,每次编辑完文章都得走一遍 GitHub 的提交流程,再等待部署。我的目标是通过在线方式编写文章并发布,最后再同步到 GitHub。
出于种种原因,我决定斥巨资购买一台 VPS。找了半天,利用之前在阿里云买的域名,选了阿里云 79 元一年的服务器(2v2g,200M 峰值带宽)。服务器买好后,请出 Claude、Gemini 和 GPT 三位“至尊”,不那么顺利地把博客迁移到了阿里云。Claude 指挥并干重活,Gemini 负责简单工作,GPT 主要负责 Review。三人齐上,焉有一合之将?
最后还是成功部署到了服务器上,访问速度有了质的提升,甚至感觉之前做的加载优化都白做了 T^T。不过爽是真的爽。接下来的工作就是优化照片墙图片读取逻辑,将其和博客本体拆分,不再存在 GitHub 上,这样一年后服务器到期再次迁移时也更方便。
新功能方面,首先就是在线编辑文章。之前尝试过 TinaCMS,但在 Vercel 上一使用 Markdown 编辑模式就会报错,原因不明。集成 TinaCMS 本就费劲,结果还用不了,属实难受。这次迁移到阿里云,打算再试一次,不行就换方案。其次是移动端适配和高分屏适配。现在的移动端体验一言难尽,完全未适配;高缩放屏幕访问时部分元素也会堆叠,这些都得慢慢调整。
总而言之言而总之,博客已顺利部署到阿里云。接下来就是各种折腾了。技术性文章应该会写得很少,毕竟我是个菜鸡,现在更是依赖上了 AI,还是多记录些生活吧~
山不转水转,下一篇再见。