🐾 别再让浏览器替你存密码了!喵手把手教你自托管 Vaultwarden(附宝塔证书 + Nginx 反代)

说在前面
最近想给自己搭一个密码管理器,选来选去还是 Vaultwarden 最轻量(Bitwarden 的 Rust 版本,省资源)。
我的环境:

  • 系统:Ubuntu 22.04(其他 Debian 系也通用)
  • 服务器:香港(跑得飞快)
  • 域名:pass.nkcdn.net.cn(随便起的,别笑)

折腾过程中踩了几个坑:docker-compose 找不到、Nginx 报错缺文件、证书权限不对……最后整理出一套严格按顺序的部署方案。

整体顺序(别问为什么,问就是试出来的):
> 装 Nginx → 装 Docker → 部署 Vaultwarden → 宝塔申请证书并写入 pem → 配置 Nginx 反代

下面直接开干。每条命令我都加了注释,你复制粘贴的时候看一眼就行。


一、安装 Nginx

首先更新软件源,然后安装 Nginx。

apt update
apt install -y nginx

设置开机自启并立即启动:

systemctl enable nginx
systemctl start nginx

检查运行状态

systemctl status nginx 显示 active (running)

systemctl status nginx 输出,显示绿色的 active (running)

systemctl status nginx

如果看到 active (running),恭喜,Nginx 站好了。

二、安装 Docker

使用官方一键脚本安装 Docker(最省事):

curl -fsSL https://get.docker.com | bash

启动 Docker 并设置开机自启:

systemctl enable --now docker

验证版本

docker --version 输出结果

docker –version 输出结果

docker --version

如果提示 curl: command not found,先 apt install curl -y

三、部署 Vaultwarden

创建工作目录并进入:

mkdir -p /opt/vaultwarden
cd /opt/vaultwarden

创建 docker-compose.yaml

nano docker-compose.yaml

粘贴以下内容(注意SIGNUPS_ALLOWED 我先关掉,防止路人注册):

version: "3"

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://pass.nkcdn.net.cn"
      SIGNUPS_ALLOWED: "false"
    volumes:
      - ./vw-data:/data
    ports:
      - 8000:80

启动容器(注意:这里用 docker compose,不是 docker-compose,新版 Docker 自带):

docker compose up -d

查看容器状态

docker ps 显示 vaultwarden 容器 running 和端口映射

docker ps 显示 vaultwarden 容器 running

docker ps

如果看到 vaultwarden 在运行,并且端口映射 0.0.0.0:8000->80/tcp,说明 Vaultwarden 已经在后台跑着了。

坑1:如果你用旧版 docker-compose 命令报错 command not found,就用 docker compose(中间是空格)。

四、宝塔面板申请 SSL 证书并写入 pem 文件

这一步放在 Vaultwarden 部署之后,是因为证书和反代可以最后配,但顺序不能乱:先让 Vaultwarden 跑起来,再绑域名、上证书。

4.1 宝塔面板操作(我用的1panel大差不差)

  1. 登录宝塔面板 → 左侧 网站 → 添加站点
    – 域名填:pass.nkcdn.net.cn(你用你自己域名,在dns服务商A解析给你服务器的ip)
    – 其他默认,PHP 版本选“纯静态”
  2. 点击域名进入设置 → SSL → 申请免费证书
    – 推荐 Let’s Encrypt 或宝塔自带的免费证书
    – 勾选域名,点击申请,等几秒就会成功
  3. 申请成功后,你会看到两段内容:
    证书(CRT) —— 包含完整证书链
    私钥(KEY)


宝塔 SSL 界面证书已部署,展示复制按钮位置

宝塔 SSL 界面,显示“已部署”和复制按钮

4.2 在服务器上创建证书目录并写入

不要偷懒直接用宝塔生成的路径,因为 Nginx 后面要读,我们手动放一个干净的位置。

mkdir -p /etc/letsencrypt/live/pass.nkcdn.net.cn/

写入证书链(fullchain):

nano /etc/letsencrypt/live/pass.nkcdn.net.cn/fullchain.pem

将宝塔里复制的 证书(CRT) 内容完整粘贴进去,保存(Ctrl+O, 回车, Ctrl+X)。

写入私钥:

nano /etc/letsencrypt/live/pass.nkcdn.net.cn/privkey.pem

粘贴宝塔里的 私钥(KEY) 内容,保存。

设置严格权限(这一步很多人忘,导致 Nginx 报错 cannot load certificate):

