从零搭建 hector.software:一个博士生的完整建站记录
作为一个写 Python 的 LLM 方向博士生,我的 DevOps 经验约等于零。这篇文章完整记录了这个网站从一台裸的 1GB 内存 VPS 到你现在看到的样子的全过程——包括中间那个让我一度怀疑人生的 SSH 玄学问题(剧透:凶手不是校园网)。 整体架构 服务器:DigitalOcean 新加坡机房,1 vCPU / 1GB RAM / 25GB SSD,$6/月 主页(/):PRISM —— Next.js + Tailwind 的学术主页模板,静态导出 博客(/posts/):Hugo + PaperMod —— 你正在看的这个 Web 服务:Nginx 同时托管两套静态产物 HTTPS:Let’s Encrypt 免费证书,自动续期 部署:本地改完 Markdown/TOML,跑一个 deploy.sh 全站更新 两套静态站点生成器听起来奇怪,其实分工清晰:PRISM 负责"学术名片"的精致门面,Hugo 负责高频写作的顺手体验。Nginx 眼里它们只是同一个目录树下的 HTML 文件,运行时内存开销约等于零——1GB 小机器的完美归宿。 第一个坑:SSH 连不上,凶手竟是本机 故事从一个经典报错开始: kex_exchange_identification: Connection closed by remote host SSH 的 22 端口连不上,我一度把 sshd 挪到 443 端口"苟活"。后来系统排查时发现了更诡异的现象:连服务器上根本没开的端口,TCP 握手也能"成功": $ nc -zv 157.230.252.157 12345 # 这个端口明明是关闭的 Connection to 157.230.252.157 port 12345 succeeded! # ??? 一个关闭的端口不可能接受连接——除非"接受"连接的根本不是服务器。真相:本机的 Clash(TUN 模式)接管了全部出站 TCP,它会先无条件"假装接受"连接,再去找代理节点转发。而当时选中的节点恰好挂了,于是所有流量被静默黑洞,表现出来就是"TCP 通了但 SSH 握手超时"的灵异现场。 ...