个人站点搭建记录
个人最终选择的方案是, 买了个腾讯云轻量服务器, 3 年 288 元,1 核 2G,硬盘 60 GB, 送宝塔镜像, 本地构建 Next.js 项目, 再推送到服务器, 最后执行 ssh 重启。为什么如此选择? 那就要说说其他方案为什么不合适了。
尝试一: 云上构建
云上构建, 最开始我试了 github action 监听 push 后自动触发宝塔 webhook, webhook 执行 git pull 从 github 拉取最新的镜像, 执行构建。结果第一步就折戟了, 服务器拉不到 github, gfw 挡住了。。。
既然 github 拉不到, 那 gitlab 总可以吧? 毕竟 gitlab 不需要梯子的。确实可以, 结果倒在了第二步: 服务器跑不动 Next.js 的构建。我重新试了一下, 空的 Next.js 项目可以 build 完成, 但是随便写点什么东西, 内存就爆了, 直接飙到 100%。
尝试二: 本地 windows 构建
我个人电脑是 windows, 云上是 centos, 其实这个方案我没尝试, 因为肯定失败: 项目依赖 sharp 进行图片相关优化, sharp 是需要在 install 的时候执行跟平台有关的 build 的, windows 上执行的 build, 放到 linux 上运行必然抛错。
尝试三: 本地构建+推送云端
所以我就 本地装了一个跟服务器同一版本的 centos 镜像 用 docker 搭了一个 跟服务器同一版本的 ubuntu 容器, 在里面执行构建, 构建完成后上传到服务器, 然后 ssh 执行项目 reload, 显然这样是可行的, 已经稳定运行了个把月了。部署脚本感觉没什么好说的, 愿意看的可以点 deploy.sh
Q & A
Q: 干嘛要脱裤子放屁,直接本地构建推云上不就好了?干嘛还要 docker 里面构建?
A: prisma binaryTargets 构建和系统有关,& Next.js 图片优化需要 sharp,sharp 跟 install 及 build 时的系统有关,本地构建没用;
Q: 你都用 docker 了,干嘛不直接把 docker 推到云端呢?
A: docker 里面带了一个 node 环境,300多M,即使 base node:alpine 也有200+M;我把里面构建的内容拿出来,才30多M,上传到腾讯云很费劲的好吗,轻一点不好吗