<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>IT on 达蒙西的囚笼</title>
        <link>https://blog.cba.nxlan.cn/tags/it/</link>
        <description>Recent content in IT on 达蒙西的囚笼</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>Tech-love Share Hope</copyright>
        <lastBuildDate>Wed, 22 Apr 2026 16:03:12 +0800</lastBuildDate><atom:link href="https://blog.cba.nxlan.cn/tags/it/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Gitea 私有代码仓库快速部署</title>
        <link>https://blog.cba.nxlan.cn/p/gitea/</link>
        <pubDate>Wed, 22 Apr 2026 16:03:12 +0800</pubDate>
        
        <guid>https://blog.cba.nxlan.cn/p/gitea/</guid>
        <description>&lt;img src="https://r2.blog.nxlan.cn/PicGobuild_gitea_title.png" alt="Featured image of post Gitea 私有代码仓库快速部署" /&gt;&lt;p&gt;&lt;strong&gt;摘要&lt;/strong&gt;: 基于真实踩坑案例，实现 1Panle 平台 + Gitea 私有仓库快速部署。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;前情提要&#34;&gt;前情提要
&lt;/h2&gt;&lt;p&gt;前面&lt;a class=&#34;link&#34; href=&#34;https://blog.cba.nxlan.cn/p/setup_mcp_server&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;文章&lt;/a&gt;中提到了 MCP server 快速部署案例。&lt;/p&gt;
&lt;p&gt;其中有一种场景：用户自己开发了一个 mcp server 代码，希望运行在 1Panel 的MCP 组件中，而不是只能够在本地运行。&lt;/p&gt;
&lt;p&gt;并且文章中提到，1Panel 中新增的 mcp server配置如下——&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/bin/sh -c &amp;#34;apk add git &amp;amp;&amp;amp; uvx --from git+http://lab.nxlan.cn:3008/pdream/jobsearch-mcp-server.git jobsearch-mcp-server --transport stdio&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;上面用到代码仓库 &lt;a class=&#34;link&#34; href=&#34;http://lab.nxlan.cn:3008/pdream/jobsearch-mcp-server.git&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://lab.nxlan.cn:3008/pdream/jobsearch-mcp-server.git&lt;/a&gt; 就是本文主角——gitea 个人仓库。&lt;/p&gt;
&lt;h2 id=&#34;一gitea-基础配置&#34;&gt;一、Gitea 基础配置
&lt;/h2&gt;&lt;p&gt;延续1Panel 中特色功能：图形化部署+应用内部关联。&lt;/p&gt;
&lt;p&gt;可以 &lt;strong&gt;2分钟&lt;/strong&gt;快速实现 gitea 应用的部署，&lt;strong&gt;5分钟&lt;/strong&gt;完成初始化，&lt;strong&gt;10分钟&lt;/strong&gt;完成反向代理配置。&lt;/p&gt;
&lt;p&gt;之后，就可以同步自己的代码到gitea 仓库中了。&lt;/p&gt;
&lt;p&gt;感兴趣的话，不妨参考本文一步一步操作完成。&lt;/p&gt;
&lt;h3 id=&#34;11-gitea-应用创建&#34;&gt;1.1 Gitea 应用创建
&lt;/h3&gt;&lt;p&gt;首先在 &lt;strong&gt;&amp;ldquo;应用商店&amp;rdquo; -&amp;gt; &amp;ldquo;全部&amp;rdquo; -&amp;gt; &amp;ldquo;搜索&amp;rdquo;&lt;/strong&gt; 栏中输入 gitea 关键字，找到可以安装的应用。&lt;/p&gt;
&lt;p&gt;注意点击 第一个 &lt;strong&gt;Gitea&lt;/strong&gt; &amp;ldquo;安装&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423105639274.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;如果 1Panel 中没有安装过数据库服务，会有需要安装数据库的提醒（如下图）——&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423105949887.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;如果是这种情况，就&lt;strong&gt;需要先安装数据库&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;点击&amp;quot;去安装&amp;quot;后，直接跳转到&lt;strong&gt;数据库安装界&lt;/strong&gt;面——&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423110438421.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;点击**&amp;ldquo;确认&amp;rdquo;** 按键，等待数据库安装完成。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423110641229.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果点击&amp;quot;安装&amp;quot; 后，提示：&amp;ldquo;未开启外部映射，将无法从外外网访问数据库服务&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;可以根据自己需求，再勾选 &amp;ldquo;高级设置&amp;quot;中的 &amp;ldquo;端口外部访问&amp;quot;选项。&lt;/p&gt;
&lt;p&gt;一般&lt;strong&gt;不建议&lt;/strong&gt; 直接开放数据库服务到外部，所以我这里默认不启用此功能。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;再次回到Gitea 安装界面，数据库服务可以选择刚创建好的postgres 了。&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423111041133.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;因为，稍后使用 ssh 协议同步代码，需要访问 gitea 的ssh 服务，这里需要勾选 &amp;ldquo;端口外部访问&amp;rdquo; 的选项。&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423111209507.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;点击&amp;quot;确认&amp;quot;后，就开始自动安装 gitea 应用了。&lt;/p&gt;
&lt;p&gt;安装成功后，可以在应用商店中看到刚新增的两个应用——&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423111647878.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;12-追加反代配置&#34;&gt;1.2 追加反代配置
&lt;/h3&gt;&lt;p&gt;默认安装完成时，gitea 应用的web 服务绑定在宿主机的 3000端口。对应我的主机就是 &lt;a class=&#34;link&#34; href=&#34;http://lab.nxlan.cn:3000&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://lab.nxlan.cn:3000&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;如果1Panel 在你的内部局域网，就可以直接访问上述页面，进行后续初始化工作。（可以跳过本段）&lt;/p&gt;
&lt;p&gt;但是，如果gitea 宿主机在云上，又怎么能直接访问这个管理页面呢？&lt;/p&gt;
&lt;p&gt;一种方式就是：追加反向代理配置，通过已经上线的https 服务，代理/gitea 流量到 http://127.0.0.1:3000 的真实服务。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;还有一种方法是：登录到云主机 管理页面，在&lt;strong&gt;安全策略&lt;/strong&gt;下，追加一条——放行公网访问主机 3000 端口的策略。&lt;/p&gt;
&lt;p&gt;考虑到：这样临时放行后，还是要取消并开通反代，我就没有这么操作。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;操作步骤上，还是先进入**&amp;ldquo;网站&amp;rdquo; -&amp;gt; &amp;ldquo;反向代理&amp;rdquo; -&amp;gt; &amp;ldquo;创建&amp;rdquo;**， 创建一条新代理规则，请求路径假设就是 /gitea。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423112918360.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;并在原始代理配置文件内容基础上追加——&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location ^~ /gitea &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 追加配置：去掉 /gitea 前缀，发给后端&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rewrite ^/gitea&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/.*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;$ &lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; break&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# --- 默认设置 ---&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_pass http://127.0.0.1:3000&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header Host &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header X-Real-IP &lt;span class=&#34;nv&#34;&gt;$remote_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header X-Forwarded-For &lt;span class=&#34;nv&#34;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header REMOTE-HOST &lt;span class=&#34;nv&#34;&gt;$remote_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header Upgrade &lt;span class=&#34;nv&#34;&gt;$http_upgrade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header Connection &lt;span class=&#34;nv&#34;&gt;$http_connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header X-Forwarded-Proto &lt;span class=&#34;nv&#34;&gt;$scheme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header X-Forwarded-Port &lt;span class=&#34;nv&#34;&gt;$server_port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_http_version 1.1&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    add_header X-Cache &lt;span class=&#34;nv&#34;&gt;$upstream_cache_status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_ssl_server_name off&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_ssl_name &lt;span class=&#34;nv&#34;&gt;$proxy_host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;保存反代配置后，进入gitea 配置文件目录——&lt;u&gt;/opt/1panel/apps/gitea/gitea/data/gitea/conf&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;修改配置文件app.ini中的一条配置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;server&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;APP_DATA_PATH&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; /data/gitea
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DOMAIN&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; localhost
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SSH_DOMAIN&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; localhost
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;HTTP_PORT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;3000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 修改为自己外部域名和代理接口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ROOT_URL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; https://lab.nxlan.cn/gitea/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DISABLE_SSH&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SSH_PORT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SSH_LISTEN_PORT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LFS_START_SERVER&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;修改好后，重启gitea 应用新配置。再次访问反代地址—— &lt;a class=&#34;link&#34; href=&#34;https://lab.nxlan.cn/gitea&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://lab.nxlan.cn/gitea&lt;/a&gt;，就可以看到初始化配置页面了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423114750315.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;13-完成应用初始化&#34;&gt;1.3 完成应用初始化
&lt;/h3&gt;&lt;p&gt;在上述初始化页面中，1Panel 已经帮我们补充好了数据库地址、名称、用户、密码等信息。&lt;/p&gt;
&lt;p&gt;这里保持默认，点击 &lt;strong&gt;&amp;ldquo;立即安装&amp;rdquo;&lt;/strong&gt; 完成最后的初始化工作。&lt;/p&gt;
&lt;p&gt;最后，完成管理员账户的设置——&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423115342985.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;管理账户创建后，重新登录。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423115555538.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;14-同步代码至仓库&#34;&gt;1.4 同步代码至仓库
&lt;/h3&gt;&lt;p&gt;同步本地写好的代码前，需要先在 Gitea 上创建仓库。&lt;/p&gt;
&lt;p&gt;我们的第一个代码仓库，名字就叫 &amp;ldquo;jobsearch-mcp-server&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;为了方便mcp server 拉取项目代码，项目可见性不勾选 &amp;ldquo;将仓库设为私有&amp;rdquo;——也就是公开的意思。&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423115908283.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;其他保持默认，这样我们第一个代码仓库就创建完成了。&lt;/p&gt;
&lt;p&gt;仓库创建完后，需要追加个人应用 访问令牌——方便开发主机同步代码。&lt;/p&gt;
&lt;p&gt;在 &lt;strong&gt;&amp;ldquo;个人信息&amp;rdquo; -&amp;gt; &amp;ldquo;应用&amp;rdquo; -&amp;gt; &amp;ldquo;生成新的令牌&amp;rdquo;&lt;/strong&gt; 中 输入令牌名称，并追加repository 等读写的权限。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423122033363.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;添加成功后，会出现一行令牌字符串，类似于——a385cac305f80ff43dfe202d727b5a33176d18b3&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423123926927.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;在开发主机上，按照以下命令顺序执行，同步代码到gitea 仓库：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# git 项目初始化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git init
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 查看当前 remote&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote -v
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 删除过往 remote&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote remove origin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 追加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote add origin https://pdream:&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;TOKEN&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;@lab.nxlan.cn/gitea/pdream/jobsearch-mcp-server.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 推送本地代码到仓库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push --set-upstream origin master
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Enumerating objects: 52, &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Counting objects: 100% &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;52/52&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Delta compression using up to &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; threads
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Compressing objects: 100% &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;42/42&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Writing objects: 100% &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;52/52&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, 100.22 KiB &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 5.90 MiB/s, &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Total &lt;span class=&#34;m&#34;&gt;52&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;delta 19&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, reused &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;delta 0&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, pack-reused &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;remote: . Processing &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; references
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;remote: Processed &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; references in total
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;To https://lab.nxlan.cn/gitea/pdream/jobsearch-mcp-server.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; * &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;new branch&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;      master -&amp;gt; master
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;branch &lt;span class=&#34;s1&#34;&gt;&amp;#39;master&amp;#39;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; up to track &lt;span class=&#34;s1&#34;&gt;&amp;#39;origin/master&amp;#39;&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;提示同步成功。此时访问仓库页面，就可以看到刚上传的代码了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260423130025098.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;二1panel-mcp-server-部署从-gitea-拉取&#34;&gt;二、1Panel MCP Server 部署（从 Gitea 拉取）
&lt;/h2&gt;&lt;h3 id=&#34;21-场景&#34;&gt;2.1 场景
&lt;/h3&gt;&lt;p&gt;在 1Panel 上通过 MCP 管理界面部署 MCP Server时，因为源代码在个人 Gitea上，所以在MCP server 启动要指定git项目地址。&lt;/p&gt;
&lt;h3 id=&#34;22-正确启动命令&#34;&gt;2.2 正确启动命令
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;经过反代服务器（推荐）&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/bin/sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;apk add git &amp;amp;&amp;amp; uvx --from git+https://lab.nxlan.cn/gitea/pdream/jobsearch-mcp-server jobsearch-mcp-server --transport stdio&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;直连 Gitea（不经反代，数据未加密）&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/bin/sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;apk add git &amp;amp;&amp;amp; uvx --from git+http://lab.nxlan.cn:3000/pdream/jobsearch-mcp-server.git jobsearch-mcp-server --transport stdio&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;参数说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--transport stdio&lt;/code&gt; — 1Panel MCP 托管必须使用 stdio 传输模式（解决 SSE 嵌套冲突）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;23-注意事项&#34;&gt;2.3 注意事项
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;路径格式&lt;/strong&gt;：&lt;code&gt;git+https://&lt;/code&gt; 而非本地路径，容器内无法访问宿主机文件系统&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;传输模式&lt;/strong&gt;：必须加 &lt;code&gt;--transport stdio&lt;/code&gt;，否则与 1Panel MCP 托管机制冲突&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;反代 vs 直连&lt;/strong&gt;：经反代走 443 端口（SSL 由反代终止），直连走 3000 数据不经加密传输（服务直接暴露在公网）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;环境变量&lt;/strong&gt;：在jobserch 这个 MCP Server 项目中需要声明环境变量 &amp;ldquo;DEEPSEEK_API_KEY&amp;rdquo;，否则提示 &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; 未配置。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;三补充-使用ssh方式同步代码&#34;&gt;三、补充 ：使用ssh方式同步代码
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;前提：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Gitea 应用创建时，勾选了 &lt;strong&gt;&amp;ldquo;端口外部访问&amp;rdquo;&lt;/strong&gt; 的选项。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;31-ssh-key-生成&#34;&gt;3.1 SSH Key 生成
&lt;/h3&gt;&lt;p&gt;开发主机&lt;strong&gt;密钥生成&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -t ed25519 -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;your_email@xx.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 输出：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   id_ed25519      (私钥)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   id_ed25519.pub  (公钥)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;添加主机的ssh key到 Gitea&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 查看公钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat ~/.ssh/id_ed25519.pub
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 复制内容 → Gitea Web UI → 用户设置 → SSH 密钥 → 添加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 验证连通性&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh -p &lt;span class=&#34;m&#34;&gt;222&lt;/span&gt; git@lab.nxlan.cn -T
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 预期：Welcome to Gitea!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;仓库 ssh 密钥截图&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimg_v3_02110_589f6a24-6bd5-4fe0-bb73-2bd33563a16g.jpg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;32-修改git-remote-配置&#34;&gt;3.2 修改git remote 配置
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 删除之前的 remote&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote remove origin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 将 之前配置的 HTTPS 改为 SSH（注意端口 222）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote set-url origin ssh://git@lab.nxlan.cn:222/pdream/jobsearch-mcp-server.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 验证&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote -v
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;33-http-与-ssh-的分工&#34;&gt;3.3 HTTP 与 SSH 的分工
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;通道&lt;/th&gt;
          &lt;th&gt;用途&lt;/th&gt;
          &lt;th&gt;使用场景&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;HTTP（S）&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;拉取&lt;/strong&gt;源代码&lt;/td&gt;
          &lt;td&gt;MCP Server 容器内 &lt;code&gt;uvx --from git+https://...&lt;/code&gt; 从 Gitea 拉代码&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;HTTP（S）&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;上传&lt;/strong&gt;源代码&lt;/td&gt;
          &lt;td&gt;本地编辑完成后 &lt;code&gt;git push&lt;/code&gt; 将代码同步回 Gitea。此时origin为： https://pdream:[TOKEN]@lab.nxlan.cn/gitea/pdream/jobsearch-mcp-server.git&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;SSH&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;上传&lt;/strong&gt;源代码&lt;/td&gt;
          &lt;td&gt;本地编辑完成后 &lt;code&gt;git push&lt;/code&gt; 将代码同步回 Gitea 。此时origin为： ssh://git@lab.nxlan.cn:222/pdream/jobsearch-mcp-server.git&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;本例实战&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MCP Server 部署：容器通过 &lt;strong&gt;HTTPS&lt;/strong&gt; 拉取 &lt;code&gt;jobsearch-mcp-server&lt;/code&gt; 源码&lt;/li&gt;
