使用 Docker 部署 Vaultwarden 并手动配置 HTTPS 证书

Vaultwarden 是一个轻量级的开源密码管理服务器,是 Bitwarden 官方服务的非官方实现。它使用 Rust 编写,专为自建密码保险库而设计,让你能够在自己的服务器或 NAS 上安全存储和管理密码。相比于官方 Bitwarden 服务器,Vaultwarden 占用资源更少、部署简单,非常适合个人或小团队使用。

本文将详细介绍如何通过 Docker Compose 部署 Vaultwarden,并利用 mkcert 手动生成 HTTPS 证书,从而确保你的密码管理服务在网络传输过程中的安全性。


1. Vaultwarden 简介

Vaultwarden 为用户提供了一个自托管的密码管理解决方案。主要特点包括:

  • 安全存储:所有密码数据均经过加密存储,只有你自己能够解密和访问。
  • 轻量高效:相较于 Bitwarden 官方服务器,Vaultwarden 使用更少的系统资源,适用于低配硬件和 NAS 设备。
  • 跨平台支持:支持 Web 界面、桌面客户端、浏览器插件以及移动设备应用,实现多端同步。
  • 实时同步:通过内置 WebSocket 通知,实现密码数据的实时更新和同步。

通过部署 Vaultwarden,你可以完全掌控自己的密码数据,避免将敏感信息托管于第三方服务,从而提升隐私保护和数据安全性。


2. 使用 Docker Compose 部署 Vaultwarden

首先,在你的服务器或 NAS 上新建一个目录(例如 vaultwarden),并在该目录下创建一个名为 docker-compose.yml 的配置文件,内容如下:

version: "3"
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    ports:
      - "8090:80"   # Web 界面和 API 端口
      - "3012:3012" # WebSocket 端口(用于实时同步)
    environment:
      - DOMAIN=http://192.168.31.63:8090
      - WEBSOCKET_ENABLED=true      # 启用 WebSocket 通知,实现实时同步
      - SIGNUPS_ALLOWED=true        # 允许新用户注册(创建管理员账户后务必设置为 false!)
      - ADMIN_TOKEN=123456         # 设置管理员令牌,用于访问管理界面,务必设置为非常强的密码!
    volumes:
      - ./data:/data  # 持久化存储 Vaultwarden 数据

说明

  • 端口映射:将 Vaultwarden 的内部 Web 服务端口(80)和 WebSocket 端口(3012)映射到主机对应端口,方便外部访问。
  • 环境变量
    • DOMAIN 用于指定服务访问的域名或 IP 地址。
    • WEBSOCKET_ENABLED 开启后,可以实现实时数据同步。
    • SIGNUPS_ALLOWED 控制是否允许新用户注册,建议生产环境中创建管理员账户后禁用。
    • ADMIN_TOKEN 设置管理员访问令牌,请务必使用复杂密码以保障安全。
  • 数据持久化:通过将容器中的 /data 目录映射到宿主机的 ./data 目录,实现数据的持久化存储。

3.申请证书

我的域名ipv6的,Certbot无法正常申请成功,下面3种方法,推荐方法3

3.1 mkcert(方法1)

手动安装 mkcert 并生成 HTTPS 证书(因为http无法访问Vaultwarden,但是浏览器打开url提示不信任它的安全证书,浏览器插件和网页可以用)

由于 SSL/TLS 证书对于保障数据传输安全至关重要,但使用 Certbot 有时可能会出现配置问题。mkcert 是一个简单易用的工具,可以快速生成受信任的本地证书。

步骤 1:下载 mkcert 二进制文件

访问 mkcert GitHub 发布页面 下载适合你系统的版本。你也可以通过以下命令下载最新版本(以 Linux 为例)(下载最新1.4.4):

# 使用 wget 下载 mkcert 二进制文件
wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64 -O /usr/local/bin/mkcert

# 或者使用 curl 下载 mkcert
curl -L https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64 -o /usr/local/bin/mkcert

步骤 2:赋予执行权限

下载完成后,为 mkcert 文件添加执行权限:

chmod +x /usr/local/bin/mkcert

步骤 3:安装 NSS 库

