<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Enhancement on Vertsineu's Blog</title><link>https://blog.vertsineu.top/tags/enhancement/</link><description>Recent content in Enhancement on Vertsineu's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 17 Apr 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://blog.vertsineu.top/tags/enhancement/index.xml" rel="self" type="application/rss+xml"/><item><title>如何给 Docker 配置透明代理</title><link>https://blog.vertsineu.top/posts/docker-proxy/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0800</pubDate><guid>https://blog.vertsineu.top/posts/docker-proxy/</guid><description>&lt;h2 id="loc-1"&gt;前言&lt;/h2&gt;
&lt;p&gt;通常，代理通常有两种方式，一种是开放端口，让需要代理的应用&lt;strong&gt;主动&lt;/strong&gt;通过暴露的端口被代理访问远程服务；一种是使用 tun mode，即虚拟网卡模式，所有流量都会被虚拟网卡设备拦截从而&lt;strong&gt;被动&lt;/strong&gt;代理访问远程服务。&lt;/p&gt;
&lt;p&gt;对我来说，我并不希望在我的服务器上采取被动方式，因为它会对服务器上的所有应用产生影响，而且一旦代理软件崩溃退出，我将无法访问互联网，而且会影响比如 ping 等工具的执行（拦截 ICMP 数据包），这是极其不好的，因此平时在我的服务器上，我更倾向于使用主动方式，只有应用需要被代理才会主动去访问代理端口。&lt;/p&gt;
&lt;p&gt;说是主动，也并不完全主动，无非就是设置环境变量：&lt;/p&gt;
&lt;div class="typst-raw-block"&gt;
&lt;pre&gt;&lt;code data-lang="bash"&gt;&lt;span style="color: #d73948"&gt;export&lt;/span&gt; http_proxy&lt;span style="color: #d73948"&gt;=&lt;/span&gt;&lt;span style="color: #198810"&gt;http://127.0.0.1:7890&lt;/span&gt;&lt;br&gt;&lt;span style="color: #d73948"&gt;export&lt;/span&gt; https_proxy&lt;span style="color: #d73948"&gt;=&lt;/span&gt;&lt;span style="color: #198810"&gt;http://127.0.0.1:7890&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;但是，对于 Docker 来说，通过设置环境变量的方式来配置代理会非常麻烦，如果不使用 docker compose，每次运行 docker run 的时候都需要输入长长的一串环境变量；如果使用 docker compose，要修改的部分也非常多，如下所示：&lt;/p&gt;
&lt;div class="typst-raw-block"&gt;
&lt;pre&gt;&lt;code data-lang="yaml"&gt;&lt;span style="color: #4b69c6"&gt;services&lt;/span&gt;:&lt;br&gt; &lt;span style="color: #4b69c6"&gt;app&lt;/span&gt;:&lt;br&gt; &lt;span style="color: #4b69c6"&gt;image&lt;/span&gt;: &lt;span style="color: #198810"&gt;my-app&lt;/span&gt;&lt;br&gt; &lt;span style="color: #4b69c6"&gt;environment&lt;/span&gt;:&lt;br&gt; - &lt;span style="color: #198810"&gt;HTTP_PROXY=http://host.docker.internal:7890&lt;/span&gt;&lt;br&gt; - &lt;span style="color: #198810"&gt;HTTPS_PROXY=http://host.docker.internal:7890&lt;/span&gt;&lt;br&gt; - &lt;span style="color: #198810"&gt;NO_PROXY=localhost,127.0.0.1&lt;/span&gt;&lt;br&gt; &lt;span style="color: #4b69c6"&gt;extra_hosts&lt;/span&gt;:&lt;br&gt; - &lt;span style="color: #198810"&gt;"&lt;/span&gt;&lt;span style="color: #198810"&gt;host.docker.internal:host-gateway&lt;/span&gt;&lt;span style="color: #198810"&gt;"&lt;/span&gt; &lt;span style="color: #74747c"&gt;#&lt;/span&gt;&lt;span style="color: #74747c"&gt; only for linux&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;除此之外，使用主动代理还有其他弊端：&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果 docker compose 中有多个 service，你可能需要花费功夫判断哪些 service 需要代理，哪些不需要代理。&lt;/li&gt;
&lt;li&gt;如果镜像中的应用不支持通过环境变量配置代理，那么以上配置就完全无效了。&lt;/li&gt;
&lt;li&gt;最重要的，在 docker build 的过程中，Docker 会起一个临时容器来运行 dockerfile 中的命令，而在这个过程中，如果没有配置代理或镜像，那么一些基本的命令，比如 &lt;span class="typst-raw-inline"&gt;&lt;code&gt;apt update&lt;/code&gt;&lt;/span&gt;、&lt;span class="typst-raw-inline"&gt;&lt;code&gt;apt install&lt;/code&gt;&lt;/span&gt; 以及 &lt;span class="typst-raw-inline"&gt;&lt;code&gt;pip install&lt;/code&gt;&lt;/span&gt; 等等，就会导致镜像构建缓慢，非常折磨人，而在 dockerfile 中配置代理也是一个非常麻烦的事情，很多时候都是发现 docker build 执行缓慢或者失败的时候才想到要配置代理，浪费大把时间。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;</description></item><item><title>如何在 Hugo 中使用 Typst 编写文章</title><link>https://blog.vertsineu.top/posts/hello-hugo/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0800</pubDate><guid>https://blog.vertsineu.top/posts/hello-hugo/</guid><description>&lt;h2 id="loc-1"&gt;前言&lt;/h2&gt;
&lt;p&gt;Typst 一直以来都是我非常喜欢的一个排版工具，相比于 LaTeX，Typst 的语法简单，编写体验好；相比于 Markdown，Typst 的功能强大，标准统一，符合我对排版工具的所有想象。&lt;/p&gt;
&lt;p&gt;自从我接触到 Typst 之后，不仅我的日常的作业、报告、简历等文档都使用 Typst 写的，而且我也开发了一个 Typst Package 用于在 Typst 中绘制树状图，比如二叉树、红黑树、语法树等等 —— &lt;a href="https://github.com/Vertsineu/typst-tdtr" target="_blank" rel="noopener noreferrer"&gt;&lt;span style="color: #59a4ff;"&gt;&lt;span style="text-decoration: underline"&gt;tdtr&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; (i.e. tidy tree)，感兴趣的话可以看看。&lt;/p&gt;
&lt;p&gt;因此，我一直想在我的 Blog 中使用 Typst 来编写文章，但是苦于 Typst 对 HTML 导出的支持仍然处于实验性阶段，因此搭建 Blog 的想法也一直一拖再拖。&lt;/p&gt;
&lt;p&gt;但是，直到最近，我对于搭建 Blog 的需求越来越迫切了，所以我就决定不再等待 Typst 对 HTML 导出的支持了，而是自己动手来实现这个功能。这篇文章讲述的就是我如何实现在 Hugo 中使用 Typst 编写文章的。&lt;/p&gt;
&lt;p&gt;Blog 的源代码位于 &lt;a href="https://github.com/Vertsineu/blog" target="_blank" rel="noopener noreferrer"&gt;&lt;span style="color: #59a4ff;"&gt;&lt;span style="text-decoration: underline"&gt;github.com/Vertsineu/blog&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;，欢迎 star 和 fork。&lt;/p&gt;
&lt;h2 id="loc-2"&gt;使用&lt;/h2&gt;
&lt;p&gt;如果你也想像我的 Blog 一样使用 Typst 来编写基于 Hugo 的 Blog 的话，可以按照以下步骤来操作：&lt;/p&gt;
&lt;p&gt;首先安装我修改过的 Hugo，目前还没有发布版本，因此需要手动编译安装：&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先，clone 下来我修改过的 Hugo 的代码，并切换到 &lt;span class="typst-raw-inline"&gt;&lt;code&gt;support-typst&lt;/code&gt;&lt;/span&gt; 分支，即：&lt;/p&gt;</description></item></channel></rss>