&lt;li&gt;代码编辑后推送：本地也通过 &lt;strong&gt;HTTPS&lt;/strong&gt; 方式 ( &lt;code&gt;https://pdream:[TOKEN]@lab.nxlan.cn/...&lt;/code&gt;) 提交到 Gitea&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;两者各司其职，不冲突。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;四mcp-server-排错速查&#34;&gt;四、mcp server 排错速查
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;症状&lt;/th&gt;
          &lt;th&gt;原因&lt;/th&gt;
          &lt;th&gt;解法&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;uvx --from /path/to/repo&lt;/code&gt; 报错&lt;/td&gt;
          &lt;td&gt;容器内无法访问宿主机路径&lt;/td&gt;
          &lt;td&gt;改用 &lt;code&gt;git+https://&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;git clone&lt;/code&gt; 卡住/超时&lt;/td&gt;
          &lt;td&gt;容器网络不通或缺 git&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;apk add git&lt;/code&gt;，检查网络&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;SSL certificate problem&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;自签证书&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;git config --global http.sslVerify false&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;容器启动后立刻退出&lt;/td&gt;
          &lt;td&gt;缺环境变量&lt;/td&gt;
          &lt;td&gt;检查 &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; 等必填变量&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;SSH 克隆认证失败&lt;/td&gt;
          &lt;td&gt;端口非 22&lt;/td&gt;
          &lt;td&gt;确认 Gitea SSH 端口为 &lt;strong&gt;222&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;五principle经验规则&#34;&gt;五、Principle（经验规则）
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;supergateway 容器内操作默认缺 git，&lt;strong&gt;先用 &lt;code&gt;apk add git&lt;/code&gt; 兜底&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;MCP server 启动命令只支持单字段，&lt;strong&gt;用 &lt;code&gt;/bin/sh -c&lt;/code&gt; 串联多条指令&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;使用 HTTPS 服务推送源代码时，注意&lt;strong&gt;令牌权限&lt;/strong&gt;要给够，否则会报告 403 的错误&lt;/li&gt;
&lt;li&gt;Gitea SSH 端口&lt;strong&gt;映射为 222&lt;/strong&gt;，配置 remote 时需注意指定端口&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
        <title>手把手初始化GCP云主机并快速完成MCP Server的配置</title>
        <link>https://blog.cba.nxlan.cn/p/setup_mcp_server/</link>
        <pubDate>Wed, 08 Apr 2026 11:13:01 +0800</pubDate>
        
        <guid>https://blog.cba.nxlan.cn/p/setup_mcp_server/</guid>
        <description>&lt;img src="https://r2.blog.nxlan.cn/PicGoGenerated_Image_v9wav5v9wav5v9wa.png" alt="Featured image of post 手把手初始化GCP云主机并快速完成MCP Server的配置" /&gt;&lt;h2 id=&#34;前情提要&#34;&gt;前情提要
&lt;/h2&gt;&lt;p&gt;之前发布的文章：“手把手带你薅 Gemini 付费 API 与 Google 免费服务器” 被人投诉下架了。&lt;/p&gt;
&lt;p&gt;这里把文章链接放出来，感兴趣的同学可以去薅一下——&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;前提&lt;/strong&gt;：需要先开通自己帐号的 google pro服务&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;详细步骤&lt;/strong&gt;：https://blog.cba.nxlan.cn/p/setup_gemini_api&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;具体怎么开通、初始化机器、登录的过程，上面文章中已经说得很清楚了。&lt;/p&gt;
&lt;p&gt;只是还剩下一个任务，也就是本文的主题：&lt;/p&gt;
&lt;p&gt;使用1Panel 申请https 免费证书，搭建MCP server 供Agent使用。&lt;/p&gt;
&lt;p&gt;肝了两天，文章有点长，觉得好用点个赞呗。&lt;/p&gt;
&lt;h2 id=&#34;步骤概要&#34;&gt;步骤概要
&lt;/h2&gt;&lt;ol start=&#34;0&#34;&gt;
&lt;li&gt;强化防火墙策略&lt;/li&gt;
&lt;li&gt;ddns-go 组件安装&lt;/li&gt;
&lt;li&gt;1panel 安全配置优化  (启用ACME证书注册 )&lt;/li&gt;
&lt;li&gt;启用 MCP server&lt;/li&gt;
&lt;li&gt;反向代理服务配置&lt;/li&gt;
&lt;li&gt;可以一键安装“龙虾”  ^.^ （也是我推荐的方式）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;step0-强化防火墙策略&#34;&gt;Step0 强化防火墙策略
&lt;/h2&gt;&lt;p&gt;系统初始化后。VPC上 默认放行了 ssh http https 这些服务端口。&lt;/p&gt;
&lt;p&gt;具体到OS层面，熟悉Linux 的同学知道，&lt;strong&gt;默认&lt;/strong&gt;INPUT 方向的策略是全部&lt;strong&gt;放行&lt;/strong&gt;的——&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt; iptables -nvL INPUT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Chain INPUT (policy ACCEPT 85401 packets, 12M bytes)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; pkts bytes target     prot opt in     out     source               destination  
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这就导致一个什么问题呢？&lt;/p&gt;
&lt;p&gt;ssh 服务经常被暴力攻击——&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260409161336806.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;所以，系统初始化后，第一步是更新系统组件： &lt;strong&gt;apt update &amp;amp; apt upgrade&lt;/strong&gt; 。&lt;/p&gt;
&lt;p&gt;第二步就应该是 &lt;strong&gt;加固ssh 服务&lt;/strong&gt;——避免被外部暴力破解。&lt;/p&gt;
&lt;p&gt;这里，使用了iptables 的 &amp;ldquo;recent&amp;quot;模块，去动态创建&amp;amp;更新 一个叫做&amp;quot;openssh&amp;quot;的&lt;strong&gt;白名单&lt;/strong&gt;库。&lt;/p&gt;
&lt;p&gt;实现只有白名单库里的公网IP 可以访问这台 Ubuntu的ssh服务，进一步说：只有这些白名单地址所在的地址&lt;/p&gt;
&lt;h3 id=&#34;1-创建iptabls-策略脚本&#34;&gt;1. 创建iptabls 策略脚本
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt; cat /usr/local/sbin/Protect_SSH_port.sh 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#!/bin/bash&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# set iptables input rules for protecting ssh port service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# This script is intended to be run by root via a systemd service.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Flush ONLY the INPUT chain rules to ensure a clean state before applying new ones.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/sbin/iptables -F INPUT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Set rules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/sbin/iptables -I INPUT &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# option： 放行Google IDC的跳板登录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/sbin/iptables -I INPUT &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; -s 34.81.160.0/24 -p tcp --dport &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt; -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/sbin/iptables -I INPUT &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; -p icmp --icmp-type &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; -m length --length &lt;span class=&#34;m&#34;&gt;879&lt;/span&gt; -j LOG --log-prefix &lt;span class=&#34;s1&#34;&gt;&amp;#39;SSH_OPEN_KEY&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/sbin/iptables -I INPUT &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; -p icmp --icmp-type &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; -m length --length &lt;span class=&#34;m&#34;&gt;879&lt;/span&gt; -m recent --name openssh --set --rsource -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/sbin/iptables -I INPUT &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt; -p tcp --dport &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt; --syn -m recent --name openssh --rcheck --seconds &lt;span class=&#34;m&#34;&gt;60&lt;/span&gt; --rsource -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/sbin/iptables -I INPUT &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; -p tcp --dport &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt; -j DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/sbin/iptables -A INPUT -p icmp -j DROP
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;2-创建-protect-ssh-服务设置开机运行&#34;&gt;2. 创建 protect-ssh 服务，设置开机运行
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt; cat /etc/systemd/system/protect-ssh.service 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Unit]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Description=Apply custom iptables rules to protect SSH port
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;After=network.target
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Service]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Type=oneshot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RemainAfterExit=yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ExecStart=/usr/local/sbin/Protect_SSH_port.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 当服务停止时，只清空 INPUT 链的规则
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ExecStop=/sbin/iptables -F INPUT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Install]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WantedBy=multi-user.target
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;启动并查看服务状态——&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;systemctl&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;protect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;systemctl&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;restart&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;protect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;systemctl&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;protect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;●&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;protect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssh&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;service&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Apply&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;custom&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;iptables&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rules&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;protect&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SSH&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;n&#34;&gt;Loaded&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;loaded&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;systemd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;protect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssh&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;preset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;n&#34;&gt;Active&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;active&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exited&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;since&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Thu&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2026&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;43&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ago&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;141811&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sbin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Protect_SSH_port&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sh&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exited&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SUCCESS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;Main&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;141811&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exited&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SUCCESS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;CPU&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;42&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;3-效果展示&#34;&gt;3. 效果展示
&lt;/h3&gt;&lt;p&gt;陌生用户，默认没有登录令牌。&lt;/p&gt;
&lt;p&gt;连ssh 会话都建立不起来——&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260414153329300.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;知道登录令牌，先“敲门”登记一下——&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这里有个计算公式：&lt;/p&gt;
&lt;p&gt;因为： ICMP令牌长度 = Packetsize + ICMP 头部 [ &lt;strong&gt;8 字节&lt;/strong&gt; ] + IP 头部 [ &lt;strong&gt;20 字节&lt;/strong&gt; ]&lt;/p&gt;
&lt;p&gt;所以：packetsize [ 敲门令牌 ] = ICMP令牌长度 [ 这里是879 ] - 8 - 20 = &lt;strong&gt;851 字节&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260414154725659.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;ping通主机后，才可以正常登录——&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260414153202143.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;这样就可以避免：主机被陌生人/主机 探测、破解的可能。&lt;/p&gt;
&lt;p&gt;部署后，再也没有陌生人的登录记录。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo0006F94F-4617-460C-B5B6-7AD4E609DE4C.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;step1-ddns-go-组件安装&#34;&gt;Step1 ddns-go 组件安装
&lt;/h2&gt;&lt;p&gt;因为云主机的固定IP是收费的，为了减少支出，在&lt;strong&gt;云主机创建时&lt;/strong&gt;外部IP是临时的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260226123124238.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Create_VM7&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;外部IP地址不固定就带来一个问题——某天google 给主机更换外部IP 后，域名访问就失效了。&lt;/p&gt;
&lt;p&gt;除非人工重新进入 GCP 控制页面，查看新的IP，再手动重新映射域名。&lt;/p&gt;
&lt;p&gt;有没有简单的办法解决这个问题呢？有的，兄弟，有的！&lt;/p&gt;
&lt;p&gt;解决办法就是常听到的ddns 服务——通过一个探测脚本，定时去更新域名和IP映射关系。&lt;/p&gt;
&lt;p&gt;所以，下面以ddns-go 组件为例，在这台ubuntu 上完成域名自动映射服务。&lt;/p&gt;
&lt;h3 id=&#34;1-下载ddns-go-源码创建应用目录&#34;&gt;1. 下载ddns-go 源码，创建应用目录
&lt;/h3&gt;&lt;p&gt;先下载源码——&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;wget&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;github&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jeessy2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ddns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;go&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;releases&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;download&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;16.5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ddns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;go_6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;16.5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_linux_x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zxvf&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ddns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;go_6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;16.5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_linux_x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gz&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ./ddns-go -v&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;v6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;16.5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;创建应用目录和空的配置文件——&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /usr/local/bin/ddns-go
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch /usr/local/bin/ddns-go/ddns_go_config.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /tmp/ddns-go /usr/local/bin/ddns-go/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;2-导入配置文件&#34;&gt;2. 导入配置文件
&lt;/h3&gt;&lt;p&gt;ddns-go配置文件模板如下。&lt;/p&gt;
&lt;p&gt;注意更新 ddns账户的域名和 TOKEN（这里以CloudFlare 上的DNS 服务为例）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;52
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;53
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;54
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;55
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;56
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;57
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;58
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;59
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# cat /usr/local/bin/ddns-go/ddns_go_config.yaml 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dnsconf:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - name: cloudflare
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ipv4:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        enable: true
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        gettype: url
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        url: https://checkip.synology.com, https://ddns.oray.com/checkip, https://ip.3322.net,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        netinterface: ens4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        cmd: &amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        domains:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - YOUR-DOMAIN-NAME
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ipv6:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        enable: false
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        gettype: url
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        url: https://speed.neu6.edu.cn/getIP.php, https://v6.ident.me, https://6.ipw.cn
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        netinterface: &amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        cmd: &amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ipv6reg: &amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        domains:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - &amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      dns:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        name: cloudflare
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        id: &amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        secret: YOUR-DDNS-TOKEN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        extparam: &amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ttl: &amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;user:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    username: YOURNAME
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    password: YOURPASS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;webhook:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    webhookurl: YOUR-FEISHU-WEBHOOK
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    webhookrequestbody: |-
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &amp;#34;msg_type&amp;#34;: &amp;#34;post&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &amp;#34;content&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &amp;#34;post&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &amp;#34;zh_cn&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &amp;#34;title&amp;#34;: &amp;#34;您的谷歌云主机公网IP变了&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &amp;#34;content&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &amp;#34;tag&amp;#34;: &amp;#34;text&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &amp;#34;text&amp;#34;: &amp;#34;新的IPv4地址：#{ipv4Addr}&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            ],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &amp;#34;tag&amp;#34;: &amp;#34;text&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &amp;#34;text&amp;#34;: &amp;#34;域名更新结果：#{ipv4Result}&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        ]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    webhookheaders: &amp;#39;Content-Type: application/json&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;notallowwanaccess: false
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lang: zh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;3-创建ddns-go-服务设置开机运行&#34;&gt;3. 创建ddns-go 服务，设置开机运行
&lt;/h3&gt;&lt;p&gt;和之前一样，为ddns-go 应用创建一个系统服务。&lt;/p&gt;
&lt;p&gt;路径和上面一致的话，复制粘贴就好。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# cat /etc/systemd/system/ddns-go.service &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Simple and easy to use DDNS. Automatically update domain name resolution to public IP &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Support Aliyun, Tencent Cloud, Dnspod, Cloudflare, Callback, Huawei Cloud, Baidu Cloud, Porkbun, GoDaddy...&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ConditionFileIsExecutable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/bin/ddns-go/ddns-go
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Requires&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;network.target  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;After&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;network-online.target 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Service&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;StartLimitInterval&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;StartLimitBurst&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/bin/ddns-go/ddns-go &lt;span class=&#34;s2&#34;&gt;&amp;#34;-l&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;127.0.0.1:9876&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-f&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;300&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-cacheTimes&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;5&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-c&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/bin/ddns-go/ddns_go_config.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Restart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;always
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;RestartSec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;120&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Install&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;multi-user.target
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后，启动服务——&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt; systemctl enable ddns-go 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt; systemctl start ddns-go 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt; systemctl status ddns-go 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;可以看到类似日志：
Apr 1 11:47:22  systemd[1]: Started ddns-go.service - Simple and easy to use DDNS. Automatically update domain name resol&amp;gt;
Apr 1 11:47:22  ddns-go[242234]: 2026/04/15 11:47:22 监听 127.0.0.1:9876
Apr 1 11:47:22  ddns-go[242234]: 2026/04/15 11:47:22 你的IP 35.212.158.199 没有变化, 域名 cloud.nxlan.cn&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;4-效果展示&#34;&gt;4. 效果展示
&lt;/h3&gt;&lt;p&gt;当云主机 IP 地址变化，会通知到feishu 中。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415103810818.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;因为，目前ddns-go的web 管理页面只开放在本地的 127.0.0.1:9876上，目前还不能通过web 方式去配置、修改它。&lt;/p&gt;
&lt;p&gt;等到 Step4 中的https 反向代理服务配置好后，就可以通过web 界面去管理了。（服务支持的 DDNS 厂商还是很多的，根据自己情况选择吧）&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415114914499.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;step2-1panel-安全配置优化&#34;&gt;Step2 1panel 安全配置优化
&lt;/h2&gt;&lt;h3 id=&#34;1-加固ssh-登录&#34;&gt;1. 加固ssh 登录
&lt;/h3&gt;&lt;p&gt;1Panel的一个好处是：通过web 界面图形化地查看系统日志、设置系统基础配置。&lt;/p&gt;
&lt;p&gt;例如，这里的ssh 服务。&lt;/p&gt;
&lt;p&gt;进入**&amp;ldquo;系统&amp;rdquo; -&amp;gt; &amp;ldquo;SSH 管理&amp;rdquo;**页面。&lt;/p&gt;
&lt;p&gt;关闭密码认证和反向解析。并且设置root用户“ &lt;strong&gt;仅允许密钥登录&lt;/strong&gt; ”。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415123244603.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果对Linux系统比较熟悉，建议将root 用户的登录也关闭掉。&lt;/p&gt;
&lt;p&gt;登录时使用 google 创建云主机时自动创建的普通用户帐号和密钥就行。&lt;/p&gt;
&lt;p&gt;此时只需将密钥公钥信息添加到家目录的&lt;strong&gt;authorized_keys&lt;/strong&gt;文件中就行。&lt;/p&gt;
&lt;p&gt;~# cat /home/YOURUSER/.ssh/authorized_keys
ecdsa-sha2-nistp256 AAAA&amp;hellip;..&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;然后，点击页面中的“密钥信息”，1Panel会自动创建一组登录 密钥&lt;strong&gt;用于root 用户&lt;/strong&gt;登录。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415123759520.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;进一步，点击“详情”。把公钥和私钥信息全部“下载”下来。用于本地 ssh 客户端登录这台Google Cloud主机。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415123851325.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;点击“授权密钥”，可以看到密钥信息已经加载到 root 用户的ssh 白名单（就是 /root/.ssh/authorized_keys）中了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo2AB65800-F66C-4477-9E74-45CD2F2D4039.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;配合上一步的ddns 动态域名，使用ssh 客户端就可以顺利以root 用户身份登录 这台云主机了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415125702780.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-申请-acme-证书&#34;&gt;2. 申请 ACME 证书
&lt;/h3&gt;&lt;p&gt;其实也就是申请 &amp;ldquo;Let&amp;rsquo;s Encrypt&amp;rdquo; 颁发的免费证书，并自动续签。&lt;/p&gt;
&lt;p&gt;想必你也不希望 自己的数据“裸奔”在不可信的互联网上。&lt;/p&gt;
&lt;p&gt;首先来到**&amp;ldquo;网站&amp;rdquo; -&amp;gt; &amp;ldquo;证书&amp;rdquo;** 页面。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415130518758.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;点击“DNS 账户”，关联自己的 DNS 域名和TOKEN。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“类型” 这里与之前ddns-go 域名设置中的域名服务商保持一致——CloudFlare。&lt;/p&gt;&lt;/blockquote&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415130053457.png&#34; style=&#34;zoom:43%;&#34; /&gt;
&lt;p&gt;点击 “ACME 账户”，创建一个Let&amp;rsquo;s Encrypt账户，邮箱输入自己常用的就行。&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415130758699.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;最后，点击&amp;quot;申请证书&amp;rdquo;，完成自动化证书申请和更新的配置。&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415131145169.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;注意，&amp;ldquo;验证方式&amp;quot;为刚才创建的DNS 帐号，并&lt;strong&gt;勾选&amp;quot;自动续签&amp;rdquo;&lt;/strong&gt;。这样免费证书到期后，也不用人工干预，就可以自动续续订证书 。&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415131230376.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;申请过程需要等1分钟左右，日志可以查看进度和完成情况——&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415131601400.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;拿到证书，后续就可以用在很多地方，例如下面的 1Panel 管理页面。&lt;/p&gt;
&lt;h3 id=&#34;3-1panel-管理页面加固&#34;&gt;3. 1panel 管理页面加固
&lt;/h3&gt;&lt;p&gt;来到 &lt;strong&gt;&amp;ldquo;面板设置&amp;rdquo; -&amp;gt; &amp;ldquo;安全&amp;rdquo;&lt;/strong&gt; 页面。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415131958119.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;绑定自己域名，并开启 &amp;ldquo;面板 SSL&amp;rdquo;。开启后，1Panel 管理页面会关联之前申请到的 ACME 证书。（如下图中的效果）&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoenable_webmgt_ssl.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;同时最好开启两步验证，进一步加强登录安全。&lt;/p&gt;
&lt;p&gt;开启两步验证后的效果——&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415132244869.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;step3-启用-mcp-server&#34;&gt;Step3 启用 MCP server
&lt;/h2&gt;&lt;h3 id=&#34;1-mcp-server-初始配置&#34;&gt;1. MCP server 初始配置
&lt;/h3&gt;&lt;p&gt;首先来到 &lt;strong&gt;&amp;ldquo;AI&amp;rdquo; -&amp;gt; &amp;ldquo;MCP&amp;rdquo; -&amp;gt; &amp;ldquo;Servers&amp;rdquo;&lt;/strong&gt; 。&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415133409312.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;我们知道，MCP 下层用的是HTTP 协议，为了不直接将MCP server 暴露在外网，需要先安装 &lt;strong&gt;HTTP 反向代理服务&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;进入&amp;quot;应用商店&amp;quot; -&amp;gt; 筛选&amp;quot;web 服务器&amp;quot;标签，&lt;strong&gt;安装 OpenResty&lt;/strong&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;该应用和后面提到的每一个独立的 MCP server，本质上都是以docker 方式运行的运行时。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415133917929.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;关于OpenResty 的简单介绍——&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415133739429.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;h3 id=&#34;2-绑定网站&#34;&gt;2. 绑定网站
&lt;/h3&gt;&lt;p&gt;选中 &amp;ldquo;MCP&amp;quot;页面中的&amp;quot;绑定网站&amp;rdquo;——&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415133612240.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;“域名”还是输入 ddns-go 那用到的自己域名。&lt;/p&gt;
&lt;p&gt;再次关联之前通过 ACME 拿到的证书。&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415134406140.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;blockquote&gt;
&lt;p&gt;相同的证书，用在不同的服务上：&lt;/p&gt;
&lt;p&gt;之前是用于1Panel管理页面的登录（非443端口），这次是用于标准443 端口上全部https服务的反向代理。&lt;/p&gt;
&lt;p&gt;反代类似于在客户端和真实服务间加了一层垫片 。它的好处是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;缩小被攻击的范围；2. 隔离不同服务；3. 内部服务不用重复申请证书；4. 统一访问日志，可追加安全控制策略。&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;
&lt;h3 id=&#34;3-创建第一个mcp-服务&#34;&gt;3. 创建第一个MCP 服务
&lt;/h3&gt;&lt;p&gt;我们先创建一个常用的MCP 服务——sequential-thinking。&lt;/p&gt;
&lt;p&gt;它可以为 大模型对话，提供多轮思考的上下文内容。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415161437741.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;&lt;strong&gt;类型&lt;/strong&gt;&amp;ldquo;选择 npx。 &amp;ldquo;&lt;strong&gt;启动命令&lt;/strong&gt;&amp;ldquo;中填入——&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx -y @modelcontextprotocol/server-sequential-thinking
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果不使用HTTP 反向代理服务，这里就应该允许&amp;quot;端口外部访问&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;因为之前已经启用了 OpenResty ，访问这个 MCP server 的请求，都会经&lt;strong&gt;反向代理&lt;/strong&gt;转给真实服务。&lt;/p&gt;
&lt;p&gt;这里真实服务端口（8002）自然也不用暴露到外网。&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415161652315.png&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;p&gt;上面&amp;quot;SSE 路径&amp;quot;就是 MCP server 的服务 路径。&lt;/p&gt;
&lt;p&gt;来到 &lt;strong&gt;&amp;ldquo;网站&amp;rdquo; -&amp;gt; &amp;ldquo;HTTPS 域名&amp;rdquo; -&amp;gt; &amp;ldquo;反向代理&amp;rdquo;&lt;/strong&gt; 中可以看到，1Panel &lt;strong&gt;自动&lt;/strong&gt;为MCP 服务追加了 一条反向代理配置。（下图第二条）&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415162505326.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;此时，测试一下这个MCP server 地址——&lt;/p&gt;
&lt;p&gt;服务正常响应了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415163022915.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;网站日志&amp;quot;中 也可以看到访问记录。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260415163145340.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;怎么样是不是很简单？分分钟一个 MCP server 服务就启动和上线了。&lt;/p&gt;
&lt;p&gt;&lt;u&gt;后续文章中，也会提到这个 thinking 工具的使用案例。&lt;/u&gt;&lt;/p&gt;
&lt;h3 id=&#34;4-运行自己的mcp-源码&#34;&gt;4. 运行自己的MCP 源码
&lt;/h3&gt;&lt;p&gt;上面的方式，本质是把他人&lt;strong&gt;写好并打包发布&lt;/strong&gt; 的 MCP server代码拉取到 1Panel 的supergateway 容器中运行。&lt;/p&gt;
&lt;p&gt;那能不能把自己写好的服务，也跑在1Panel 上呢？例如之前文章 &lt;a class=&#34;link&#34; href=&#34;https://mp.weixin.qq.com/s/WliYhcC2RHeVFh0p-EN88Q&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;MCP 案例： 求职助手&lt;/a&gt; 中的代码。&lt;/p&gt;
&lt;p&gt;这就相当于有一个 7＊24 的服务跑在云主机上，不用每次运行MCP server时 输入那一长串启动命令——&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv --directory S:\trae_pj\jobsearch_mcp_server-1.0.0\src\jobsearch_mcp_server run jobsearch-mcp-server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;说干就干。&lt;/p&gt;
&lt;p&gt;测试下，来可以通过 &lt;strong&gt;git&lt;/strong&gt; 拉取项目源代码到1Panel 的supergateway 容器中，并以 &lt;strong&gt;uvx&lt;/strong&gt; 方式更新并运行我们自己的代码 。&lt;/p&gt;
&lt;p&gt;效果如下。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGojobsearch_result.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;1Panel 配置方面不复杂，一页图就能看明白——&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGojobsearch.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;类型&amp;rdquo; 选择uvx，&amp;ldquo;启动命令&amp;quot;就这么一行。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/bin/sh -c &amp;#34;apk add git &amp;amp;&amp;amp; uvx --from git+http://lab.nxlan.cn:3008/pdream/jobsearch-mcp-server.git jobsearch-mcp-server --transport stdio&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;这里使用了 gitea 的 docker版本，用于管理&lt;a class=&#34;link&#34; href=&#34;http://lab.nxlan.cn:3008/pdream/jobsearch-mcp-server.git&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;项目代码&lt;/a&gt;。它可以兼容 git 命令。&lt;/p&gt;
&lt;p&gt;并且页面也类似于 github 的效果，属于轻量化的本地部署方案，回头有机会再讲讲这块的搭建和设置。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;为什么说 uvx 可以刷新最新代码呢？看下日志就会发现，它每次重启都会从gitea 上同步下源码。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGouvx_run_logs2.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;这样每次改好源码，在&amp;quot;AI&amp;rdquo; -&amp;gt; &amp;ldquo;MCP&amp;rdquo; -&amp;gt; &amp;ldquo;Servers&amp;rdquo; 下重启jobsearch 这个应用，就自动完成了更新和发布。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGojobsearch_mcp.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;step4-反向代理服务配置&#34;&gt;Step4 反向代理服务配置
&lt;/h2&gt;&lt;h3 id=&#34;1-自动创建的反代服务&#34;&gt;1. 自动创建的反代服务
&lt;/h3&gt;&lt;p&gt;在 &lt;strong&gt;&amp;ldquo;网站&amp;rdquo; -&amp;gt; &amp;ldquo;HTTPS 域名&amp;rdquo; -&amp;gt; &amp;ldquo;反向代理&amp;rdquo;&lt;/strong&gt; 中可以看到：&lt;/p&gt;
&lt;p&gt;之前启用mcp server 时，1Panel 自动帮我们创建好的两个反向代理配置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGojobsearch_proxysetting2.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;具体配置长啥样呢？点击 &lt;strong&gt;&amp;ldquo;源文&amp;rdquo;&lt;/strong&gt; 就可以看到详细配置。这里以 jobsearch 这个服务为例——&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location ^~ /jobsearch {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_pass http://127.0.0.1:8005/jobsearch; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_buffering off; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_http_version 1.1; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header Connection &amp;#39;&amp;#39;; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    chunked_transfer_encoding off; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;简单地说就是，当客户端浏览器访问站点 (&lt;a class=&#34;link&#34; href=&#34;https://lab.nxlan.cn&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://lab.nxlan.cn&lt;/a&gt;) 时，反向代理服务会根据客户端&lt;strong&gt;请求的路径&lt;/strong&gt;进行请求&lt;strong&gt;转发&lt;/strong&gt;。例如这里: 当匹配客户请求含有 &amp;ldquo;/jobsearch&amp;rdquo; 就转发至 &amp;ldquo;http://127.0.0.1:8005/jobsearch&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;同理，当匹配客户请求含有 &amp;ldquo;/sequential-thinking&amp;rdquo; 就转发至 &amp;ldquo;http://127.0.0.1:8000/sequential-thinking&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;1Panel自动创建的代理设置是简单场景下的配置，没问题就不用手动修改。&lt;/p&gt;
&lt;p&gt;可是，还有些特殊的web 应用，就不能使用默认的配置。&lt;/p&gt;
&lt;h3 id=&#34;2-ddns-go-的反代配置&#34;&gt;2. ddns-go 的反代配置
&lt;/h3&gt;&lt;p&gt;本文涉及需要手动修改的配置，有两个——&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;一个是前面安装的 &lt;strong&gt;ddns-go&lt;/strong&gt;, 它也是有web 管理界面的 。&lt;/li&gt;
&lt;li&gt;还有一个就是 &lt;strong&gt;OpenClaw&lt;/strong&gt; 小龙虾了。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGospeical_prosetting.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;先看ddns-go 的——&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location ^~ /ddns {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    # 1. 请求时：去掉 /ddns 前缀，发给后端
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rewrite ^/ddns(/.*)$ $1 break; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    # 2. 响应时：如果后端想重定向到 /，就把它修正为 /ddns/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    # 这条规则能修正所有类似 /login -&amp;gt; /ddns/login 的重定向
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_redirect / /ddns/; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    # --- 其他代理设置 ---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_pass http://127.0.0.1:9876; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header Host $host; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header X-Real-IP $remote_addr; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header X-Forwarded-Proto $scheme; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    add_header Cache-Control no-cache; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_ssl_server_name off; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果在原始服务中写死了请求 url ，所以当用户发起这种请求到达代理服务时，会破坏默认的转发规则。&lt;/p&gt;
&lt;p&gt;此时，&lt;strong&gt;需要改写用户请求&lt;/strong&gt;。——ddns-go 就是这样的例子。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;正常的请求：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用户请求网页 &lt;a class=&#34;link&#34; href=&#34;https://lab.nxlan.cn/ddns&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://lab.nxlan.cn/ddns&lt;/a&gt; &amp;ndash;&amp;gt; 反代 &amp;ndash;&amp;gt;原始服务 http://127.0.0.1:9876&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;异常的请求：&lt;/strong&gt;（因为 ddns-go 的登录页面 路径为 /login）&lt;/p&gt;
&lt;p&gt;用户请求网页 &lt;a class=&#34;link&#34; href=&#34;https://lab.nxlan.cn/login&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://lab.nxlan.cn/login&lt;/a&gt; &amp;ndash;&amp;gt; 反代 &amp;ndash;&amp;gt;  ？？？ 这是什么玩意 我这没有这个规则&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修正规则后的请求：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;用户请求网页 &lt;a class=&#34;link&#34; href=&#34;https://lab.nxlan.cn/login&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://lab.nxlan.cn/login&lt;/a&gt; &amp;ndash;&amp;gt; 反代 &amp;ndash;&amp;gt;  规则重定向到 &lt;a class=&#34;link&#34; href=&#34;https://lab.nxlan.cn/ddns/login&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://lab.nxlan.cn/ddns/login&lt;/a&gt;  &amp;ndash;&amp;gt;  反代发现匹配现有/ddns 路由的规则 &amp;ndash;&amp;gt; 原始服务 http://127.0.0.1:9876/login&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;策略应用后，客户端看到的页面效果就是——&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoddns-go_web.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-openclaw-的反代配置&#34;&gt;3. OpenClaw 的反代配置
&lt;/h3&gt;&lt;p&gt;OpenClaw 则是另一种情况：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从安全性的角度考量，建议开启gateway 中的 &amp;ldquo;allowedOrigins&amp;rdquo; 校验。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;gateway&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;port&amp;#34;: 18789,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;mode&amp;#34;: &amp;#34;local&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;bind&amp;#34;: &amp;#34;lan&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;controlUi&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;allowedOrigins&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#34;https://lab.nxlan.cn&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#34;http://127.0.0.1:18789&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#34;http://localhost:18789&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      ],
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;dangerouslyAllowHostHeaderOriginFallback&amp;#34;: false,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;dangerouslyDisableDeviceAuth&amp;#34;: false
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    },
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;#34;auth&amp;#34;: {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;mode&amp;#34;: &amp;#34;token&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &amp;#34;token&amp;#34;: &amp;#34;${OPENCLAW_GATEWAY_TOKEN}&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    }
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;该校验内容来自哪里呢？&lt;/p&gt;
&lt;p&gt;需要在代理服务器上追加这部分请求信息，由&amp;quot;X-Forwarded-Proto&amp;quot;和 &amp;ldquo;X-Forwarded-For&amp;rdquo; 字段组成。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location ^~ / {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_pass http://127.0.0.1:18789; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_http_version 1.1; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header Upgrade $http_upgrade; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header Connection &amp;#34;upgrade&amp;#34;; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header Host $host; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header X-Real-IP $remote_addr; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_set_header X-Forwarded-Proto $scheme; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_read_timeout 3600; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_send_timeout 3600; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_ssl_server_name off; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_ssl_name $proxy_host; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;此外还需要追加 OpenClaw 用到的 &lt;strong&gt;WebSocket&lt;/strong&gt; 的支持。&lt;/p&gt;
&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoopenclaw_wslogin.PNG&#34; style=&#34;zoom:70%;&#34; /&gt;
&lt;p&gt;后续，其他应用，也可以参考这两种方式灵活调整。毕竟，谁还没有一两个 AI 助手呢？&lt;/p&gt;
&lt;h2 id=&#34;step5-一键安装龙虾&#34;&gt;Step5 一键安装“龙虾”
&lt;/h2&gt;&lt;p&gt;龙虾最近不是很火么，恰好最近1Panel 丰富了龙虾安装配置，这里简单提一下。&lt;/p&gt;
&lt;h3 id=&#34;1-管理模型&#34;&gt;1. 管理模型
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;&amp;ldquo;AI&amp;rdquo; -&amp;gt; &amp;ldquo;模型&amp;rdquo; -&amp;gt; &amp;ldquo;模型帐号&amp;rdquo;&lt;/strong&gt; 中关联自己的 大模型API 帐号。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo1panel_models.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-创建配置&#34;&gt;2. 创建配置
&lt;/h3&gt;&lt;p&gt;基础配置 图形化 点击就可以快速完成。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGocreate_openclaw.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-下载官方通信插件&#34;&gt;3. 下载官方通信插件
&lt;/h3&gt;&lt;p&gt;图形化功能适配，还比较方便，这里以飞书为例。&lt;/p&gt;
&lt;p&gt;当然，复杂的配置还是得修改 openclaw.json 这个主配置文件。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo1panel_add_channels.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;4-血泪史&#34;&gt;4. 血泪史
&lt;/h3&gt;&lt;p&gt;OpenClaw的配置文件是核心，但是它的接口适配做得很难用。&lt;/p&gt;
&lt;p&gt;每一项优化起来太麻烦了——&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoopenclaw_optimized.PNG&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;目前最让我记忆深刻的有两点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;我是在使用小龙虾 两个星期后，才知道 feishu 通信渠道插件有两个（一个是 openclaw 社区的，一个是feishu 自己的）；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;每次 OpenClaw 版本大更新后 配置文件的格式就变得乱七八糟，有的配置之前和现在完全不一样——&lt;strong&gt;毫无友好性&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果为了修复 升级后的配置问题，大概要花上半天时间 继续调试它。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;目前 1Panel 官方维护 一套他们根据 OpenClaw 发布后自动打包的 docker 镜像。&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://hub.docker.com/r/1panel/openclaw&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://hub.docker.com/r/1panel/openclaw&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;所以，有需要的话 还是找成功的案例 去复制一下吧，&lt;strong&gt;自己折腾还是太折磨了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;最后，祝AI 时代每个人不用更焦虑，做自己的主人，而不是交给AI 做主。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo%e6%89%ab%e7%a0%81_%e6%90%9c%e7%b4%a2%e8%81%94%e5%90%88%e4%bc%a0%e6%92%ad%e6%a0%b7%e5%bc%8f-%e7%99%bd%e8%89%b2%e7%89%88.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>生产环境“删库”救命指南：NAS &#43; vSphere 下的虚拟机数据恢复实操记录</title>
        <link>https://blog.cba.nxlan.cn/p/restore_vm/</link>
        <pubDate>Mon, 16 Mar 2026 01:06:45 +0800</pubDate>
        
        <guid>https://blog.cba.nxlan.cn/p/restore_vm/</guid>
        <description>&lt;img src="https://r2.blog.nxlan.cn/PicGorecovery_vm_title.png" alt="Featured image of post 生产环境“删库”救命指南：NAS &#43; vSphere 下的虚拟机数据恢复实操记录" /&gt;&lt;p&gt;&lt;strong&gt;声明&lt;/strong&gt;： 本文为真实操作记录，旨在为运维同学在面对“数据误删”或“虚机崩溃”时提供一套经过验证的恢复路径。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心金律&lt;/strong&gt;：操作千万条，备份第一条；挂载新签名，数据不破坏。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;一-场景回溯灾难发生的第-0-小时&#34;&gt;一、 场景回溯：灾难发生的第 0 小时
&lt;/h3&gt;&lt;p&gt;最近使用1panel(v2版本)时遇到个坑：如果“网站” 创建时指定了app 应用，在删除“网站”时 不留意会顺带把应用一起删除（见下图）。。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260305154237402.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;我刚养了两天的龙虾(OpenClaw) 数据，全没了。。。 呜呜呜~~&lt;/p&gt;
&lt;p&gt;而且本来就在调试，相关应用备份我是一点没准备好。这数据重新弄可老麻烦了（里面还有它刚给我调试好的 Agent web 页面）。&lt;/p&gt;
&lt;p&gt;冷静下来，&lt;strong&gt;思索的第一件事&lt;/strong&gt;是：我有没有快照？能恢复数据不？&lt;/p&gt;
&lt;p&gt;因为我是在虚拟机上安装的1panel和OpenClaw：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系统备份是4天前的——还原了也用不了&lt;/li&gt;
&lt;li&gt;存储上整个iSCSI的块存储（Lun）倒是&lt;strong&gt;每天有一个快照&lt;/strong&gt;——全部还原意味着 8-9台虚拟机的数据也一并还原了。。。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这可咋办？&lt;/p&gt;
&lt;p&gt;最后，在&lt;u&gt;服务不停机&lt;/u&gt;的情况下，使用这个快照将应用（OpenClaw）数据恢复到了前一天的状态。&lt;/p&gt;
&lt;p&gt;先介绍下我的测试环境：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;存储端&lt;/strong&gt;：NAS (Btrfs 文件系统，开启了&lt;strong&gt;快照&lt;/strong&gt;功能)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;计算端&lt;/strong&gt;：VMware vSphere (ESXi 宿主机)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;协议&lt;/strong&gt;：iSCSI&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;二-灾难发生的第-1小时召回丢失的世界&#34;&gt;二、 灾难发生的第 1小时：召回“丢失的世界”
&lt;/h3&gt;&lt;p&gt;不要直接在原始快照上操作，最稳妥的方法是&lt;strong&gt;克隆&lt;/strong&gt;一个临时的 LUN。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;快照定位&lt;/strong&gt;：在 NAS 管理后台（如 SAN 管理器）找到最近一个完好的快照。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260307153520754.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;克隆 LUN&lt;/strong&gt;：基于快照克隆出一份数据卷（例如命名为 &lt;code&gt;LUN-Recover-Temp&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo00.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo11.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;暴露目标&lt;/strong&gt;：新增一个 iSCSI 目标（给个名字：recovery），并与刚才的克隆 LUN -1关联上。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo22.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260309233751100.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;为了方便后续挂载，新建iSCSI Target 中的“&lt;strong&gt;多重联机&lt;/strong&gt;”可以开启。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260309235059377.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;注意&lt;/strong&gt;：并确保LUN 策略中放行了 ESXi 宿主机的 IQN。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id=&#34;三-灾难发生的第-2小时安全访问克隆数据&#34;&gt;三、 灾难发生的第 2小时：安全访问克隆数据
&lt;/h3&gt;&lt;p&gt;这是最惊险的一步，选错选项可能导致克隆卷的数据结构被清空。&lt;/p&gt;
&lt;h4 id=&#34;1-扫描与识别&#34;&gt;1. 扫描与识别
&lt;/h4&gt;&lt;p&gt;进入 vCenter -&amp;gt; 主机配置 -&amp;gt; 存储适配器，选择你的 iSCSI 适配器点击 &lt;strong&gt;“重新扫描存储”&lt;/strong&gt;。此时在“设备”列表中应能看到那个克隆出来容量一致的新磁盘。状态是未挂载。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo44.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h4 id=&#34;2-挂载数据存储关键&#34;&gt;2. 挂载数据存储（关键！）
&lt;/h4&gt;&lt;p&gt;点击“&lt;strong&gt;新建数据存储&lt;/strong&gt;”，选择 VMFS 类型，选中那个克隆出来的 LUN。此时向导会弹出 &lt;strong&gt;“解析选项”&lt;/strong&gt;，请屏住呼吸选择：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo33.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo55.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo66.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGo77.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;❌ 保留现有签名 (Keep Existing Signature)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;不选理由&lt;/strong&gt;：这会保留原始的 UUID。vSphere 会识别出这是一个已有的 VMFS 卷，会覆盖现有挂载。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;误选后果&lt;/strong&gt;：导致其他未受影响的虚拟机数据，一并还原至前一天的状态。——这不是我们希望的。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;✅  分配新签名 (Assign a new signature)&lt;/strong&gt;：这通常用于想&lt;strong&gt;同时挂载原始和快照卷&lt;/strong&gt;的情况，会导致虚拟机路径变化，不推荐。
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;选择理由&lt;/strong&gt;：当前环境，不希望停止正在运行的虚拟机，只希望把克隆盘中，昨天这台虚拟机中 OpenClaw 的应用数据导出来就行。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;❌ 格式化磁盘 (Format the disk)&lt;/strong&gt;：点下去你就彻底告别数据了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;成功挂在后，可以看到一个新的“数据存储”，点击存储中“文件”可以看到前一天整个虚拟机的数据。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260310001536516.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;四-虚拟机内部抢救数据&#34;&gt;四、 虚拟机内部：抢救数据
&lt;/h3&gt;&lt;p&gt;挂载成功后，&lt;strong&gt;浏览数据存储&lt;/strong&gt;，你会看到“死而复生”的 &lt;code&gt;.vmx&lt;/code&gt; 和 &lt;code&gt;.vmdk&lt;/code&gt; 文件。到这一步可以说：已经成功一半了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260310001719315.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;注册虚拟机&lt;/strong&gt;：右键点击恢复出来的 &lt;code&gt;.vmx&lt;/code&gt; 文件 -&amp;gt; &lt;strong&gt;注册虚拟机&lt;/strong&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;启动恢复的虚机&lt;/strong&gt;：此时可能会提示“I Moved It”或“I Copied It”，选择 &lt;strong&gt;“I Copied It”&lt;/strong&gt; 以新运行一台昨天状态的机器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;断网/改 IP&lt;/strong&gt;：进系统后，第一时间修改主机 IP 地址，防止与生产环境冲突。&lt;/p&gt;
&lt;p&gt;因为这里是Linux主机，我就直接用到 nmtui命令快速修改新机器的IP 地址了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;数据导出与回填&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;因为应用是在 &lt;strong&gt;1Panel&lt;/strong&gt; 下运行的 Docker 服务。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;只需登录进新主机的1Panel管理界面，备份现有应用的应用数据即可。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260305160633373.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;随后，下载刚才打包好的备份数据。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;返回登录数据丢失的主机：在 1Panel 中保持 &lt;strong&gt;Docker 应用名一致&lt;/strong&gt; 的情况下，重新导入刚才这个备份数据——&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://r2.blog.nxlan.cn/PicGoimage-20260310003958425.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;服务启动：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;随后，服务重新启动。此时除了 服务Tokens 和之前的不一样以外，其他的配置文件，本地记录文件，飞书客户端对接地址。。。都是一样的。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;至此，应用就成功恢复了。&lt;/p&gt;
&lt;p&gt;数据还原成功后，克隆虚拟机和克隆卷也就不用了，可以相反的操作回到之前的状态：&lt;/p&gt;
&lt;p&gt;选择“删除虚拟机” &amp;ndash;&amp;gt; “&lt;strong&gt;删除数据存储&lt;/strong&gt;“  &amp;ndash;&amp;gt;  删除iSCSI target  &amp;ndash;&amp;gt;  删除 克隆Lun 即可。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id=&#34;五-最后的复盘&#34;&gt;五、 最后的复盘
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;快照就是生命线&lt;/strong&gt;：如果你还没在 NAS 上开启定期快照，现在就去点开它。哪怕每天一个快照也行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1Panel 的优越性&lt;/strong&gt;：在这种场景下，Docker 应用的备份、还原比直接恢复整台虚机要快得多，也更灵活。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;冷静是第一生产力&lt;/strong&gt;：NAS 和 VMware 都是多重保护的，只要不误点“&lt;strong&gt;格式化&lt;/strong&gt;”或“&lt;strong&gt;保留原有标签&lt;/strong&gt;”，数据总能找回来。&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        
    </channel>
</rss>
