<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Next.js on Hector 的研究日志</title>
    <link>https://hector.software/posts/tags/next.js/</link>
    <description>Recent content in Next.js on Hector 的研究日志</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 10 Jul 2026 16:00:00 +0800</lastBuildDate>
    <atom:link href="https://hector.software/posts/tags/next.js/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>从零搭建 hector.software:一个博士生的完整建站记录</title>
      <link>https://hector.software/posts/building-this-site/</link>
      <pubDate>Fri, 10 Jul 2026 16:00:00 +0800</pubDate>
      <guid>https://hector.software/posts/building-this-site/</guid>
      <description>&lt;p&gt;作为一个写 Python 的 LLM 方向博士生,我的 DevOps 经验约等于零。这篇文章完整记录了这个网站从一台裸的 1GB 内存 VPS 到你现在看到的样子的全过程——包括中间那个让我一度怀疑人生的 SSH 玄学问题(剧透:凶手不是校园网)。&lt;/p&gt;
&lt;h2 id=&#34;整体架构&#34;&gt;整体架构&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;服务器&lt;/strong&gt;:DigitalOcean 新加坡机房,1 vCPU / 1GB RAM / 25GB SSD,$6/月&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主页(&lt;code&gt;/&lt;/code&gt;)&lt;/strong&gt;:&lt;a href=&#34;https://github.com/xyjoey/PRISM&#34;&gt;PRISM&lt;/a&gt; —— Next.js + Tailwind 的学术主页模板,静态导出&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;博客(&lt;code&gt;/posts/&lt;/code&gt;)&lt;/strong&gt;:&lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; + &lt;a href=&#34;https://github.com/adityatelange/hugo-PaperMod&#34;&gt;PaperMod&lt;/a&gt; —— 你正在看的这个&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web 服务&lt;/strong&gt;:Nginx 同时托管两套静态产物&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTPS&lt;/strong&gt;:Let&amp;rsquo;s Encrypt 免费证书,自动续期&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;部署&lt;/strong&gt;:本地改完 Markdown/TOML,跑一个 &lt;code&gt;deploy.sh&lt;/code&gt; 全站更新&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两套静态站点生成器听起来奇怪,其实分工清晰:PRISM 负责&amp;quot;学术名片&amp;quot;的精致门面,Hugo 负责高频写作的顺手体验。Nginx 眼里它们只是同一个目录树下的 HTML 文件,运行时内存开销约等于零——1GB 小机器的完美归宿。&lt;/p&gt;
&lt;h2 id=&#34;第一个坑ssh-连不上凶手竟是本机&#34;&gt;第一个坑:SSH 连不上,凶手竟是本机&lt;/h2&gt;
&lt;p&gt;故事从一个经典报错开始:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;kex_exchange_identification: Connection closed by remote host
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;SSH 的 22 端口连不上,我一度把 sshd 挪到 443 端口&amp;quot;苟活&amp;quot;。后来系统排查时发现了更诡异的现象:&lt;strong&gt;连服务器上根本没开的端口,TCP 握手也能&amp;quot;成功&amp;quot;&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ nc -zv 157.230.252.157 &lt;span style=&#34;color:#ae81ff&#34;&gt;12345&lt;/span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;# 这个端口明明是关闭的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Connection to 157.230.252.157 port &lt;span style=&#34;color:#ae81ff&#34;&gt;12345&lt;/span&gt; succeeded!   &lt;span style=&#34;color:#75715e&#34;&gt;# ???&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一个关闭的端口不可能接受连接——除非&amp;quot;接受&amp;quot;连接的根本不是服务器。真相:本机的 Clash(TUN 模式)接管了全部出站 TCP,它会先无条件&amp;quot;假装接受&amp;quot;连接,再去找代理节点转发。而当时选中的节点恰好挂了,于是所有流量被静默黑洞,表现出来就是&amp;quot;TCP 通了但 SSH 握手超时&amp;quot;的灵异现场。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
