编辑
2025-07-11
容器
00

目录

1. 关于Vaultwarden
2. 部署Vaultwarden
2.1 Vaultwarden的容器配置
2.2 Nginx的容器配置
2.3 应用的Nginx配置文件
3. 访问并设置Vaultwarden

vaultwarden.png

1. 关于Vaultwarden

Bitwarden是一个Vault软件,将你所有的信息都存储在一个加密的保险库里。它不仅可以可以管理密码,可以添加笔记和文件。这些都是加密存储的,通过一个主密码来解锁保险库。它有免费的版本,可以在它官网上注册,并且有苹果和安卓的客户端。

Bitwarden也是可以私有部署,但是它的组件非常多,部署极为复杂,并且非常占用资源。因此,Vaultwarden出现了。它是一个Bitwarden的替代方案,体验和Bitwarden几乎是一样的,兼容Bitwarden的客户端。它的docker镜像只有一个,部署难度很低,且资源占用很低,2核2G的轻量服务器可以流畅运行。Github项目地址

2. 部署Vaultwarden

最简单的方式就是使用Docker部署。本身作为一个要求安全性的软件,官方推荐部署在一个代理后面,代理负责处理HTTPS的流量。

2.1 Vaultwarden的容器配置

  • 因为部署在Nginx后面,所以不需要发布端口到服务器上,暴露端口80作为提示作用。
  • 挂载持久存储/data,这里面有Vaultwarden的数据库文件,默认是SQLite。
  • 首次运行要允许注册 SIGNUPS_ALLOWED=true,也就是注册第一个admin账号。在需要的账号的注册都注册完之后,改成false关闭新用户注册。
  • 首次运行添加ADMIN_TOKEN来管理Admin界面来设置整体应用。设置完之后,将这一行注释掉。
  • network是让Vaultwarden只可以和Nginx进行交互。我是有一个单独的Nginx来代理很多的应用。每次用新应用就直接attach新的容器到Nginx的网络里。但是可以将Nginx和Vaultwarden放到一个Docker Compose文件里。这样也不需要额外的Docker网络。
yaml
services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: unless-stopped expose: - 80 volumes: - ./vw-data:/data environment: - SIGNUPS_ALLOWED=true - WEBSOCKET_ENABLED=true - ADMIN_TOKEN='sA3uL1kwrhXEZOu7BIAopdvLL3P99g4qxcN62IKI62HgpN/BQ+ilVjJc6G+oRpaZ' - DOMAIN=https://password.example.com networks: - nginx-reverse-proxy networks: nginx-reverse-proxy: external: true

2.2 Nginx的容器配置

  • Nginx监听80和443端口。
  • 数据卷挂载:
    • Nginx的配置文件
    • Nginx的log文件
    • SSL的证书
    • 本地的时间
  • Nginx网络只用于转发流量到不通的应用
  • Internet网络用于Nginx和Internet流量的交互
yaml
services: nginx: image: nginx:latest container_name: nginx-reverse-proxy ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./log:/var/log/nginx - /etc/letsencrypt/live/zenseek.site/fullchain.pem:/etc/nginx/certs/fullchain.pem:ro - /etc/letsencrypt/live/zenseek.site/privkey.pem:/etc/nginx/certs/privkey.pem:ro - /etc/localtime:/etc/localtime:ro networks: - nginx-reverse-proxy - internet restart: always networks: nginx-reverse-proxy: external: true internet: external: true

2.3 应用的Nginx配置文件

  • 如果有域名就监听域名,没有可以使用IP加其他端口。
  • 流量转发到http://vaultwarden:80,因为容器之间通信,只需要HTTP就可以了。而这个容器名可以在docker network里看到它的名字和IP。在YAML文件里设置了container_name,那就不会错了。
nginx
server { listen 443 ssl; server_name password.example.com; # Add this line to increase the limit client_max_body_size 100M; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; # SSL/TLS Security Settings ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers HIGH:!aNULL:!MD5; # Enable HSTS add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; location / { proxy_pass http://vaultwarden:80; 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; } location /notifications/hub { proxy_pass http://vaultwarden:3012; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location /notifications/hub/negotiate { proxy_pass http://vaultwarden:80; } }

在Nginx的容器内查看新的配置文件是否正确并重启Nginx。

bash
root@b2f567d4689b:/# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful root@b2f567d4689b:/# nginx -s reload

3. 访问并设置Vaultwarden

访问地址就是https://password.example.com. Nginx会终结HTTPS,将HTTP流量转到Vaultwarden容器。在允许注册的情况,页面会让你输入邮箱地址和用户名,然后下一步到设置主密码。

本文作者:潘晓可

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!