使用docker部署自托管密码管理器(vaultwarden)
简介
Vaultwarden 是一个开源的密码管理服务器实现,它是 Bitwarden 的非官方替代版本,使用 Rust 语言重写。作为一个轻量级的替代方案,它完全兼容 Bitwarden 客户端,同时具有更低的系统资源需求。
主要特点
- 资源占用低:相比官方服务器,内存占用显著降低,仅需约 10MB 内存
- 完整功能支持:支持密码存储、安全笔记、信用卡信息、身份信息等核心功能
- 多平台兼容:可与所有官方 Bitwarden 客户端无缝协作,包括浏览器插件、移动应用等
- 安全可靠:采用端到端加密,确保数据安全性
- 自托管友好:易于部署和维护,支持 Docker 容器化部署
- 免费开源:基于 AGPL-3.0 许可证开源,可自由使用和修改
适用场景:
- 个人用户自托管密码管理服务
- 小型团队或组织的密码管理方案
- 对系统资源敏感的环境
- 需要完全控制数据存储位置的用户
Vaultwarden 为用户提供了一个安全、可靠且易于维护的密码管理解决方案。它既保留了 Bitwarden 的优秀特性,又在性能和资源占用方面做出了显著优化,是一个理想的自托管密码管理器选择。
部署要求
- 🐳 Docker Engine
用于容器化部署和管理 - 🔧 Docker Compose
支持configs的版本
用于多容器应用的编排 - 💻 推荐服务器配置
CPU:2核心
内存:2GB RAM
存储:20GB+ 可用空间 - 🌐 网络环境
要求支持https访问,需配备tls证书,如果是自签证书,需要浏览器信任
自签tls证书
公网可通过Let's Encrypt获取免费证书,这里我内网使用,所以用的是自签证书,下面我使用的是idea里面的jtools插件中的证书管理插件生成证书
导入配置模板
修改hosts
设置为你的服务器ip或者你能解析到服务器ip的域名
生成CA证书
根据CA证书生成TLS证书
导出CA证书
在右侧内容面板右键,弹出的菜单中选择导出证书内容即可,后续浏览器信任需要
浏览器信任证书
Google
设置->隐私与安全->安全->管理证书->本地证书->管理从Windows导入的证书->导入->证书存储(受信任的根证书颁发机构)
部署vaultwarden
编写docker-compose.yml
tls.crt是通过插件生成的certificate.pem中的内容
tls.key是通过插件生成的certificate.key中的内容
configs:
tls.crt:
content: |
-----BEGIN CERTIFICATE-----
MIIB8zCCAZmgAwIBAgIIzj0s04yQMlQwCgYIKoZIzj0EAwIwHjEcMBoGA1UEAwwT
U2VsZiBDZXJ0aWZpY2F0ZSBDQTAgFw0yNTAxMjAwMjU2NDdaGA8yMzI1MDEyMDAy
NTY0N1owIDEeMBwGA1UEAwwVU2VsZiBDZXJ0aWZpY2F0ZSBOYW1lMFkwEwYHKoZI
zj0CAQYIKoZIzj0DAQcDQgAEa/QYX4TQOQqIEu7qE1tMD7MFiJWVis+qv6WfeEsw
RGfNP+KCg0GgU3rGx2ibL0VU1M9WyBQD+GGLFCvgnK3R3aOBvDCBuTAMBgNVHRMB
Af8EAjAAME0GA1UdIwRGMESAFDEqdzASmY7KoT3RKwj+C6gWIcF4oSKkIDAeMRww
GgYDVQQDDBNTZWxmIENlcnRpZmljYXRlIENBggjzKbbJe5RcOzAdBgNVHQ4EFgQU
IP+r+MCpabDSrO1hulIZmGuIF08wCwYDVR0PBAQDAgWgMB0GA1UdJQQWMBQGCCsG
AQUFBwMCBggrBgEFBQcDATAPBgNVHREECDAGhwTAqAG8MAoGCCqGSM49BAMCA0gA
MEUCID3fiqMM5mzJ8uzG23L2ANuIG6Nd//NeAXFfTyNCg6qAAiEAjIXnkAfqW+9/
0ffc5eoIGSgCYyqGJhYJ0IbDlkav3Qw=
-----END CERTIFICATE-----
tls.key:
content: |
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIDIAlK8VFiYO5knIiDmxtDWKuWErwNocWlMT0lj7628EoAoGCCqGSM49
AwEHoUQDQgAEa/QYX4TQOQqIEu7qE1tMD7MFiJWVis+qv6WfeEswRGfNP+KCg0Gg
U3rGx2ibL0VU1M9WyBQD+GGLFCvgnK3R3Q==
-----END EC PRIVATE KEY----
vaultwarden.conf:
content: |
proxy_cache_path /var/cache/nginx/vaultwarden levels=1:2 keys_zone=vaultwarden:500m inactive=1d max_size=200m;
server {
server_name default;
listen 8080 ssl;
http2 on;
access_log /var/log/nginx/vaultwarden-req.log;
error_log /var/log/nginx/vaultwarden-err.log debug;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
client_body_buffer_size 256k;
client_max_body_size 0;
ssl_certificate /tls/tls.crt;
ssl_certificate_key /tls/tls.key;
gzip on;
gzip_types text/plain image/gif image/jpeg image/png text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1000;
gzip_comp_level 6;
gzip_proxied any;
gzip_vary on;
location / {
proxy_pass http://vaultwarden;
proxy_set_header Host $$host;
proxy_http_version 1.1;
proxy_set_header Upgrade "websocket";
proxy_set_header Connection "upgrade";
proxy_set_header Connection "";
proxy_set_header X-Real-IP $$remote_addr;
proxy_set_header X-Forwarded-For $$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $$http_host;
proxy_set_header X-Forwarded-Port $$server_port;
proxy_set_header X-Forwarded-Proto $$scheme;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css|woff2)$$ {
proxy_pass http://vaultwarden;
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-Host $$http_host;
proxy_set_header X-Forwarded-Port $$server_port;
proxy_set_header X-Forwarded-Proto $$scheme;
client_body_buffer_size 256k;
client_max_body_size 2m;
proxy_cache vaultwarden;
proxy_cache_valid 200 304 302 1h;
expires 7d;
proxy_cache_key $$uri$$is_args$$args;
}
}
services:
vaultwarden:
image: vaultwarden/server:1.32.7
restart: always
container_name: vaultwarden
logging:
options:
max-file: '1'
max-size: '1k'
volumes:
- ./data:/data
environment:
DOMAIN: "https://192.168.1.188:8080"
ADMIN_TOKEN: "X!6Pf$Lt4%4iyQvR"
TZ: "Asia/Shanghai"
SENDS_ALLOWED: "true"
SIGNUPS_ALLOWED: "true"
deploy:
resources:
limits:
cpus: '0.2'
memory: '128M'
networks:
- lan
nginx:
image: nginx:alpine
restart: always
container_name: vaultwarden-web
logging:
options:
max-file: '1'
max-size: '1k'
deploy:
resources:
limits:
cpus: "0.1"
memory: "64M"
environment:
TZ: Asia/Shanghai
configs:
- source: vaultwarden.conf
target: /etc/nginx/conf.d/vaultwarden.conf
- source: tls.key
target: /tls/tls.key
mode: 0400
- source: tls.crt
target: /tls/tls.crt
mode: 0400
volumes:
- ./nginx/logs:/var/log/nginx
ports:
- '8080:8080'
networks:
- lan
networks:
lan:
driver: bridge
ipam:
driver: default
config:
- subnet: 175.168.24.0/24
- 启动
docker-compose up -d
浏览器访问和测试
访问验证
看到这个,说明浏览器导入的ca证书已经没问题了
注册账号
登陆和插件登陆
浏览器下载Bitwarden插件
选择自托管
登陆
测试自动填充功能
自动填充
总结与进阶建议
- 部署完成后的检查清单
✅ 访问 Web 界面确认服务正常运行
✅ 完成管理员账号的注册与设置
✅ 验证 HTTPS 证书配置是否正确
✅ 确认数据备份路径已正确映射 - 安全建议
1.定期备份
建议每周备份一次数据库
将备份文件存储在异地或云端
定期验证备份的可用性
2.系统维护
及时更新 Docker 镜像到最新版本
定期检查系统日志
监控服务器资源使用情况 - 进阶使用
配置邮件服务实现邀请和通知功能
启用双因素认证提升安全性
设置 API 密钥实现高级功能
配置反向代理实现更灵活的访问控制 - 常见问题解决
如果遇到使用问题,可以:
查看官方 Wiki 文档
访问 GitHub Issues 页面
加入社区讨论组寻求帮助
通过以上步骤,你已经成功部署了一个安全可靠的密码管理服务。持续的维护和安全意识将帮助你更好地使用 Vaultwarden。祝你使用愉快!
原文地址:https://blog.csdn.net/qq_42413011/article/details/145278961
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!