自建Vaultwarden密码管理器,并实现自动备份和EdgeOne加速
Vaultwarden 是一款基于 Rust 语言开发的 Bitwarden 兼容服务器,专为自托管场景设计。其核心目标是提供高性能、低资源占用的密码管理解决方案,同时保持与官方 Bitwarden 客户端的完全兼容。通过轻量化设计和模块化架构,Vaultwarden 能够在树莓派、NAS 或低配 VPS 上高效运行,成为自托管用户的理想选择。
Vaultwarden 采用 Rust 语言开发,内存占用极低,通常仅需 10-50MB,远低于官方 Bitwarden 服务器的资源需求。其模块化设计支持 Docker 容器化部署,默认镜像体积小巧,约 100MB,启动速度快,适合资源有限的环境。无论是个人用户还是小型团队,Vaultwarden 都能在不牺牲功能的前提下,提供流畅的使用体验。
Vaultwarden 实现了 Bitwarden 客户端 API 的几乎所有功能,包括个人保险库、组织共享、多因素认证、附件与图标支持以及管理后台。个人保险库支持存储密码、笔记、信用卡等数据,而组织共享功能则允许用户通过集合、用户组和角色管理实现团队协作。多因素认证集成了 FIDO2 WebAuthn、YubiKey 和 Duo 等硬件密钥,进一步提升账户安全性。此外,Vaultwarden 还支持文件上传和网站图标自动抓取,并通过 Web 端管理界面提供用户管理和策略配置功能。
一、环境准备
在开始部署之前,需要确保你的系统环境满足以下条件:
- 操作系统:支持大多数 Linux 发行版,如 Ubuntu、Debian、CentOS 等。也可以在 Windows 和 macOS 上运行,但主要推荐在 Linux 服务器上部署。
- 硬件要求:虽然 Vaultwarden 以低资源消耗闻名,但至少应确保有 1GB RAM 和 1GHz CPU,以保证运行的流畅性。磁盘空间根据你的用户量和存储的数据量来决定,起步至少需要 10GB。
- 网络配置:确保服务器的指定端口(默认为 80 和 443)对外开放,以便用户访问 Vaultwarden 服务
- Docker Engine:用于容器化部署和管理。
- Docker Compose:支持configs的版本,用于多容器应用的编排
- SSH 客户端,宝塔面板
- 一个域名 (强烈建议,用于HTTPS)
- 一个有EdgeOne免费套餐的腾讯云账号
二、部署过程
1、安装Docker和Docker Compose
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
国外选官方,国内除官方以外都可以
国外选官方,国内建议选第一个毫秒镜像
2、安装宝塔面板及网站环境
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec
成功安装完面板后进入首页,只需要安装推荐的Nginx
3、创建部署目录并编辑部署文件
mkdir -p /home/vaultwarden && cd /home/vaultwarden
在部署目录下,创建docker-compose.yaml
文件,示例内容如下:
vim docker-compose.yaml
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
network_mode: bridge #使用默认的桥接网络
restart: always
environment:
- TZ=Asia/Shanghai
- ADMIN_TOKEN=xxxxxx #此值是Vaultwarden管理员面板的令牌(一种密码)。为了安全起见,这应该是一个长的随机字符串。如果未设置此值,则管理员面板将被禁用。建议openssl rand -base64 48生成ADMIN_TOKEN确保安全
- SIGNUPS_ALLOWED=true #允许注册,一般在第一次注册之后关闭
- SIGNUPS_VERIFY=true #设置注册邮箱验证,此处设置需要配置好SMTP才生效
- ADMIN_SESSION_LIFETIME=20 #会话持续时间
- ADMIN_RATELIMIT_SECONDS=60 #这是来自同一IP的登录请求之间的平均秒数,在Vaultwarden限制登录次数之前
- LOGIN_RATELIMIT_MAX_BURST=10 #允许在一阵登录/两步验证尝试中的最大请求次数。
- LOGIN_RATELIMIT_SECONDS=60 #这与ADMIN_LOGIN_RATELIMIT_SECONDS相同
- DOMAIN=https://xxxxx.yourdomain.com # 这是您希望与您的Vaultwarden实例关联的域名
- ADMIN_RATELIMIT_MAX_BURST=10 # 这与LOGIN_RATELIMIT_MAX_BURST相同,只争对admin面板
- WEB_VAULT_ENABLED=true #是否开启web UI
- SENDS_ALLOWED=false #是否开启send功能
- EMERGENCY_ACCESS_ALLOWED=true
- PUSH_ENABLED=true #启用移动端推送
- PUSH_INSTALLATION_ID=xxxxxxx #访问https://bitwarden.com/host/,输入您的电子邮箱地址,然后您将获得一个 INSTALLATION ID 和 KEY
- PUSH_INSTALLATION_KEY=xxxxxx # 请确保选择 bitwarden.com(美国)作为数据区域
- SMTP_HOST=smtp.domain.tld
- SMTP_FROM=vaultwarden@domain.tld
- SMTP_PORT=587
- SMTP_SECURITY=starttls
- SMTP_USERNAME=myusername
- SMTP_PASSWORD=MyPassw0rd
- LOG_FILE=/log/vaultwarden.log
- LOG_LEVEL=warn
- EXTENDED_LOGGING=true
volumes:
- ./data:/data #在docker-compose.yml同级目录创建的文件夹
- ./log:/log
ports:
- 8888:80 #映射80端口
vaultwarden_backup:
image: ttionya/vaultwarden-backup:latest
restart: always
depends_on:
- vaultwarden
volumes:
- vaultwarden-rclone-data:/config
- ./data:/data
environment:
- DATA_DIR=/data #指定存放 vaultwarden 数据的目录
- XDG_CONFIG_HOME=/config #指定存放 rclone config 配置的目录
- LOCALTIME_FILE=/tmp/localtime
- RCLONE_REMOTE_NAME=BitwardenBackup #Rclone远程名称,它需要和rclone config中的远程名称保持一致
- RCLONE_REMOTE_DIR=/BitwardenBackup/ #远程存储系统中存放备份文件的文件夹路径
- ZIP_PASSWORD=WHEREISMYPASSWORD? #压缩文件的密码。请注意,打包备份文件时始终会使用密码
- BACKUP_KEEP_DAYS=0 #在远程存储系统中保留最近 X 天的备份文件。设置为 0 会保留所有备份文件
- TIMEZONE=Asia/Shanghai #设置你的时区名称
- ZIP_TYPE=7z #只支持 zip 和 7z 格式
volumes:
vaultwarden-data:
# Specify the name of the volume where you save the vaultwarden data,
# use vaultwarden-data for new users
# and bitwardenrs-data for migrated users
name: vaultwarden-data
# name: bitwardenrs-data
vaultwarden-rclone-data:
external: true
# Specify the name of the volume where you save the rclone configuration,
# use vaultwarden-rclone-data for new users
# and bitwardenrs-rclone-data for migrated users
name: vaultwarden-rclone-data
# name: bitwardenrs-rclone-data
这里 SMTP 相关环境变量可以不填,但不填的话登录 Vaultwarden 二次验证就是不能选择邮件验证,但你可以选择其他方式进行二验
在docker-compose.yml
文件所在目录执行操作
# Start
docker-compose up -d
# Stop
docker-compose stop
# Restart
docker-compose restart
# Remove
docker-compose down
4、反向代理设置
- 签发证书,其他默认
- 启用 HTTPS:强烈建议通过反向代理启用 HTTPS,以确保数据传输过程中的加密。
- 定期更新:定期更新 Docker 镜像或 Vaultwarden 本身,以确保安全漏洞得到修复
三、创建用户,使用教程
反代设置好以后,接下来访问 web 页面创建用户
填写账号信息创建用户。创建完毕后,记得修改 compose 文件的环境变量 SIGNUPS_ALLOWED
为 false
接下来可以设置二验,并保存恢复代码以防万一。
接下来就是安装客户端,再进行登录就完事了。PC 端推荐使用浏览器并安装插件,移动端推荐安装 App
,都可以在 bitwarden下载页面 找到。
需要注意的是,登陆时需要选择自托管,并填写自己的网址才可以使用。
另外现在越来越多网站可以开启TOTP二次验证,vaultwarden 当然也是支持的
四、自动备份教程
1、配置Rclone
我们通过 Rclone 同步备份文件到远程存储系统。
访问 GitHub 了解更多存储系统使用教程,不同的系统获得 Token 的方式不同。
你可以通过下面的命令获得 Token
docker run --rm -it \
--mount type=volume,source=vaultwarden-rclone-data,target=/config/ \
ttionya/vaultwarden-backup:latest \
rclone config
我们建议将远程名称设置为 BitwardenBackup
,否则你需要指定环境变量 RCLONE_REMOTE_NAME
为你设置的远程名称。
2、自动备份
如果你有一个正在运行的 vaultwarden,但是不想使用 docker-compose.yml,我们同样为你提供了备份方法。
确保你的 vaultwarden 容器被命名为 vaultwarden,否则你需要自行替换 docker run 的 --volumes-from 部分。
默认情况下 vaultwarden 的数据文件夹是 /data,你需要显式使用环境变量 DATA_DIR 指定数据文件夹。
使用默认设置启动容器(每小时的 05 分自动备份)
docker run -d \
--restart=always \
--name vaultwarden_backup \
--volumes-from=vaultwarden \
--mount type=volume,source=vaultwarden-rclone-data,target=/config/ \
-e DATA_DIR="/data" \
ttionya/vaultwarden-backup:latest
3、还原备份
重要: 还原备份会覆盖已存在的文件。
你需要在还原备份前停止 Docker 容器。
你也需要下载备份文件到本地计算机。
因为主机的文件无法在 Docker 容器中直接访问,所以要将需要还原的备份文件所在目录映射到 Docker 容器中。
首先进入待还原的备份文件所在目录。
如果你使用的是“自动备份”,请确认 vaultwarden 卷的命名,并替换 --mount source 部分。
同时不要忘记使用环境变量 DATA\_DIR 指定数据目录(-e DATA\_DIR\="/data")。
docker run --rm -it \
\ # 如果你将本地目录映射到 Docker 容器中,就像 `vw-data` 一样
--mount type=bind,source="本地目录的绝对路径",target=/data/ \
\ # 如果你使用 Docker 卷
--mount type=volume,source="Docker 卷名称",target=/data/ \
--mount type=bind,source=$(pwd),target=/bitwarden/restore/ \
-e DATA_DIR="/data" \
ttionya/vaultwarden-backup:latest restore \
[OPTIONS]
五、EdgeOne加速
边缘安全加速平台 EO(Tencent cloud EdgeOne,下文简称为 EO )基于腾讯边缘计算节点提供加速和安全的解决方案,为电商与零售、金融服务、内容资讯与游戏等行业保驾护航,提升用户体验。
- 加速方面:边缘节点更贴近用户,有效降低了数据访问时间延迟,避免数据传输抖动,保障大量数据传输的稳定性和有效性。同时,产品提供了动静态数据加速,跨国加速,智能路由优化等加速特性,高效支撑对时延敏感的相关业务。
- 安全方面:提供 WAF,DDoS 安全防护服务。节点识别并拦截 L3/L4/L7层各类攻击请求,对 DDoS 攻击流量进行清洗,智能 AI 引擎、BOT 策略引擎对 Web、BOT、CC 类型攻击进行行为分析并更新拦截策略,阻断恶意请求到达用户源站,保障业务访问流畅稳定。
腾讯云国际站 6月13日开始限量内测 EdgeOne网站安全加速免费版!不限流量,不限请求次数!已备案域名还能享受中国大陆节点加速!
内测时间到2025 年7月15日晚上 11:59:59!内测结束会应该就会公测了!
目前EdgeOne国际版,无需实名,无需绑卡,就能使用服务!!
腾讯云国际版才有免费版,注册账号和购买时一定要注意!
腾讯云国际站:https://www.tencentcloud.com/zh
EdgeOne国际站:https://edgeone.ai/zh/redemption
1、免费计划
- 只限一个站点(一个主域,不限制子域名)
- 不限流量
- 不限请求次数
- 长期有效("永"不过期)
- 已备案域名支持中国大陆CDN加速
- 自动签发SSL证书
- 官方介绍:https://edgeone.ai/zh/document/70405
2、Get兑换码
官方推荐有3种方式:
第一:推特发布宣传内容,有机会获得兑换码(回复非常慢慢慢, 推特默认私信是关闭的要去手动打开)。
第二:在 Discord 上“抢”兑换码。北京时间下午三点/六点/晚上九点 准时发1兑换码)。
第三:参与Github活动可获取,https://edgeone.ai/blog/details/github-developer
另外一种方式,寻找EdgeOne人员PY一个码字。EdgeOne国内版国外版都是同一拨人!
3、绑定站点
访问 EO控制台
填写站点域名,一定要谨慎。因为目前暂时不能更换主域名。
特别提醒,域名有国内备案才能享受国内CDN加速!否则只有海外加速!速度相差太多了!
第二步:绑定已经拥有的免费版。点击下一步后稍等一会!
第三步:选择加速区域。已备案域名可选【全球可用区】。接入模式支持 CNAME 和 NS,根据自己的情况选择!
全球可用区支持中国大陆加速!!
4、加速vaultwarden站点
可以看到加速域名已经在部署中了,我们可以按以上步骤把所有需要加速的域名全部添加上
接下来我们给加速域名配置 SSL 证书,点击如图处的 编辑
为了省去手动更新证书的麻烦,我们直接选择 申请免费证书 ,点击 确定
可以看到,证书正在申请中,我们可以按以上步骤把所有加速域名的证书配置完成
稍等片刻,我们可以看到证书已经全部配置完毕
创建加速规则,否则无法进行设备审批登陆
添加以下路径为 不缓存(EdgeOne → 规则引擎 → 缓存规则):
/notifications/*
/identity/*
/api/*
/admin/*
启用真实客户端 IP 传递
在 EdgeOne → 站点配置 → 网络 中,确保 X-Forwarded-For
头已启用
进入vaultwarden admin:https://xxxxx.yourdomain.com/admin 页面,输入环境变量中的Admin_token
修改Client IP header为 X-Forwarded-For