chmod 700 /etc/letsencrypt/live/pass.nkcdn.net.cn/
chmod 600 /etc/letsencrypt/live/pass.nkcdn.net.cn/*.pem

为什么要 600?私钥只能属主读写,避免泄露。

五、配置 Nginx 反向代理

创建 Nginx 站点配置文件:

nano /etc/nginx/sites-available/pass.nkcdn.net.cn

写入以下完整配置(已处理好 HTTP 自动跳转 HTTPS + SSL 证书路径 + 反代 Vaultwarden):

server {
    listen 80;
    server_name pass.nkcdn.net.cn;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name pass.nkcdn.net.cn;

    ssl_certificate /etc/letsencrypt/live/pass.nkcdn.net.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pass.nkcdn.net.cn/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

启用站点(创建软链接):

ln -s /etc/nginx/sites-available/pass.nkcdn.net.cn /etc/nginx/sites-enabled/

测试 Nginx 配置语法:

nginx -t


nginx -t 成功截图

nginx -t 输出 syntax ok 和 test successful

如果输出 syntax is oktest is successful,就说明没问题。
如果报错,看下一节的“问题解决”。

重新加载 Nginx:

systemctl reload nginx

六、部署中遇到的问题及解决方法

问题1:docker-compose: command not found

原因:系统没有独立安装 docker-compose,或者 Python 版本不兼容。
解决:直接用 Docker 内置的 docker compose 命令(注意中间是空格)。
验证docker compose version

问题2:Nginx 报错 cannot load certificate "/etc/letsencrypt/live/.../privkey.pem"

原因:文件不存在,或者权限过大导致 Nginx 无法读取。
解决
– 确保手动创建了目录并粘贴了内容
– 执行 chmod 600 那两个 pem 文件
– 检查路径是否写错(尤其是域名部分)

问题3:Nginx 报错 no such file or directory: "options-ssl-nginx.conf"

原因:配置文件里引用了 certbot 自动生成的文件,但本机没有安装 certbot。
解决:删掉那两行引用,直接用上面配置里的通用 SSL 参数(我已经帮你删干净了)。

问题4:想关闭公开注册

原因:Vaultwarden 默认允许注册,不安全。
解决:在 docker-compose.yaml 中添加环境变量:
SIGNUPS_ALLOWED: "false"
然后重启容器:

docker compose down
docker compose up -d

七、最终效果

  • 浏览器访问 https://pass.nkcdn.net.cn
  • 看到 Vaultwarden 的登录界面(说明 HTTPS 生效)
  • 没有注册入口(因为 SIGNUPS_ALLOWED=false
  • 首次访问会让你创建管理员账号(通过 /admin 页面,需要设置环境变量 ADMIN_TOKEN,这个我下次再写)


浏览器访问成功,HTTPS 小锁,Vaultwarden 界面

浏览器打开 https://pass.nkcdn.net.cn ,地址栏小锁标志,显示 Vaultwarden 登录界面


📖 3. 使用说明

接下来将介绍 Vaultwarden 的基本功能,包括:创建账户、密码库、Send、工具、报告。

3.1 创建账户

首次使用需要先建个账户:

创建账户步骤1

填写邮箱与名称:

填写邮箱与名称

设置账户的密码:

设置密码

登录后的界面如下:

登录后界面

3.2 密码库

Vaultwarden 支持记录的密码类型有:登录、支付卡、身份、笔记、SSH 密钥。以创建“登录”类型为例,点击右上角的「+新增」,选择「登录」,填写相关信息:

新增登录项

新增的密码会出现在密码库中:

密码库列表

登录类型的密码有些额外的操作,可以复制用户名、密码,也可以直接前往:

密码操作菜单

3.3 Send

某些场景下,我们可能会发送敏感信息。这时候就可以使用 Send 功能,信息将在限制曝光的同时保持端到端加密。

Send界面

以发送文本为例,填写要分享的文本,然后保存:

创建Send文本

选择要发送的 Send,复制链接:

复制Send链接

其它人可以直接访问该链接,显示效果如下:

Send访问效果

3.4 工具

Vaultwarden 还集成了一些工具,包括:生成器、导入以及导出。这里说说生成器。生成器除了可以生成随机密码,还支持短语和用户名:

密码生成器

3.5 报告

Vaultwarden 的报告可以识别密码库中的安全漏洞。

报告界面

比如弱密码这里,我加的简单密码就被识别出来了:

弱密码检测

4. 写在最后

体验下来,Vaultwarden 部署简单,功能齐全,可以说完全满足了我对密码管理的需求。无论是个人用户还是小型团队,都可以通过它来提高管理密码的效率和安全性。如果你和我一样,平时需要管理大量账密信息,那么 Vaultwarden 可能就是你要的答案。

📷 本文使用说明部分图片引用自知乎专栏 《Vaultwarden 使用指南》,仅供学习参考。

尾巴
整个过程下来,最大的感受就是:顺序别乱,证书权限别忘,反代别写错 upstream
Vaultwarden 跑起来之后,你就可以把所有密码都交给它了——比存浏览器里安全一百个猫爪印。

如果你也按照这个教程搭好了,欢迎在评论区秀出你的域名。
有问题直接留言,我看到会回。

🐾 —— 喵 ~


📝 本文标题:🐾 别再让浏览器替你存密码了!喵手把手教你自托管 Vaultwarden(附宝塔证书 + Nginx 反代)


原创作者:O Meow


🔗 原文链接:https://www.oops.net.cn/113/


⚠️ 版权声明 & 禁止未经授权转载


本博客所有原创文章均为作者辛苦创作,版权归本站所有。


严禁任何未经许可的转载、摘抄、洗稿、商业搬运。


如需合法转载,请务必联系作者获得书面授权,并标注完整原文出处与来源,违者将依法追究责任。


感谢您的理解、尊重与支持💖


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