适用于:Ubuntu 22.04、已有 Nginx + Cloudflare、需要多端同步密码管理,并希望服务尽量运行在 2G 内存级别的 VPS 上。

整体访问链路:

Text
用户
 ↓
Cloudflare(HTTPS)
 ↓
Nginx(80/443)
 ↓
127.0.0.1:8088
 ↓
Docker 容器(Vaultwarden)

Cloudflare 域名配置

可以先配置一个 A 记录域名,例如 vault.<你的域名>.com。

Cloudflare DNS 记录配置

建议在 Cloudflare 中开启始终使用 HTTPS。

Cloudflare 强制 HTTPS 配置

然后创建源服务器证书。主机名可以配置为 *.<你的域名>.com,也可以单独配置为 vault.<你的域名>.com。注意保存密钥对,源证书和私钥都需要保存在本地。

Cloudflare 源证书配置

部署 Vaultwarden(Docker)

  1. 创建目录:
Bash
sudo mkdir -p /opt/vaultwarden
cd /opt/vaultwarden
  1. 创建 compose.yml:
YAML
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.example.com"
      SIGNUPS_ALLOWED: "true"
      INVITATIONS_ALLOWED: "false"
      ADMIN_TOKEN: "先随便填,后面会改为安全格式"
      TZ: "Asia/Shanghai"
    volumes:
      - ./vw-data:/data
    ports:
      - "127.0.0.1:8088:80"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
  1. 启动服务:
Bash
sudo docker compose up -d
sudo docker compose logs -f
  1. 先在本地验证服务:
Bash
curl http://127.0.0.1:8088

配置 Nginx 反向代理

  1. 创建配置文件:
Bash
vim /etc/nginx/sites-available/vaultwarden.conf
  1. 填写配置:
Nginx
map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    server_name vault.example.com;

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    server_name vault.example.com;

    ssl_certificate     /etc/nginx/ssl/vault.example.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/vault.example.com/privkey.pem;

    client_max_body_size 128M;

    location / {
        proxy_pass http://127.0.0.1:8088;
        proxy_http_version 1.1;

        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 https;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
    }
}
  1. 将刚才保存的证书和私钥写入文件:
Bash
mkdir -p /etc/nginx/ssl/vault.example.com
vim /etc/nginx/ssl/vault.example.com/fullchain.pem
vim /etc/nginx/ssl/vault.example.com/privkey.pem
  1. 启用配置:
Bash
sudo ln -s /etc/nginx/sites-available/vaultwarden.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

初始化配置

  1. 在浏览器访问自己的域名地址:https://vault.example.com
  2. 先注册一个自己的账号。
  3. 如果没有注册按钮,可以直接访问:https://vault.example.com/#/register
  4. 完成首个账号注册后,在配置中关闭注册:
YAML
SIGNUPS_ALLOWED: "false"
  1. 再重启 Docker 服务:
Bash
sudo docker compose up -d
sudo docker compose logs -f
  1. 可以通过访问 https://vault.example.com/admin 打开控制面板。

配置 ADMIN_TOKEN(安全强化)

  1. 生成 Argon2 哈希:
Bash
sudo docker exec -it vaultwarden /vaultwarden hash
  1. 输入自己的密码,拿到对应的哈希:
Text
$argon2id$v=19$m=65540,t=3,p=4$...
  1. 修改 compose.yml。注意所有 $ 都要改成 $$,并且最好使用单引号:
YAML
ADMIN_TOKEN: '$$argon2id$$v=19$$m=65540,t=3,p=4$$...'
  1. 重启服务:
Bash
sudo docker compose up -d
  1. 再使用刚才设置的密码访问后台。

浏览器插件配置

在 Chrome 中安装 Bitwarden 插件。先不要直接登录,选择最下方的自托管入口,先把服务地址改成自己的 Vaultwarden 域名,然后再登录自己注册的账号。

完成后,就可以在浏览器端开始使用自己的多平台密码管理工具。

Bitwarden 浏览器端自托管配置

Bitwarden 浏览器端登录界面

手机端同样可以下载 Bitwarden App 使用,服务器地址也需要改成自己的自托管地址。

完成

你现在已经拥有一个完全自建的 Bitwarden 密码管理系统。后续如果继续优化,可以优先考虑这几件事:

  • 关闭公开注册,只保留受控账号创建流程。
  • 妥善保管 ADMIN_TOKEN 的 Argon2 哈希和源站证书私钥。
  • 定期备份 vw-data 数据目录。
  • 为服务器补上基础安全措施,例如 SSH 加固、Fail2Ban 和最小权限开放。

感谢读到这里

日志还会继续,欢迎常来。

返回首页