<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/feed.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>闇喵の姬憶</title><description>寄術手札</description><link>https://www.anmiao.moe</link><item><title>2026.10｜GPT画图时光</title><link>https://www.anmiao.moe/post/anime-ai-art-2026-10</link><guid isPermaLink="false">anime-ai-art-2026-10</guid><description>找到了一个不错的生图[咒语]拿LOL官方图来玩玩</description><pubDate>Mon, 26 Oct 2026 16:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;此次生图用到的[咒语]&lt;a href=&quot;#此次生图用到的咒语&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;以参考图中的人物为主体，创作一张日系 Q 版半身插画。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;方形构图，纯白背景，单个角色居中，头大身小，脸部圆润，人物占据画面大部分，四周留少量白边。保留参考角色的发型、发色、瞳色、服装、标志性饰品和身体特征，将复杂细节适度简化，但保持角色辨识度。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;人物睁着圆润明亮的大眼睛，眼中有简洁的白色高光，脸颊画着粉红色短线腮红。表情和动作符合角色性格，手部自然清楚。.&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;画风采用油画棒、蜡笔与干粉彩手绘质感：深色粗线勾勒，轮廓略微抖动、断续，色块以粗糙短笔触叠涂，保留明显的纸张颗粒、干刷刮痕和细碎露白。平面化上色，阴影简洁，整体清新、软萌，带有随性稚拙的手绘感。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;画面简洁，配色以角色原设定为准。只画一位角色，不要角色设定表、三视图、文字、水印、复杂背景、写实、3D 渲染或光滑矢量线条。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/ahri-01.avif&quot; alt=&quot;1&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/ahri-02.avif&quot; alt=&quot;2&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/ahri-03.avif&quot; alt=&quot;3&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/ahri-04.avif&quot; alt=&quot;4&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/ahri-05.avif&quot; alt=&quot;5&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/annie-01.avif&quot; alt=&quot;6&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/annie-02.avif&quot; alt=&quot;7&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/caitlyn-01.avif&quot; alt=&quot;8&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/caitlyn-02.avif&quot; alt=&quot;9&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/evelynn-01.avif&quot; alt=&quot;10&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/evelynn-02.avif&quot; alt=&quot;11&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/ezreal-01.avif&quot; alt=&quot;12&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/fiora-01.avif&quot; alt=&quot;13&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/irelia-01.avif&quot; alt=&quot;14&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/irelia-02.avif&quot; alt=&quot;15&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/irelia-03.avif&quot; alt=&quot;16&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/janna-01.avif&quot; alt=&quot;17&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/jinx-01.avif&quot; alt=&quot;18&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/jinx-02.avif&quot; alt=&quot;19&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/kaisa-01.avif&quot; alt=&quot;20&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/kaisa-02.avif&quot; alt=&quot;21&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/kaisa-03.avif&quot; alt=&quot;22&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/kaisa-04.avif&quot; alt=&quot;23&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/kaisa-05.avif&quot; alt=&quot;24&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/lux-01.avif&quot; alt=&quot;25&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/lux-02.avif&quot; alt=&quot;26&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/missfortune-01.avif&quot; alt=&quot;27&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/missfortune-02.avif&quot; alt=&quot;28&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/missfortune-03.avif&quot; alt=&quot;29&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/missfortune-04.avif&quot; alt=&quot;30&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/missfortune-05.avif&quot; alt=&quot;31&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/nami-01.avif&quot; alt=&quot;32&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/nami-02.avif&quot; alt=&quot;33&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/neeko-01.avif&quot; alt=&quot;34&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/orianna-01.avif&quot; alt=&quot;35&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/senna-01.avif&quot; alt=&quot;36&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/soraka-01.avif&quot; alt=&quot;37&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/soraka-02.avif&quot; alt=&quot;38&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/me-ai01/soraka-03.avif&quot; alt=&quot;39&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
&lt;/div&gt;</content:encoded><category>category:萌图</category><category>category:AI 绘图</category><category>tag:Moe</category><category>tag:插画</category><category>tag:二次元</category><category>tag:图片</category><category>tag:AI绘图</category></item><item><title>免费解锁Bitwarden所有功能,自建Vaultwarden过程</title><link>https://www.anmiao.moe/post/Vaultwarden-bci</link><guid isPermaLink="false">Vaultwarden-bci</guid><description>记录一次从源码编译 Vaultwarden、制作 SUSE BCI 运行镜像、使用 Podman kube 部署、限制容器出站网络，并用 7z 实现自动异地备份的完整过程。</description><pubDate>Sun, 25 Oct 2026 03:11:11 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;本文记录的是一次实际部署过程。最终环境为：Vaultwarden 1.37.3、Web Vault 2026.7.0、SUSE BCI 16.0、Podman、Nginx、SQLite，并通过 nftables 禁止 Vaultwarden 容器主动访问互联网。&lt;/p&gt;
&lt;p&gt;Vaultwarden 保存的是账号密码、TOTP 密钥和 Passkey 等高敏感数据。本文配置适合个人自托管，但不代表“使用某个基础镜像”就自动获得绝对安全。及时更新、强主密码、独立二步验证、可靠备份和恢复演练仍然是核心。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;一、为什么选择自托管 Vaultwarden&lt;a href=&quot;#一为什么选择自托管-vaultwarden&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我希望统一管理以下内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网站账号与密码；&lt;/li&gt;
&lt;li&gt;Google、GitHub 等网站每 30 秒变化一次的 TOTP 验证码；&lt;/li&gt;
&lt;li&gt;支持 Passkey 的网站凭据；&lt;/li&gt;
&lt;li&gt;浏览器扩展、桌面端和手机 App 之间的同步。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bitwarden 的客户端生态比较完整，而 Vaultwarden 是兼容 Bitwarden 客户端协议的轻量服务端实现。对个人使用来说，它比完整 Bitwarden 官方服务端更容易部署，也更适合资源有限的 VPS。&lt;/p&gt;
&lt;p&gt;这次部署的整体结构如下：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Bitwarden 浏览器扩展 / 手机 App&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                │&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                │ HTTPS&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                ▼&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        Nginx（宿主机 443）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                │&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                │ HTTP 0.0.0.0:7443&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                ▼&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;       Podman 端口映射与独立网络&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                │&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                ▼&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt; Vaultwarden 1.37.3（容器内 8080）&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                │&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;                ▼&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      /anmiao/vaultwarden/data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;容器允许被宿主机 Nginx 访问，但禁止主动连接互联网。&lt;/p&gt;
&lt;h2&gt;二、为什么使用 SUSE BCI 16.0&lt;a href=&quot;#二为什么使用-suse-bci-160&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;BCI 是 SUSE 提供的基础容器镜像体系。这次使用它主要有以下原因，而不是 Debian/Alpine。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;SUSE BCI（SUSE Linux Base Container Images）是 SUSE 官方维护的一套企业级基础容器镜像，底层继承自 SUSE Linux Enterprise（SLE）。它的定位并不是提供某一个具体应用，而是为开发者提供一个经过维护、可用于构建自定义容器镜像的基础环境。SUSE Registry 中的 BCI 镜像会持续接收更新和安全修复，并沿用 SLE 的软件包质量控制与 CVE 处理机制，因此相比随意选择一个第三方基础镜像，更适合作为长期运行服务的底座。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;BCI 的另一个优势是镜像层次划分非常清晰。SUSE 提供 Base、Minimal、Micro 等不同规格，也提供 GCC、Python、Node 等面向开发场景的 Development Stack 镜像。这样可以在多阶段构建中使用功能完整的开发镜像负责源码编译，再将最终二进制复制到更精简的 Minimal 镜像中运行。对于 Vaultwarden 这类 Rust 应用，我采用 &lt;code&gt;bci/gcc:15&lt;/code&gt; 作为 Builder，通过 SUSE 官方仓库直接安装 Rust 和 Cargo，再使用 BCI Minimal 作为最终运行环境，从而避免把 GCC、Cargo、Rust 编译器等大量开发工具带入生产镜像。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;此外，SUSE BCI 具有较好的可审计性和可维护性。镜像保留 RPM 数据库，可以追踪文件来自哪个 RPM 软件包及其具体版本，这对漏洞扫描和依赖审计比较有价值；同时 BCI 可以在普通 Linux、Podman、Docker 和 Kubernetes 环境中运行，并不要求宿主机本身必须是 SUSE。BCI 镜像还允许自由分发基于其构建的自定义镜像，比较适合自行维护应用镜像或私有镜像仓库的场景。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;对我这次 Vaultwarden 部署而言，选择 SUSE BCI 的核心原因并不是追求极限的小体积，而是希望获得一条更清晰的构建链：使用 SUSE 提供的 GCC、Rust RPM 和企业级基础环境完成编译，再将最终程序部署到精简的 BCI Minimal 中。这样既能控制运行镜像中的组件数量，又保留了明确的软件来源、更新渠道和长期维护路径。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;1. 构建环境与运行环境可以明确分离&lt;a href=&quot;#1-构建环境与运行环境可以明确分离&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;编译阶段使用：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;registry.suse.com/bci/gcc:15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;运行阶段使用：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;registry.suse.com/bci/bci-minimal:16.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;GCC 镜像负责提供编译工具，最终镜像只保留 Vaultwarden 二进制、Web Vault 静态文件和必要运行环境，不包含 Rust、Cargo、GCC 或源码。&lt;/p&gt;
&lt;h3&gt;2. 可以直接通过 Zypper 安装 Rust 和 Cargo&lt;a href=&quot;#2-可以直接通过-zypper-安装-rust-和-cargo&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Vaultwarden 1.37.3 需要 Rust 1.98.1。SUSE BCI 仓库中可以直接安装预编译 RPM：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;zypper&lt;/span&gt;&lt;span&gt; --non-interactive&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; --no-recommends&lt;/span&gt;&lt;span&gt; -y&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  rust1.98&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  cargo1.98&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;实际版本为：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;rustc 1.98.1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;cargo 1.98.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这意味着不需要执行 &lt;code&gt;rustup&lt;/code&gt; 安装脚本，也不是在镜像中“编译 Rust”。真正需要编译的是 Vaultwarden 本身。&lt;/p&gt;
&lt;h3&gt;3. BCI Minimal 更适合作为最终运行镜像&lt;a href=&quot;#3-bci-minimal-更适合作为最终运行镜像&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;BCI Minimal 保留了 glibc 和基本运行环境，但移除了大量开发工具和软件管理组件。相比编译镜像，它的攻击面和磁盘占用都更小。&lt;/p&gt;
&lt;p&gt;不过，镜像更小并不等于运行内存一定更低，也不代表天然更安全。更重要的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最终镜像不包含编译工具；&lt;/li&gt;
&lt;li&gt;使用非 root 用户运行( 嫌弃麻烦没有在用,而且我已经仅限于内网使用)；&lt;/li&gt;
&lt;li&gt;固定应用版本；&lt;/li&gt;
&lt;li&gt;正确配置网络与权限；&lt;/li&gt;
&lt;li&gt;持续更新和验证恢复流程。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;三、为什么选择自己编译&lt;a href=&quot;#三为什么选择自己编译&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;直接使用 Vaultwarden 官方镜像最省事，而自己编译的好处是可以明确控制：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vaultwarden 版本；&lt;/li&gt;
&lt;li&gt;Rust/Cargo 版本；&lt;/li&gt;
&lt;li&gt;Web Vault 版本；&lt;/li&gt;
&lt;li&gt;SQLite 功能；&lt;/li&gt;
&lt;li&gt;OpenSSL 构建方式；&lt;/li&gt;
&lt;li&gt;容器目录结构；&lt;/li&gt;
&lt;li&gt;最终运行用户；&lt;/li&gt;
&lt;li&gt;基础镜像与构建链。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本次只启用 SQLite，并使用 vendored OpenSSL：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;cargo&lt;/span&gt;&lt;span&gt; build&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --release&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --locked&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --no-default-features&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --features&lt;/span&gt;&lt;span&gt; sqlite,vendored_openssl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;缺点也很明确：升级 Vaultwarden 时，需要自行重新构建、测试客户端兼容性、检查 Web Vault 版本，并维护整个镜像供应链。&lt;/p&gt;
&lt;h2&gt;四、版本与路径约定&lt;a href=&quot;#四版本与路径约定&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&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;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Vaultwarden&lt;/td&gt;&lt;td&gt;1.37.3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Web Vault&lt;/td&gt;&lt;td&gt;2026.7.0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rust / Cargo&lt;/td&gt;&lt;td&gt;1.98.1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;构建镜像&lt;/td&gt;&lt;td&gt;&lt;code&gt;registry.suse.com/bci/gcc:15&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;运行镜像&lt;/td&gt;&lt;td&gt;&lt;code&gt;registry.suse.com/bci/bci-minimal:16.0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Vaultwarden 二进制&lt;/td&gt;&lt;td&gt;&lt;code&gt;/anmiao/vaultwarden&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;数据目录&lt;/td&gt;&lt;td&gt;&lt;code&gt;/anmiao/data&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Web Vault&lt;/td&gt;&lt;td&gt;&lt;code&gt;/anmiao/web-vault&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;容器监听端口&lt;/td&gt;&lt;td&gt;8080&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;宿主机映射端口&lt;/td&gt;&lt;td&gt;7443&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;对外域名&lt;/td&gt;&lt;td&gt;&lt;code&gt;https://xxxxxx.anmiao.moe&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;五、完整 Dockerfile&lt;a href=&quot;#五完整-dockerfile&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本次构建服务器为 8 核 16 GB,云厂商为&lt;code&gt;华为云&lt;/code&gt;地点为雅加达。选用原因是半夜方便付款，而且一个小时比较相对便宜&lt;/p&gt;
&lt;p&gt;将以下文件保存为 &lt;code&gt;/build/Vaultwarden/Dockerfile&lt;/code&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; --platform=linux/amd64 docker.io/vaultwarden/web-vault@sha256:ba8bab66d4330ab9dbafa8f245bcbe99cf6ee3f2c8ce9b5fbb10e9c49658451c &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; web&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; registry.suse.com/bci/gcc:15 &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; Build&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;SHELL&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;/bin/bash&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;-o&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;pipefail&quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&quot;-c&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; set -eux; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    zypper --gpg-auto-import-keys -vv refresh --force; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    zypper --non-interactive install --no-recommends -y \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      rust1.98 cargo1.98 perl pkgconf-pkg-config ca-certificates&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; CARGO_INCREMENTAL=0 &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /anmiao/build&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; ./vaultwarden/ .&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /anmiao/build/vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ARG&lt;/span&gt;&lt;span&gt; VW_VERSION=1.37.3&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; VW_VERSION=${VW_VERSION}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; echo &lt;/span&gt;&lt;span&gt;&quot;===== Vaultwarden build =====&quot;&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    echo &lt;/span&gt;&lt;span&gt;&quot;Version: ${VW_VERSION}&quot;&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    echo &lt;/span&gt;&lt;span&gt;&quot;CPU jobs: ${CARGO_BUILD_JOBS}&quot;&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    echo &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    cat /anmiao/build/rust-toolchain.toml &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    echo &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    rustc --version &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    cargo --version&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; cargo build \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        --release \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        --locked \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        --no-default-features \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        --features sqlite,vendored_openssl &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    mkdir -p /output &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    install \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        -m 0755 \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        /anmiao/build/target/release/vaultwarden \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        /output/vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; echo &lt;/span&gt;&lt;span&gt;&quot;===== Binary validation =====&quot;&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    test -x /output/vaultwarden &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    /output/vaultwarden --help &amp;gt;/dev/null &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ls -lh /output/vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; registry.suse.com/bci/bci-minimal:16.0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;LABEL&lt;/span&gt;&lt;span&gt; maintainer=&lt;/span&gt;&lt;span&gt;&quot;闇喵 &amp;lt;anmiao@am.moe&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; LANG=&lt;/span&gt;&lt;span&gt;&apos;en_US.UTF-8&apos;&lt;/span&gt;&lt;span&gt; LANGUAGE=&lt;/span&gt;&lt;span&gt;&apos;en_US:en&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; mkdir -p /anmiao/{data,web-vault}&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; --from=Build --chown=0:0 --chmod=0755 /output/vaultwarden /anmiao/vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;COPY&lt;/span&gt;&lt;span&gt; --from=web --chown=0:0 /web-vault/ /anmiao/web-vault/&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ENV&lt;/span&gt;&lt;span&gt; ROCKET_PROFILE=release \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ROCKET_ADDRESS=0.0.0.0 \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ROCKET_PORT=8080 \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    DATA_FOLDER=/anmiao/data \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    WEB_VAULT_FOLDER=/anmiao/web-vault \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    WEB_VAULT_ENABLED=true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;WORKDIR&lt;/span&gt;&lt;span&gt; /anmiao&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;EXPOSE&lt;/span&gt;&lt;span&gt; 8080&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;ENTRYPOINT&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;/anmiao/vaultwarden&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;构建镜像流程&lt;a href=&quot;#构建镜像流程&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; -p&lt;/span&gt;&lt;span&gt; /build/Vaultwarden&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; cd&lt;/span&gt;&lt;span&gt; /build/Vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; clone&lt;/span&gt;&lt;span&gt; --depth&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;span&gt; --branch&lt;/span&gt;&lt;span&gt; 1.37.3&lt;/span&gt;&lt;span&gt; https://github.com/dani-garcia/vaultwarden.git&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;cd&lt;/span&gt;&lt;span&gt; /build/Vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;docker&lt;/span&gt;&lt;span&gt; build&lt;/span&gt;&lt;span&gt; .&lt;/span&gt;&lt;span&gt; -t&lt;/span&gt;&lt;span&gt; vaultwarden:v1.37.3-amd64&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;PS: 克隆指定 Tag 后出现 &lt;code&gt;detached HEAD&lt;/code&gt; 是正常现象，因为当前检出的是固定版本标签，不影响构建。&lt;/p&gt;
&lt;h3&gt;验证镜像&lt;a href=&quot;#验证镜像&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在镜像编译完成之后使用以下命令验证&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;docker&lt;/span&gt;&lt;span&gt; run&lt;/span&gt;&lt;span&gt; --rm&lt;/span&gt;&lt;span&gt; vaultwarden:v1.37.3-amd64&lt;/span&gt;&lt;span&gt; --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;预期输出：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Vaultwarden 1.37.3&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Web-Vault 2026.7.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;六、部署流程准备&lt;a href=&quot;#六部署流程准备&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;宿主机创建相关目录&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; -p&lt;/span&gt;&lt;span&gt; /anmiao/vaultwarden/data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;七、Podman kube Pod YAML&lt;a href=&quot;#七podman-kube-pod-yaml&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我将镜像上传到了自己的镜像仓库( 已设为公开 )，因此部署服务器从远端拉取：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;swr.cn-southwest-2.myhuaweicloud.com/anmiao/vaultwarden:v1.37.3-amd64&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;保存为 &lt;code&gt;/anmiao/vaultwarden/vaultwarden.yaml&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;apiVersion&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; v1&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;kind&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Pod&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;metadata&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  labels&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    app&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; anmiao-vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; anmiao-vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;spec&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  restartPolicy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Always&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  securityContext&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    seccompProfile&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; RuntimeDefault&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  containers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; env&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; UMASK&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &apos;022&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; TZ&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Asia/Hong_Kong&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; DOMAIN&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &apos;https://passwd.anmiao.moe&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ROCKET_ADDRESS&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 0.0.0.0&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; ROCKET_PORT&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 8080&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; DATA_FOLDER&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /anmiao/data&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; WEB_VAULT_FOLDER&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /anmiao/web-vault&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 第一次使用时,临时改为: true,先注册一个专属自己账号&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; SIGNUPS_ALLOWED&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; INVITATIONS_ALLOWED&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; WEB_VAULT_ENABLED&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 禁止 Vaultwarden 后端主动下载网站图标&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; DISABLE_ICON_DOWNLOAD&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; PUSH_ENABLED&lt;/span&gt;&lt;span&gt;  ##你目前计划不使用 Bitwarden Push&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;#    - name: ADMIN_TOKEN&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;#      value: &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    image&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; swr.cn-southwest-2.myhuaweicloud.com/anmiao/vaultwarden:v1.37.3-amd64&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; poi&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    securityContext&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      allowPrivilegeEscalation&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      readOnlyRootFilesystem&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    ports&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; http&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      containerPort&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 8080&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      hostPort&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 7443&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      protocol&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; TCP&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    volumeMounts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; mountPath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /anmiao/data&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; vaultwarden-data&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; mountPath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /tmp&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; vaultwarden-tmp&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    readinessProbe&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      httpGet&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /alive&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        port&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 8080&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        scheme&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; HTTP&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      initialDelaySeconds&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 11&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      periodSeconds&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 30&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      timeoutSeconds&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 5&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      failureThreshold&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 3&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    livenessProbe&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      httpGet&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /alive&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        port&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 8080&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        scheme&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; HTTP&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      initialDelaySeconds&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 21&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      periodSeconds&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 60&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      timeoutSeconds&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 5&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  dnsConfig&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    nameservers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; 100.96.0.3&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    -&lt;/span&gt;&lt;span&gt; 100.96.0.2&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  volumes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; hostPath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      path&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; /anmiao/vaultwarden/data&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; Directory&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; vaultwarden-data&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -&lt;/span&gt;&lt;span&gt; emptyDir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;      sizeLimit&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; 256Mi&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; vaultwarden-tmp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;DOMAIN&lt;/code&gt; 必须填写用户实际访问的 HTTPS 地址，而不是 &lt;code&gt;127.0.0.1:7443&lt;/code&gt; 或容器内部地址。&lt;/p&gt;
&lt;p&gt;第一次创建账户时，可以临时把：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; SIGNUPS_ALLOWED&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &quot;true&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;账户创建完成后立即改回 &lt;code&gt;false&lt;/code&gt; 并重建 Pod。&lt;/p&gt;
&lt;h2&gt;八、创建 Podman 专用网络&lt;a href=&quot;#八创建-podman-专用网络&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最初尝试过 &lt;code&gt;--internal&lt;/code&gt; 网络，但在当前环境中，它会导致宿主机通过 &lt;code&gt;hostPort&lt;/code&gt; 访问容器失败。因此最终选择普通 bridge 网络，再用 nftables 单独限制出站流量。&lt;/p&gt;
&lt;p&gt;创建固定子网：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; network&lt;/span&gt;&lt;span&gt; create&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --driver&lt;/span&gt;&lt;span&gt; bridge&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --subnet&lt;/span&gt;&lt;span&gt; 10.89.50.0/24&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  nat&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;启动 Pod：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; kube&lt;/span&gt;&lt;span&gt; play&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --network&lt;/span&gt;&lt;span&gt; vaultwarden-net&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  /anmiao/vaultwarden/vaultwarden.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;检查：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; pod&lt;/span&gt;&lt;span&gt; ps&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; ps&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; port&lt;/span&gt;&lt;span&gt; anmiao-vaultwarden-poi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;不同 Podman 版本生成的容器名可能略有差异，以 &lt;code&gt;podman ps&lt;/code&gt; 为准。&lt;/p&gt;
&lt;p&gt;检查实际发布地址：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; port&lt;/span&gt;&lt;span&gt; anmiao-vaultwarden-poi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;理想情况下应显示：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;8080/tcp -&amp;gt; 0.0.0.0:7443&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;部分 Podman 版本或 kube 转换路径可能仍显示：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;8080/tcp -&amp;gt; 0.0.0.0:7443&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这意味着 7443 可能同时监听公网地址。此时不能只依赖 Nginx，应在宿主机防火墙或云安全组中禁止公网访问 7443。可在现有 &lt;code&gt;table inet filter&lt;/code&gt; 的 &lt;code&gt;input&lt;/code&gt; 链中加入：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;iifname &quot;lo&quot; tcp dport 7443 accept&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;tcp dport 7443 drop&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;规则应放在任何宽泛的 TCP &lt;code&gt;accept&lt;/code&gt; 规则之前。这样 Nginx 仍可通过 &lt;code&gt;127.0.0.1:7443&lt;/code&gt; 访问，而公网不能直接绕过 Nginx 连接 Vaultwarden。&lt;/p&gt;
&lt;p&gt;PS: 我的云服务器为火山云，所以我在云安全组没有开放7443端口&lt;/p&gt;
&lt;p&gt;宿主机测试：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; -i&lt;/span&gt;&lt;span&gt; http://127.0.0.1:7443/alive&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;预期返回：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;HTTP/1.1 200 OK&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;九、Nginx 反向代理配置&lt;a href=&quot;#九nginx-反向代理配置&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;因为 Nginx 已经监听 &lt;code&gt;0.0.0.0:443&lt;/code&gt;，Vaultwarden 通过独立域名与其他站点共享 443。&lt;/p&gt;
&lt;p&gt;在 Nginx 的 &lt;code&gt;http&lt;/code&gt; 作用域中加入 WebSocket 映射：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;http_upgrade&lt;/span&gt;&lt;span&gt; $connection_upgrade {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    default&lt;/span&gt;&lt;span&gt; upgrade&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    &apos;&apos;&lt;/span&gt;&lt;span&gt;      close&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;我的站点 server 部分配置:&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;    server&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        listen &lt;/span&gt;&lt;span&gt;               10.8.8.1:443 ssl&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        listen &lt;/span&gt;&lt;span&gt;               [fd00::1]:443 ssl&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;  ##开启IPv6&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        http2 &lt;/span&gt;&lt;span&gt;                on&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        server_name &lt;/span&gt;&lt;span&gt;          xxxxxx.anmiao.moe&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        charset &lt;/span&gt;&lt;span&gt;              utf-8&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ssl_trusted_certificate &lt;/span&gt;&lt;span&gt;  /ssl/anmiao_moe.crt&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;  ##证书信任&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ssl_certificate &lt;/span&gt;&lt;span&gt;       /ssl/anmiao_moe.pem&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ssl_certificate_key &lt;/span&gt;&lt;span&gt;   /ssl/anmiao_moe.key&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ssl_session_cache &lt;/span&gt;&lt;span&gt;   shared:SSL:10m&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ssl_session_timeout &lt;/span&gt;&lt;span&gt; 5m&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ssl_buffer_size &lt;/span&gt;&lt;span&gt;4k&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;  # 防御BEAST攻击&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ssl_session_tickets &lt;/span&gt;&lt;span&gt; off&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ssl_ciphers &lt;/span&gt;&lt;span&gt;TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ssl_prefer_server_ciphers &lt;/span&gt;&lt;span&gt; on&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ssl_protocols &lt;/span&gt;&lt;span&gt; TLSv1.2 TLSv1.3&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        location&lt;/span&gt;&lt;span&gt; / {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            # rewrite ^/i(.*) /$1 break;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            add_header &lt;/span&gt;&lt;span&gt;        X-Served-By         $host&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_set_header &lt;/span&gt;&lt;span&gt;  Host                $host&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_set_header &lt;/span&gt;&lt;span&gt;  X-Forwarded-Scheme  $scheme&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_set_header &lt;/span&gt;&lt;span&gt;  X-Forwarded-Proto   $scheme&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_set_header &lt;/span&gt;&lt;span&gt;  X-Forwarded-Host    $http_host&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_set_header &lt;/span&gt;&lt;span&gt;  X-Forwarded-For     $proxy_add_x_forwarded_for&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_set_header &lt;/span&gt;&lt;span&gt;  X-Real-IP           $remote_addr&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            # proxy_method       POST;               # 确保 POST 方法被正确转发&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_method &lt;/span&gt;&lt;span&gt;      $request_method&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;    # 请求方式移交后端处理&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_set_header &lt;/span&gt;&lt;span&gt;  If-Range            $http_if_range&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_set_header &lt;/span&gt;&lt;span&gt;  Upgrade             $connection_upgrade&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_set_header &lt;/span&gt;&lt;span&gt;  Connection          $http_connection&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_pass_request_headers &lt;/span&gt;&lt;span&gt;            on&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;    ## 确保所有请求头部都被转发&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            add_header &lt;/span&gt;&lt;span&gt;Strict-Transport-Security &lt;/span&gt;&lt;span&gt;&quot;max-age=31536000; includeSubDomains; preload&quot;&lt;/span&gt;&lt;span&gt; always&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_set_header &lt;/span&gt;&lt;span&gt;   X-Content-Type-Options    &lt;/span&gt;&lt;span&gt;&quot;nosniff&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_set_header &lt;/span&gt;&lt;span&gt;  X-Frame-Options   &lt;/span&gt;&lt;span&gt;&quot;SAMEORIGIN&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_ssl_verify &lt;/span&gt;&lt;span&gt;off&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_buffering &lt;/span&gt;&lt;span&gt;off&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;  ## 关闭缓冲意味着Nginx会直接将从后端服务器接收到的数据流式传输给客户端，而不进行缓存。这对于处理大文件或需要实时传输的场景非常有用&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_redirect &lt;/span&gt;&lt;span&gt;off&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;  ## 对发送给客户端的URL进行修改&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_buffers &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt; 16k&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_buffer_size &lt;/span&gt;&lt;span&gt;8k&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_headers_hash_max_size &lt;/span&gt;&lt;span&gt; 51200&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_headers_hash_bucket_size &lt;/span&gt;&lt;span&gt; 6400&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_pass &lt;/span&gt;&lt;span&gt;http://vaultwarden/&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            proxy_http_version &lt;/span&gt;&lt;span&gt;1.1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    server&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        listen &lt;/span&gt;&lt;span&gt;               80&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        listen &lt;/span&gt;&lt;span&gt;               [::]:80&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt;  ##开启IPv6&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        server_name &lt;/span&gt;&lt;span&gt;          xxxxxx.anmiao.moe&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        rewrite&lt;/span&gt;&lt;span&gt; ^(.*)$&lt;/span&gt;&lt;span&gt; https://$host$1&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        location&lt;/span&gt;&lt;span&gt; / {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;            index &lt;/span&gt;&lt;span&gt;index.html index.htm&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;检查并重载：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;nginx&lt;/span&gt;&lt;span&gt; -t&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;systemctl&lt;/span&gt;&lt;span&gt; reload&lt;/span&gt;&lt;span&gt; nginx.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;PS: 我在DNS服务商侧解析我的域名内WireGuard内网地址，证书是使用正经申请到的。仅使用内网还有一个好处就是不需要备案，只要连上你的WireGuard内网就使用Vaultwarden就跟使用普通网站一样且公网隔离安全性直接拉高。&lt;/p&gt;
&lt;h2&gt;十、禁止 Vaultwarden 容器连接互联网&lt;a href=&quot;#十禁止-vaultwarden-容器连接互联网&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;为什么要禁止出站连接&lt;a href=&quot;#为什么要禁止出站连接&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Vaultwarden 保存的是最敏感的一类数据。禁止容器主动访问互联网，可以降低以下风险：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;应用漏洞被利用后主动向外传输数据；&lt;/li&gt;
&lt;li&gt;SSRF 访问外部站点；&lt;/li&gt;
&lt;li&gt;被植入恶意代码后主动建立外联；&lt;/li&gt;
&lt;li&gt;不必要的图标下载、版本检查和推送连接。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这不是绝对防护。攻击者仍可能通过正常 HTTP 响应把数据返回给已经连入 Vaultwarden 的恶意客户端，因此仍然需要及时更新、限制访问来源和保护宿主机。&lt;/p&gt;
&lt;h3&gt;nftables 规则&lt;a href=&quot;#nftables-规则&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在现有持久化配置的：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;table inet filter&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;└── chain forward&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;中加入：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;ip saddr 10.89.50.0/24 oifname &quot;eth0&quot; counter drop comment &quot;Block Vaultwarden egress&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;示意：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;table inet filter {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    chain forward {&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        type filter hook forward priority filter;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        policy accept;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        # 放在任何“允许整个 Podman 子网出网”的宽泛 accept 规则之前。&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ip saddr 10.89.50.0/24 oifname &quot;eth0&quot; counter drop comment &quot;Block Vaultwarden egress&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;其中 &lt;code&gt;eth0&lt;/code&gt; 必须替换为服务器实际公网出口接口：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;ip&lt;/span&gt;&lt;span&gt; route&lt;/span&gt;&lt;span&gt; get&lt;/span&gt;&lt;span&gt; 223.6.6.6&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果服务器还有其他公网出口或 IPv6，需要为对应接口和 IPv6 网络补充规则。&lt;/p&gt;
&lt;p&gt;重新加载：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;nft&lt;/span&gt;&lt;span&gt; -f&lt;/span&gt;&lt;span&gt; /etc/nftables.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;验证隔离结果&lt;a href=&quot;#验证隔离结果&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;宿主机访问 Vaultwarden 应成功：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; -fsS&lt;/span&gt;&lt;span&gt; --max-time&lt;/span&gt;&lt;span&gt; 5&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  http://127.0.0.1:7443/alive&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;查看 nftables 计数器：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;nft&lt;/span&gt;&lt;span&gt; list&lt;/span&gt;&lt;span&gt; chain&lt;/span&gt;&lt;span&gt; inet&lt;/span&gt;&lt;span&gt; filter&lt;/span&gt;&lt;span&gt; forward&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;触发容器外联后，规则的 &lt;code&gt;packets&lt;/code&gt; 和 &lt;code&gt;bytes&lt;/code&gt; 应增加。&lt;/p&gt;
&lt;p&gt;Vaultwarden 管理面板的 Diagnostics 页面也可以验证：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;https://passwd.anmiao.moe/admin/diagnostics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;实际结果为：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Internet access: No&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Server Latest: Unknown&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Web Latest: Unknown&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;NTP: Unable to fetch NTP time&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;DNS 可能仍显示正常，因为容器可以访问宿主机或 Podman 提供的 DNS 解析器，但无法继续连接公网 TCP/HTTPS。这不影响隔离结论。&lt;/p&gt;
&lt;p&gt;要临时开启管理面板，可以生成 Argon2 管理口令：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; run&lt;/span&gt;&lt;span&gt; --rm&lt;/span&gt;&lt;span&gt; -it&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  vaultwarden:v1.37.3-amd64&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  hash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后临时配置 &lt;code&gt;ADMIN_TOKEN&lt;/code&gt;。检查完成后建议移除该变量，让 &lt;code&gt;/admin&lt;/code&gt; 重新关闭。&lt;/p&gt;
&lt;h3&gt;断网后受影响的功能&lt;a href=&quot;#断网后受影响的功能&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;以下功能会受影响：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bitwarden Push Relay；&lt;/li&gt;
&lt;li&gt;外部 SMTP 发信；&lt;/li&gt;
&lt;li&gt;网站图标下载；&lt;/li&gt;
&lt;li&gt;在线版本检查；&lt;/li&gt;
&lt;li&gt;后端主动调用的外部服务。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以下核心功能不受影响：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;密码保存与同步；&lt;/li&gt;
&lt;li&gt;TOTP 六位验证码生成；&lt;/li&gt;
&lt;li&gt;Passkey 保存与调用；&lt;/li&gt;
&lt;li&gt;Web Vault 和 Bitwarden 客户端登录。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;TOTP 依赖系统时间，因此宿主机仍应使用 &lt;code&gt;systemd-timesyncd&lt;/code&gt;、Chrony 或其他方式保持时间准确。容器共享宿主机内核时钟，不需要自己连接 NTP。&lt;/p&gt;
&lt;h2&gt;十一、正式使用前的检查&lt;a href=&quot;#十一正式使用前的检查&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; pod&lt;/span&gt;&lt;span&gt; logs&lt;/span&gt;&lt;span&gt; anmiao-vaultwarden&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;日志应包含：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;Private key &apos;/anmiao/data/rsa_key.pem&apos; created correctly&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;Rocket has launched from http://0.0.0.0:8080&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;健康检查：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; -i&lt;/span&gt;&lt;span&gt; http://127.0.0.1:7443/alive&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; -I&lt;/span&gt;&lt;span&gt; https://xxxxxx.anmiao.moe&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;还应实际测试：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;创建测试账号；&lt;/li&gt;
&lt;li&gt;保存一条测试密码；&lt;/li&gt;
&lt;li&gt;保存一个测试 TOTP 密钥；&lt;/li&gt;
&lt;li&gt;使用手机 App 与浏览器插件同步；&lt;/li&gt;
&lt;li&gt;保存并调用一个测试 Passkey；&lt;/li&gt;
&lt;li&gt;重建 Pod 后确认所有数据仍然存在。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;十二、使用 7z 自动打包并异地备份&lt;a href=&quot;#十二使用-7z-自动打包并异地备份&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Vaultwarden 使用 SQLite。直接在程序运行期间压缩整个数据目录，可能复制到不一致的 &lt;code&gt;db.sqlite3&lt;/code&gt;、WAL 和 SHM 文件。&lt;/p&gt;
&lt;p&gt;为了简单可靠，这里采用：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;短暂停止 Vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ↓&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;完整打包 /anmiao/vaultwarden/data&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ↓&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;启动 Vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ↓&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;校验备份&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;        ↓&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;通过 SSH/rsync 发送到异地服务器&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;个人实例通常可能会中断几分钟。&lt;/p&gt;
&lt;h3&gt;安装工具&lt;a href=&quot;#安装工具&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;按系统实际包名安装 7-Zip、rsync 和 flock。例如 Debian 系统可先查询：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; update&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;apt&lt;/span&gt;&lt;span&gt; install&lt;/span&gt;&lt;span&gt; 7zip&lt;/span&gt;&lt;span&gt; rsync&lt;/span&gt;&lt;span&gt; util-linux&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;某些发行版的软件包名可能是 &lt;code&gt;p7zip-full&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;准备备份目录与密码文件&lt;a href=&quot;#准备备份目录与密码文件&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; -p&lt;/span&gt;&lt;span&gt; /anmiao/backup/vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;chmod&lt;/span&gt;&lt;span&gt; 700&lt;/span&gt;&lt;span&gt; /anmiao/backup/vaultwarden&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; -m&lt;/span&gt;&lt;span&gt; 600&lt;/span&gt;&lt;span&gt; /dev/null&lt;/span&gt;&lt;span&gt; /root/.vaultwarden-backup-password&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;nano&lt;/span&gt;&lt;span&gt; /root/.vaultwarden-backup-password&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;密码文件只写一行强密码，不要添加其他内容。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;说明：自动化调用 7z 时，密码最终会作为 7z 进程参数出现。单用户服务器通常可接受，但更严格的环境建议改为“7z 压缩 + age 公钥加密”，避免在自动任务中传递口令。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;自动备份脚本&lt;a href=&quot;#自动备份脚本&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;保存为 &lt;code&gt;/anmiao/vaultwarden-backup.sh&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;#! /bin/bash&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; -Eeuo&lt;/span&gt;&lt;span&gt; pipefail&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;umask&lt;/span&gt;&lt;span&gt; 077&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 停止Vaultwarden服务&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; kube&lt;/span&gt;&lt;span&gt; play&lt;/span&gt;&lt;span&gt; --down&lt;/span&gt;&lt;span&gt; /anmiao/vaultwarden/vaultwarden.yaml&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt; 2s&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 打包并加密加密码&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;7z&lt;/span&gt;&lt;span&gt; a&lt;/span&gt;&lt;span&gt; -t7z&lt;/span&gt;&lt;span&gt; -mx=9&lt;/span&gt;&lt;span&gt; -mhe=on&lt;/span&gt;&lt;span&gt; -p123456&lt;/span&gt;&lt;span&gt; ~/vaultwarden-backup-&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt; &apos;+%Y-%m-%d_%H-%M&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.7z&lt;/span&gt;&lt;span&gt; /anmiao/vaultwarden&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt; 2s&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 启动Vaultwarden服务&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; kube&lt;/span&gt;&lt;span&gt; play&lt;/span&gt;&lt;span&gt; --network&lt;/span&gt;&lt;span&gt; nat&lt;/span&gt;&lt;span&gt; /anmiao/vaultwarden/vaultwarden.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt; 2s&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;## 找出超过30天的备份文件并删掉&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt; /anmiao/vaultwarden&lt;/span&gt;&lt;span&gt; -type&lt;/span&gt;&lt;span&gt; f&lt;/span&gt;&lt;span&gt; -name&lt;/span&gt;&lt;span&gt; &quot;vaultwarden-backup*.7z&quot;&lt;/span&gt;&lt;span&gt; -mtime&lt;/span&gt;&lt;span&gt; +30&lt;/span&gt;&lt;span&gt; -delete&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;设置权限：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;chmod&lt;/span&gt;&lt;span&gt; 700&lt;/span&gt;&lt;span&gt; /anmiao/vaultwarden-backup.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;首次手动运行：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;/anmiao/vaultwarden-backup.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;异地传输&lt;a href=&quot;#异地传输&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;PS: 备份方式多多，比如WebDAV 、FTP、SFTP等，这里不展开。&lt;/p&gt;
&lt;p&gt;备份目标最好位于另一台 VPS、NAS 或对象存储，不要只把备份保存在 Vaultwarden 同一块磁盘上。&lt;/p&gt;
&lt;h3&gt;配置 Cron 时间任务&lt;a href=&quot;#配置-cron-时间任务&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;每天凌晨 04&lt;/p&gt;&lt;div&gt;&lt;/div&gt; 执行：&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;crontab&lt;/span&gt;&lt;span&gt; -e&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;加入：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;17 04 * * * /anmiao/vaultwarden-backup.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用非整点时间可以减少与其他定时任务同时运行的概率。&lt;/p&gt;
&lt;h2&gt;十三、恢复备份&lt;a href=&quot;#十三恢复备份&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;先停止 Vaultwarden：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; kube&lt;/span&gt;&lt;span&gt; down&lt;/span&gt;&lt;span&gt; /anmiao/vaultwarden/vaultwarden.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;将旧数据目录移走：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;mv&lt;/span&gt;&lt;span&gt; /anmiao/vaultwarden/data&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;   /anmiao/vaultwarden/data.broken.&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt; +%s&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; -p&lt;/span&gt;&lt;span&gt; /anmiao/vaultwarden/data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;解压到临时目录：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;mkdir&lt;/span&gt;&lt;span&gt; -p&lt;/span&gt;&lt;span&gt; /tmp/vaultwarden-restore&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;7z&lt;/span&gt;&lt;span&gt; x&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -p&apos;你的备份密码&apos;&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  /anmiao/backup/vaultwarden/vaultwarden-YYYY-MM-DD_HH-MM-SS.7z&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  -o/tmp/vaultwarden-restore&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;由于归档中包含完整路径层级，先检查：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt; /tmp/vaultwarden-restore&lt;/span&gt;&lt;span&gt; -maxdepth&lt;/span&gt;&lt;span&gt; 5&lt;/span&gt;&lt;span&gt; -type&lt;/span&gt;&lt;span&gt; f&lt;/span&gt;&lt;span&gt; |&lt;/span&gt;&lt;span&gt; head&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;再将实际数据内容复制回去，并恢复权限：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;cp&lt;/span&gt;&lt;span&gt; -a&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  /tmp/vaultwarden-restore/anmiao/vaultwarden/data/.&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  /anmiao/vaultwarden/data/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;重新启动：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; kube&lt;/span&gt;&lt;span&gt; play&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  --network&lt;/span&gt;&lt;span&gt; nat&lt;/span&gt;&lt;span&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;  /anmiao/vaultwarden/vaultwarden.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;检查：&lt;/p&gt;
&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; -i&lt;/span&gt;&lt;span&gt; http://127.0.0.1:7443/alive&lt;/span&gt;&lt;/span&gt;
&lt;span&gt;&lt;span&gt;podman&lt;/span&gt;&lt;span&gt; pod&lt;/span&gt;&lt;span&gt; logs&lt;/span&gt;&lt;span&gt; --tail=100&lt;/span&gt;&lt;span&gt; anmiao-vaultwarden&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;建议在正式保存大量账号前，至少进行一次完整的“备份—删除测试实例—恢复”演练。没有实际恢复验证过的备份，只能算备份文件，不能算可靠的恢复方案。&lt;/p&gt;
&lt;h2&gt;十四、最终结果&lt;a href=&quot;#十四最终结果&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最终得到的部署具备以下特点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 SUSE BCI GCC 15 编译 Vaultwarden；&lt;/li&gt;
&lt;li&gt;Rust/Cargo 通过 SUSE RPM 安装，不使用 rustup；&lt;/li&gt;
&lt;li&gt;最终运行环境为 SUSE BCI Minimal 16.0；&lt;/li&gt;
&lt;li&gt;数据持久化到宿主机 &lt;code&gt;/anmiao/vaultwarden/data&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;由 Nginx 提供 HTTPS 与 WebSocket 反向代理；&lt;/li&gt;
&lt;li&gt;使用 Podman kube YAML 管理 Pod；&lt;/li&gt;
&lt;li&gt;宿主机能够访问 Vaultwarden；&lt;/li&gt;
&lt;li&gt;Vaultwarden 容器不能主动连接互联网；&lt;/li&gt;
&lt;li&gt;TOTP、密码同步和 Passkey 功能仍可正常使用；&lt;/li&gt;
&lt;li&gt;每日自动停机数秒，使用 7z 加密打包并上传异地。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;自托管密码管理器并不是“部署完成就结束”。后续还需要持续关注 Vaultwarden 与 Web Vault 的新版本、安全公告、客户端兼容性、宿主机补丁，以及备份恢复是否仍然有效。&lt;/p&gt;
&lt;p&gt;PS: 本次记录使用的路径、域名、加密密码等均使用了加密处理，仅提供借鉴。&lt;/p&gt;</content:encoded><category>category:技术</category><category>category:Linux</category><category>tag:Bitwarden</category><category>tag:Vaultwarden</category><category>tag:SUSE BCI</category><category>tag:Podman</category><category>tag:Nginx</category><category>tag:Linux</category><category>tag:自托管</category></item><item><title>2026.10｜今月のCos</title><link>https://www.anmiao.moe/post/cospaly-2026-10</link><guid isPermaLink="false">cospaly-2026-10</guid><description>整理这个月收集到的一些喜欢的二次元插画</description><pubDate>Wed, 30 Sep 2026 16:00:00 GMT</pubDate><content:encoded>
&lt;div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/cosplay/202610/web/01/HUt7cO6bAAAHff1.avif&quot; alt=&quot;1&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/cosplay/202610/web/01/HUt7cO9asAATRVE.avif&quot; alt=&quot;2&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/cosplay/202610/web/01/HVJfbn7aAAAKhBJ.avif&quot; alt=&quot;3&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/cosplay/202610/web/01/HVd0_VoacAAS7oY.avif&quot; alt=&quot;4&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/cosplay/202610/web/01/HVd0_VqbUAAq6Hl.avif&quot; alt=&quot;5&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/cosplay/202610/web/01/HVkbo3rbQAAvOtL.avif&quot; alt=&quot;6&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/cosplay/202610/web/01/HVlrg84aUAATTsh.avif&quot; alt=&quot;7&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/cosplay/202610/web/01/HVlrhZtbcAAf6lj.avif&quot; alt=&quot;8&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
&lt;/div&gt;</content:encoded><category>category:萌图</category><category>category:COS</category><category>tag:Moe</category><category>tag:Cospaly</category><category>tag:二次元</category><category>tag:图片</category></item><item><title>2026.10｜今月のイラスト</title><link>https://www.anmiao.moe/post/illustration-2026-10</link><guid isPermaLink="false">illustration-2026-10</guid><description>整理这个月收集到的一些喜欢的二次元插画</description><pubDate>Wed, 30 Sep 2026 16:00:00 GMT</pubDate><content:encoded>
&lt;div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/261026wallpaperpreview.avif&quot; alt=&quot;1&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HRWxRrIaoAAi-R1.avif&quot; alt=&quot;2&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HV3hZjraIAAiUM9.avif&quot; alt=&quot;3&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HV6MV9EaoAAg_7r.avif&quot; alt=&quot;4&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HV9S27DbYAAaXzi.avif&quot; alt=&quot;5&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HV96IZhboAAlrQ8.avif&quot; alt=&quot;6&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HV97IiXa8AAyH2G.avif&quot; alt=&quot;7&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HV97NpmaUAACwFz.avif&quot; alt=&quot;8&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HV97_YNa0AAElbZ.avif&quot; alt=&quot;9&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HVc-YCEbIAAlBPX.avif&quot; alt=&quot;10&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HVeyVItbYAAP_VY.avif&quot; alt=&quot;11&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HVjdz5AbcAAyli3.avif&quot; alt=&quot;12&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HVjpDIIa0AEvZyf.avif&quot; alt=&quot;13&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HVkKkFkakAAdD0i.avif&quot; alt=&quot;14&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HVuOlYgakAAmrZA.avif&quot; alt=&quot;15&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
  &lt;div&gt;
    &lt;img src=&quot;https://anmiao.moe/poi/img/media/anime/202610/web/01/HVy0LzxbsAA6qTD.avif&quot; alt=&quot;16&quot; loading=&quot;lazy&quot; /&gt;
  &lt;/div&gt;
&lt;/div&gt;</content:encoded><category>category:萌图</category><category>category:插画</category><category>tag:Moe</category><category>tag:插画</category><category>tag:二次元</category><category>tag:图片</category></item></channel></rss>