<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>技术番外 on Study Note - 其雁过无痕</title><link>https://gyqblog.top/posts/tech-extras/</link><description>Recent content in 技术番外 on Study Note - 其雁过无痕</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>© 2026 其雁过无痕</copyright><lastBuildDate>Sun, 31 May 2026 11:39:00 +0800</lastBuildDate><atom:link href="https://gyqblog.top/posts/tech-extras/index.xml" rel="self" type="application/rss+xml"/><item><title>番外：3X-UI 节点订阅合并与优化</title><link>https://gyqblog.top/posts/tech-extras/3x-ui-optimize/</link><pubDate>Sun, 31 May 2026 11:39:00 +0800</pubDate><guid>https://gyqblog.top/posts/tech-extras/3x-ui-optimize/</guid><description>&lt;p&gt;在使用 3X-UI 搭建代理节点时，很多朋友可能会遇到这样一个痛点： 因为 3X-UI 的 Vision 流控（&lt;code&gt;xtls-rprx-vision&lt;/code&gt;）是需要在具体客户端上设置的，这就导致开启了 Vision 和未开启 Vision 的节点，被强制拆分成了不同的订阅链接。 当把它们导入到代理软件（比如 V2rayN）时，软件里会显示出多个不同的订阅分组，不仅观感杂乱，后期维护起来也极其不便。&lt;/p&gt;</description></item><item><title>番外：网络代理使用 3X-UI 面板与 Hysteria2 独立加装教程</title><link>https://gyqblog.top/posts/tech-extras/3x-ui--hysteria2/</link><pubDate>Sat, 30 May 2026 18:23:00 +0800</pubDate><guid>https://gyqblog.top/posts/tech-extras/3x-ui--hysteria2/</guid><description>&lt;h2 class="relative group"&gt;🌐 核心架构设计：为什么这么做？
 &lt;div id="-核心架构设计为什么这么做" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#-%e6%a0%b8%e5%bf%83%e6%9e%b6%e6%9e%84%e8%ae%be%e8%ae%a1%e4%b8%ba%e4%bb%80%e4%b9%88%e8%bf%99%e4%b9%88%e5%81%9a" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;过去使用一键翻墙脚本，脚本作者通常采用“霰弹枪策略”：在一个黑盒环境里强行塞入 10 多个协议节点，将其全部打包在一个 Sing-box 内核里。这种方式看似全面，但在 1GB 内存的入门级 VPS（虚拟专用服务器）上会产生严重的弊端：大量闲置进程白白吃掉宝贵的系统资源，且黑盒脚本会死锁底层网络逻辑，导致后续更新极易崩溃或丢失配置。&lt;/p&gt;</description></item><item><title>番外：VS Code + Remote-SSH 模式</title><link>https://gyqblog.top/posts/tech-extras/vscode-remote/</link><pubDate>Sun, 17 May 2026 17:32:00 +0800</pubDate><guid>https://gyqblog.top/posts/tech-extras/vscode-remote/</guid><description>&lt;p&gt;对于拥有海外小性能 VPS 的开发者来说，高物理延迟往往是绕不开的痛。如果还在使用传统的终端工具（如 FinalShell），忍受着 &lt;code&gt;nano&lt;/code&gt; 或 &lt;code&gt;vim&lt;/code&gt; 编辑长文本时吞换行、卡顿的折磨，那么 &lt;strong&gt;VS Code + Remote-SSH&lt;/strong&gt; 绝对是救星。&lt;/p&gt;</description></item><item><title>番外：1G 小内存 VPS 部署 Java JSP 项目实战：Docker 本地构建 + 远程运行完美方案</title><link>https://gyqblog.top/posts/tech-extras/jsp-deployment/</link><pubDate>Wed, 29 Apr 2026 02:04:00 +0800</pubDate><guid>https://gyqblog.top/posts/tech-extras/jsp-deployment/</guid><description>&lt;p&gt;在拥有了一台属于自己的 VPS（如 1核 1G内存，配置了 2G Swap）后，很多新手在尝试部署 Java 项目时，往往会选择直接在服务器上安装 Maven 或运行 &lt;code&gt;docker build&lt;/code&gt;。但现实很残酷：Java 编译极其消耗内存，1G 的内存在构建瞬间就会被挤爆，导致系统卡死或触发 OOM (Out Of Memory) 杀掉进程。&lt;/p&gt;</description></item><item><title>番外：Dockerfile 常用指令详解</title><link>https://gyqblog.top/posts/tech-extras/dockerfile-tips/</link><pubDate>Wed, 29 Apr 2026 00:13:00 +0800</pubDate><guid>https://gyqblog.top/posts/tech-extras/dockerfile-tips/</guid><description>&lt;h3 class="relative group"&gt;基础环境设置
 &lt;div id="基础环境设置" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%9f%ba%e7%a1%80%e7%8e%af%e5%a2%83%e8%ae%be%e7%bd%ae" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;FROM&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;指定基础镜像&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：这是每个 &lt;code&gt;Dockerfile&lt;/code&gt; 的&lt;strong&gt;第一条指令&lt;/strong&gt;（除注释外）。它决定了你的应用运行在什么环境之上。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;FROM ubuntu:24.04&lt;/code&gt; （基于 Ubuntu 24.04 系统）或 &lt;code&gt;FROM nginx:alpine&lt;/code&gt; （基于轻量级的 Nginx 镜像）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;WORKDIR&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;设置工作目录&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：相当于 Linux 里的 &lt;code&gt;cd&lt;/code&gt; 命令。后续的 &lt;code&gt;RUN&lt;/code&gt;、&lt;code&gt;CMD&lt;/code&gt;、&lt;code&gt;COPY&lt;/code&gt; 等指令都会在这个目录下执行。如果目录不存在，Docker 会自动帮你创建。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;WORKDIR /app&lt;/code&gt; （将后续操作的默认路径设为容器内的 &lt;code&gt;/app&lt;/code&gt; 目录）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;2. 文件复制
 &lt;div id="2-文件复制" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2-%e6%96%87%e4%bb%b6%e5%a4%8d%e5%88%b6" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;COPY&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;复制文件/目录到容器中&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：将宿主机（你的电脑或服务器）上的文件或目录，原封不动地拷贝到容器的指定路径下。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;COPY . /app&lt;/code&gt; （将当前宿主机目录下的所有文件，复制到容器的 &lt;code&gt;/app&lt;/code&gt; 目录下）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ADD&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;高级复制&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：和 &lt;code&gt;COPY&lt;/code&gt; 类似，但带有额外功能。如果复制的是一个本地的 &lt;code&gt;.tar.gz&lt;/code&gt; 压缩包，&lt;code&gt;ADD&lt;/code&gt; 会自动解压到目标路径；它也支持填入一个网络 URL 来下载文件。&lt;strong&gt;（新手推荐优先使用 &lt;code&gt;COPY&lt;/code&gt;，语义更清晰）&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;3. 执行命令与配置
 &lt;div id="3-执行命令与配置" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#3-%e6%89%a7%e8%a1%8c%e5%91%bd%e4%bb%a4%e4%b8%8e%e9%85%8d%e7%bd%ae" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RUN&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;在构建镜像时执行命令&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：这是构建阶段的主力军。通常用来安装软件包、创建文件夹、配置环境等。&lt;strong&gt;注意：每次 &lt;code&gt;RUN&lt;/code&gt; 都会生成一个新的镜像层&lt;/strong&gt;，所以通常会把多条命令用 &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; 连起来写。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;RUN apt-get update &amp;amp;&amp;amp; apt-get install -y curl&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ENV&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;设置环境变量&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：定义环境变量，后续的 &lt;code&gt;RUN&lt;/code&gt; 指令可以使用，并且这些变量也会一直保留到容器运行阶段供你的程序读取。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;ENV MYSQL_ROOT_PASSWORD=my-secret-pw&lt;/code&gt; 或 &lt;code&gt;ENV PORT=8080&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;EXPOSE&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;声明监听端口&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：这只是一个&lt;strong&gt;声明&lt;/strong&gt;，告诉使用这个镜像的人，该容器内部的程序会使用哪个端口。它&lt;em&gt;不会&lt;/em&gt;自动将端口映射到宿主机，映射依然需要在运行 &lt;code&gt;docker run&lt;/code&gt; 时加上 &lt;code&gt;-p&lt;/code&gt; 参数或在 &lt;code&gt;docker-compose.yml&lt;/code&gt; 中配置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;EXPOSE 80&lt;/code&gt; （声明容器内的 Web 服务使用 80 端口）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;4. 容器启动指令
 &lt;div id="4-容器启动指令" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#4-%e5%ae%b9%e5%99%a8%e5%90%af%e5%8a%a8%e6%8c%87%e4%bb%a4" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CMD&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;容器启动时的默认命令&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：指定容器跑起来之后要做的第一件事（例如启动 Nginx、运行 Java 后端应用等）。如果用户在 &lt;code&gt;docker run&lt;/code&gt; 时手动指定了其他命令，&lt;code&gt;CMD&lt;/code&gt; 的内容会被&lt;strong&gt;覆盖&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：&lt;code&gt;CMD [&amp;quot;nginx&amp;quot;, &amp;quot;-g&amp;quot;, &amp;quot;daemon off;&amp;quot;]&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ENTRYPOINT&lt;/code&gt;&lt;/strong&gt;：&lt;strong&gt;容器启动的主入口&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：和 &lt;code&gt;CMD&lt;/code&gt; 类似，但它&lt;strong&gt;不会被轻易覆盖&lt;/strong&gt;。通常用于让容器表现得像一个独立的可执行程序。如果同时存在 &lt;code&gt;ENTRYPOINT&lt;/code&gt; 和 &lt;code&gt;CMD&lt;/code&gt;，&lt;code&gt;CMD&lt;/code&gt; 的内容会作为参数传递给 &lt;code&gt;ENTRYPOINT&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h3 class="relative group"&gt;综合示例
 &lt;div id="综合示例" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%bb%bc%e5%90%88%e7%a4%ba%e4%be%8b" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;为了方便理解，这里提供一个部署简单前端/静态网页的通用 &lt;code&gt;Dockerfile&lt;/code&gt; 模板：&lt;/p&gt;</description></item><item><title>番外：客户端和服务器谁为工作方的建议</title><link>https://gyqblog.top/posts/tech-extras/cs-choose/</link><pubDate>Mon, 27 Apr 2026 08:09:00 +0800</pubDate><guid>https://gyqblog.top/posts/tech-extras/cs-choose/</guid><description>&lt;h3 class="relative group"&gt;方案一：Windows 不装 Docker
 &lt;div id="方案一windows-不装-docker" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%96%b9%e6%a1%88%e4%b8%80windows-%e4%b8%8d%e8%a3%85-docker" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;这种方式下，你的 Windows 只负责写代码和生成基础的打包文件，镜像的构建全在服务器上。&lt;/p&gt;</description></item></channel></rss>