mkcert 依赖 NSS 库来初始化本地证书颁发机构(CA)。如果系统中未安装 NSS,可以使用以下命令安装(以 Alpine Linux 为例):

apk add nss

步骤 4:初始化证书颁发机构

执行以下命令初始化本地 CA:

mkcert -install

步骤 5:生成证书

生成用于你的网站或服务的证书,例如为域名 mnas.yys.zone 和 vnas.yys.zone 生成证书:

mkcert mnas.yys.zone
mkcert vnas.yys.zone

生成的证书文件通常为 .pem 格式,需要在后续的 Web 服务器配置中使用。

 

3.2 1panal申请(方法3,完美使用https)

网站→证书→acme账户和dns账户设置好再申请证书

设置目录会生成类似这样路径下

root@mnas:/home/1panel/opt/1panel# find / -name fullchain.pem
/var/lib/docker/overlay2/1ece8b9a55dab7aaaec8dae74f85e7cb27dbc59d935844a0a299029234cde096/diff/home/mnas/fullchain.pem
/var/lib/docker/overlay2/1ece8b9a55dab7aaaec8dae74f85e7cb27dbc59d935844a0a299029234cde096/diff/home/fullchain.pem

3.3 使用acme.sh,和1panal类似(方法3 完美使用https, 推荐)

使用 acme.sh 和腾讯云 DNS API 自动获取 HTTPS 证书(Git 安装版) 


 

4. 配置 Web 服务器(Nginx/OpenResty)

为了让 Vaultwarden 支持 HTTPS 访问,需要将生成的证书配置到 Web 服务器中。以下是一个基于 OpenResty(或 Nginx)的示例配置:

worker_processes auto;

events {
    worker_connections 1024;  # 可根据实际情况调整
}

http {
    ######################################
    # mnas.yys.zone 配置
    ######################################

    # HTTP 服务(允许 HTTP 直接访问)
    server {
        listen 80;
        listen [::]:80;
        server_name mnas.yys.zone;

        location / {
            proxy_pass http://192.168.31.63:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }

    # HTTPS 服务(加密访问)
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name mnas.yys.zone;

        ssl_certificate     /home/mnas.yys.zone.pem;
        ssl_certificate_key /home/mnas.yys.zone-key.pem;
        ssl_protocols       TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers         HIGH:!aNULL:!MD5;

        location / {
            proxy_pass http://192.168.31.63:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }

    ######################################
    # vnas.yys.zone 配置
    ######################################

    # HTTP 服务(允许 HTTP 直接访问)
    server {
        listen 80;
        listen [::]:80;
        server_name vnas.yys.zone;

        location / {
            proxy_pass http://192.168.31.63:8090;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }

    # HTTPS 服务(加密访问)
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name vnas.yys.zone;

        ssl_certificate     /home/vnas.yys.zone.pem;
        ssl_certificate_key /home/vnas.yys.zone-key.pem;
        ssl_protocols       TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers         HIGH:!aNULL:!MD5;

        location / {
            proxy_pass http://192.168.31.63:8090;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
}

请将 /path/to/mnas.yys.zone.pem 和 /path/to/mnas.yys.zone-key.pem 替换为你实际的证书和私钥路径。

注意事项

  • 使用 443 端口:HTTPS 协议必须使用 443 端口,因此配置中请勿混用 80 端口。
  • WebSocket 配置:如果 Vaultwarden 需要通过 WebSocket 实现实时同步,确保 Web 服务器配置支持 WebSocket 协议。

5. 重启 Web 服务器

配置完成后,重启 OpenResty 或 Nginx 使新配置生效。例如,使用以下命令重载 OpenResty 配置:

/usr/local/openresty/nginx/sbin/nginx -s reload

 

6. 访问 url

https://vnas.yys.zone:4000


结论

通过本文的介绍,你可以了解到 Vaultwarden 是一个轻量级、高效且安全的密码管理服务,非常适合自建密码保险库。使用 Docker Compose 部署 Vaultwarden 可以简化安装与管理,而手动配置 HTTPS 证书(通过 mkcert)则能确保服务通信安全。无论是个人还是小型团队,都可以借助这一方案保护敏感数据,提升网络安全防护能力。


参考链接: