一、前置准备
linux服务器,caddy(运行在docker容器),已备案域名一个
本来我打算用Bitwarden,我在逛github的时候找到了一个使用rust重构的轻量版本,功能基本一致,star50k,比较靠谱,所以下面我们来部署这个。
二、申请证书
将域名解析到服务器,然后为你的域名申请证书,下载nginx格式的(pem/key),上传到服务器。可以考虑使用二级域名和A解析,具体请自行搜索或者ai。
三、创建目录
项目参考结构如下:
vaultwarden/
├── docker-compose.yml
├── Caddyfile
├── caddy_data/
├── caddy_certs/ # 存放证书
└── caddy_config/四、配置Caddy反向代理
创建Caddyfile
cd vaultwarden
touch Caddyfile{
# ===直接关闭ocsp封套,阻止caddy每次启动时检查证书有效性(因为服务[>
ocsp_stapling off
}
你的域名 {
encode gzip
# 指向新容器的 80 端口
reverse_proxy vaultwarden:80 {
header_up X-Real-IP {remote_host}
}
# 你的新证书路径 (请确保容器内路径和证书文件名字正确)
tls /etc/caddy/vaultwarden_certs/pass.pem /etc/caddy/vaultwarden_certs/pass.key
log {
output file /data/access_vaultwarden.log
}
}五、配置docker compose
创建docker-compose.yml
touch docker-compose.yml配置docker-compose.yml:
services:
# Caddy 反向代理
caddy:
image: caddy:latest
container_name: caddy
restart: always
ports:
- "80:80"
- "443:443"
- "443:443/udp" # HTTP/3
# - "8080:8080"
environment:
TZ: Asia/Shanghai
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
- ./caddy_certs:/etc/caddy/certs
networks:
- caddy_net
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
stop_grace_period: 60s
environment:
- DOMAIN=https://你的域名
- WEBSOCKET_ENABLED=true
- SIGNUPS_ALLOWED=true # 注册完记得改成 false 并重建容器
# 改为请求 Bitwarden 的全球 CDN 服务器,加速获取图标
- ICON_SERVICE=bitwarden
volumes:
- ./vw-data/:/data/
networks:
- caddy_net # 指定加入这个网络
# 这里声明网络是外部存在的
networks:
caddy_net:
external: true注意:在你注册完成之后,记得把SIGNUPS_ALLOWED=true改成SIGNUPS_ALLOWED=false
六、启动容器
docker compose up -d如果这里一直卡着,连不上中央仓库的,可以试试配置镜像源,或者直接从镜像源拉取:
docker pull docker.m.daocloud.io/vaultwarden/server:latest
docker tag docker.m.daocloud.io/vaultwarden/server:latest vaultwarden/server:latest如果自己的电脑可以连上中央仓库,也可以选择用自己电脑拉取,然后打包上传到服务器,流程如下:
1.拉取镜像并打包
# 拉取
docker pull vaultwarden/server:latest
# 打包成文件 (会在当前目录下生成一个 vw.tar)
docker save -o vw.tar vaultwarden/server:latest2.上传到服务器
3.在服务器上加载
docker load -i ~/vw.tar4.启动
docker compose up -d七、配置
登录进去后,会让你创建一个账号,然后我们可以从其他浏览器导入我们以前存储的密码,至此基本配置完成,下面我们说说admin面板相关配置。
admin面板权限很大(可以删除任意用户、查看所有配置),所以默认是不开启的。要开启它,我们需要设置一个环境变量 ADMIN_TOKEN。这个 Token 就是登录 域名/admin 页面时的“密码”。
参考官方对admin面板的描述,以及保护admin密码的提示,我将后续步骤分为两类,一类是不打算给admin密码加密,打算直接明文放在docker-compose.yml的;另一类是打算给admin密码加密的。不管你喜欢哪种,官方都建议使用长随机字符串来充当admin密码,因为这个面板我们几乎不会进入,日常我们根本用不到这个面板。
1.明文
如果打算给admin密码进一步加密的请跳过这部分!
请按照以下步骤操作:
1. 生成一个安全的 Token
因为你是在 Linux 服务器上,可以直接用 openssl 生成一个随机的长字符串作为 Token。在终端运行:
openssl rand -base64 48(如果没有 openssl,你自己随便乱按键盘敲一串又长又复杂的字符串也可以,比如 MySeCreTToKen_123456_DoNotHackMe,但强烈建议用生成的随机串)
复制生成出来的这串字符,先记在记事本里,别丢了。
2. 修改 docker-compose.yml
编辑我们的 docker-compose.yml 文件:
nano docker-compose.yml在 environment: 下面增加一行 ADMIN_TOKEN。修改后的样子大概是这样:
yaml
services:
vaultwarden:
# ... 其他配置保持不变 ...
environment:
- DOMAIN=https://你的域名
- WEBSOCKET_ENABLED=true
- SIGNUPS_ALLOWED=true
# === 新增下面这一行 ===
- ADMIN_TOKEN=你刚才生成的那个长字符串粘贴在这里
# ... 其他配置保持不变 ...3. 重建容器生效
保存退出后,执行:
docker compose up -d(它会检测到环境变量变化,自动重建容器)
4. 访问 Admin 页面
现在你可以再次访问 https://你的域名/admin 了。
点击 Enter 即可进入。
Authentication Token: 输入你刚才设置的那个字符串。
2.哈希加密
第一步:生成 Argon2 哈希值
你现在的容器已经在运行了(名字叫 vaultwarden),我们可以直接利用这个容器内部的工具来生成密码哈希。
- 想好一个你用来登录 Admin 面板的密码(比如
MySuperSecretPassword)。 - 在你的服务器终端运行以下命令:
docker exec -it vaultwarden /vaultwarden hash- 程序会提示你输入密码(
Password:),输入你想好的密码,按回车。 - 它会让你再次确认密码(
Confirm Password:),再次输入并回车。 - 屏幕上会输出一长串以
$argon2id开头的字符,这就是你的哈希值。
注意: 这一串字符类似这样:
$argon2id$v=19$m=65540,t=3,p=4$DnJF...请把它完整复制下来,最好先粘在记事本里。
第二步:修改 docker-compose.yml
这是最容易出错的地方:“Variable Interpolation(变量插值)”。
在 docker-compose.yml 文件中,Docker 会把 $ 符号后面当作变量。但 Argon2 的哈希值里全是 $。所以,我们需要把所有的 $ 替换成 $$。
假设生成的哈希是: $argon2id$v=19$m=65540,t=3,p=4$DnJF...
yaml 文件里必须写成: $$argon2id$$v=19$$m=65540,t=3,p=4$$DnJF...
第三步:重建容器
修改完文件保存后,执行:
docker compose up -d第四步:验证登录
- 回到浏览器访问
https://你的域名/admin。 - 重点: 在输入框里,不要输入那一长串
$$argon...,而是输入第一步里想好的那个明文密码,它会自动将其哈希处理,然后跟存储的哈希值进行比对。 - 如果成功进入,说明配置成功。
至此,我们已经配置好了自己的密码管理器,你还可以通过安装浏览器插件和手机app的方式,让你的密码管理器在多端通用,下载链接在这里。
下一节我们会讲讲如何自动化备份到阿里oss对象存储。

Comments NOTHING