<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on Study Note - 其雁过无痕</title><link>https://gyqblog.top/tags/linux/</link><description>Recent content in Linux on Study Note - 其雁过无痕</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>© 2026 其雁过无痕</copyright><lastBuildDate>Sun, 31 May 2026 12:12:00 +0800</lastBuildDate><atom:link href="https://gyqblog.top/tags/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>任务 9：编写并运行定时爬虫-自动化脚本（被京东拒绝）</title><link>https://gyqblog.top/posts/vps-combat/task-9-crawler-script/</link><pubDate>Sun, 31 May 2026 12:12:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-9-crawler-script/</guid><description>&lt;p&gt;这是一次非常典型、硬核且充满戏剧性的“开发者实战之旅”。虽然在这个具体的电商爬虫项目上你选择了战略性放弃，但在短短的折腾过程中，你几乎把 Linux 运维、网络通信、Python 环境配置和爬虫反风控的经典“大坑”全踩了一遍，并且解决了其中 90% 的问题。&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>任务 8：后端接口上线与 Nginx 代理</title><link>https://gyqblog.top/posts/vps-combat/task-8-nginx-proxy/</link><pubDate>Sat, 30 May 2026 18:08:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-8-nginx-proxy/</guid><description>&lt;p&gt;在经历了前面的基础环境搭建后，本任务我们将真正把后端服务暴露给公网。&lt;/p&gt;</description></item><item><title>任务 7：部署限制内存的数据库</title><link>https://gyqblog.top/posts/vps-combat/task-7-database/</link><pubDate>Sun, 17 May 2026 18:39:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-7-database/</guid><description>&lt;p&gt;在服务器部署的进阶之路上，部署限制内存的数据库是一个必经的关卡 。对于这种小内存的 VPS（比如 RackNerd），如果直接裸跑默认配置的 MySQL 8.0，它会一口气吞掉 400MB 甚至更多的内存，极易导致服务器 OOM（内存溢出）死机。&lt;/p&gt;</description></item><item><title>任务 6：搭建全网关架构 —— 域名解析、SSL 证书与 Docker Nginx 部署</title><link>https://gyqblog.top/posts/vps-combat/task-6-gateway/</link><pubDate>Fri, 15 May 2026 00:57:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-6-gateway/</guid><description>&lt;h2 class="relative group"&gt;📝 1. 背景与目标
 &lt;div id="-1-背景与目标" 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="#-1-%e8%83%8c%e6%99%af%e4%b8%8e%e7%9b%ae%e6%a0%87" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;在云服务器（VPS）上部署项目时，直接暴露端口既不安全也不优雅。本次实战的目标是：&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>任务 4：全面拥抱 Docker 与容器化部署初体验</title><link>https://gyqblog.top/posts/vps-combat/task-4-docker/</link><pubDate>Sat, 25 Apr 2026 17:32:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-4-docker/</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="#%e8%83%8c%e6%99%af%e4%b8%8e%e7%9b%ae%e6%a0%87" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;在完成了服务器基础的安全加固与虚拟内存分配后，环境搭建正式进入容器化阶段。本次实践的核心目标是全面拥抱 Docker。摒弃传统的“直接在宿主机装一切”的做法，转而通过编写 &lt;code&gt;docker-compose.yml&lt;/code&gt; 文件来统一管理和启动服务 。&lt;/p&gt;</description></item><item><title>任务 3：熟练使用终端复用工具</title><link>https://gyqblog.top/posts/vps-combat/task-3-tmux/</link><pubDate>Wed, 22 Apr 2026 01:08:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-3-tmux/</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%e7%9b%ae%e6%a0%87" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;操作&lt;/strong&gt;：安装并学习使用 &lt;code&gt;tmux&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;收获&lt;/strong&gt;：掌握在服务器上跑长耗时任务的能力。即使本地 SSH 突然断开，任务依然会在后台运行，不会前功尽弃。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;核心工具：tmux
 &lt;div id="核心工具tmux" 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%e5%b7%a5%e5%85%b7tmux" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;tmux&lt;/code&gt; (Terminal Multiplexer) 是现代服务端开发的必备工具，解决了远程连接中途掉线导致任务中断的痛点。&lt;/p&gt;</description></item><item><title>任务 2：分配虚拟内存 (Swap)</title><link>https://gyqblog.top/posts/vps-combat/task-2-swap/</link><pubDate>Tue, 21 Apr 2026 11:05:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-2-swap/</guid><description>&lt;h1 class="relative group"&gt;Linux 服务器运维笔记：分配虚拟内存 (Swap) 避坑与实操
 &lt;div id="linux-服务器运维笔记分配虚拟内存-swap-避坑与实操" 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="#linux-%e6%9c%8d%e5%8a%a1%e5%99%a8%e8%bf%90%e7%bb%b4%e7%ac%94%e8%ae%b0%e5%88%86%e9%85%8d%e8%99%9a%e6%8b%9f%e5%86%85%e5%ad%98-swap-%e9%81%bf%e5%9d%91%e4%b8%8e%e5%ae%9e%e6%93%8d" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;0. 背景与目标
 &lt;div id="0-背景与目标" 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="#0-%e8%83%8c%e6%99%af%e4%b8%8e%e7%9b%ae%e6%a0%87" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;在小内存（如 1GB RAM）的云服务器上运行 Java、MySQL 或进行前端构建时，物理内存极易耗尽导致进程被系统杀掉（OOM）。&lt;strong&gt;Swap（交换空间）&lt;/strong&gt; 充当了“虚拟内存”的角色，是服务器在高负载下的“救命支撑”。&lt;/p&gt;</description></item><item><title>任务 1：配置免密登录与安全加固</title><link>https://gyqblog.top/posts/vps-combat/task-1-ssh/</link><pubDate>Mon, 20 Apr 2026 16:08:00 +0800</pubDate><guid>https://gyqblog.top/posts/vps-combat/task-1-ssh/</guid><description>&lt;h2 class="relative group"&gt;0. 前言
 &lt;div id="0-前言" 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="#0-%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;拿到一台全新的 Ubuntu 24.04 服务器（RackNerd 1核/1GB）后，第一步永远不是装软件，而是“关门”。本文记录了如何通过非对称加密实现免密登录，并完成初期的安全加固。&lt;/p&gt;</description></item></channel></rss>