手把手教你1panel部署 Vaultwarden搭配 MySQL反向代理超详细教程
作为一款开源的密码管理工具,Bitwarden 的自建版 Vaultwarden 香到不行,既能实现密码统一管理,又能保证数据隐私,这篇就把从部署到配置 HTTPS、对接 MySQL、关闭注册的全套流程整理清楚,一步一步跟着做,新手也能搞定!
前期准备
服务器已部署 1Panel 面板(全程基于面板操作,更便捷)
已安装 OpenResty(用于反向代理 + HTTPS 配置)
阿里云服务器需提前准备好防火墙配置权限
域名已解析至服务器 IP
外网访问端口18800
一、面板安装 Vaultwarden(Bitwarden)
打开 1Panel 面板,进入应用商店,直接搜索
bitwarden,找到对应应用进行安装安装时端口保持默认,打开对应端口的外部访问权限,完成后先启动应用

二、OpenResty 配置反向代理 + HTTPS(关键!Bitwarden 必须 HTTPS 访问)
Vaultwarden 强制要求 HTTPS 访问,因此需要通过 OpenResty 配置反向代理,核心是启用 HTTPS、配置代理地址和对应端口,步骤如下:
进入 1Panel 的 OpenResty 管理界面,新建反向代理规则
启用 HTTPS,上传 SSL 证书(域名证书)
填写反向代理目标地址(Vaultwarden 的内网地址 + 端口)
配置完成后务必核对各项参数,避免配置错误




三、阿里云防火墙放通端口
登录阿里云服务器控制台,进入安全组 / 防火墙配置,将18800端口的入站规则放通,保证外部能正常访问。
四、初步访问创建基础账号并生成 Admin_Token(管理员令牌)
通过配置好的 HTTPS 地址访问:
https://域名:18800/,先创建基础账号生成加密的 Admin_Token(Vaultwarden 推荐用哈希值,避免明文暴露),执行 Docker 命令:
docker exec -it 1Panel-bitwarden-htem /vaultwarden hash
执行命令后按提示输入密码(至少 8 位),再次确认密码,系统会自动生成 Argon2id 格式的 Admin_Token 哈希值,
复制保存好这个值,后续会用到
示例生成结果:
ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$LNuRR3K0232FW68U36aFCNsLGB5dmn079GJLFI1M088$NGkD4RrnStvRidXfI71sb7sglCU/ov0oCgpyhWsXyJo'
💡 小贴士:Vaultwarden 推荐用哈希值作为环境变量,而非明文密码,避免在 Docker Compose 中暴露敏感信息。
五、编辑 Compose 配置,关闭注册 + 配置 MySQL + 添加 Admin_Token
这一步是核心配置,主要实现关闭公共注册、对接 MySQL 数据库、配置管理员令牌,操作如下:
回到 1Panel,进入应用商店 - 已安装,找到 bitwarden,点击参数 - 高级选项 - 编辑 compose
在environment节点下添加以下配置,按实际信息修改:
SIGNUPS_ALLOWED=false:关闭外部注册,仅管理员可添加用户DATABASE_URL:MySQL 数据库连接地址,语法为mysql://[[user]:[password]@]host[:port][/database]ADMIN_TOKEN:粘贴第四步生成的哈希值
默认 Vaultwarden 使用 SQLite 数据库,如需切换为 MySQL,可按以下步骤操作,全程在 1Panel 上完成,无需复杂命令:
在 1Panel 的数据库管理界面,新建 MySQL 数据库(示例:库名 vaultwarden,用户名 vaultwarden,设置密码)

4. 完整的 Compose 配置参考(按需修改变量):
networks:
1panel-network:
external: true
services:
bitwarden:
container_name: ${CONTAINER_NAME}
deploy:
resources:
limits:
cpus: ${CPUS}
memory: ${MEMORY_LIMIT}
environment:
- SIGNUPS_ALLOWED=false
- DATABASE_URL=mysql://vaultwarden:数据库密码@host:3306/vaultwarden
- ADMIN_TOKEN=第四步生成的哈希值
image: vaultwarden/server:1.35.4-alpine
labels:
createdBy: Apps
networks:
- 1panel-network
ports:
- ${HOST_IP}:${PANEL_APP_PORT_HTTP}:80
restart: always
volumes:
- ./data:/data
这里DATABASE_URL=mysql://vaultwarden:数据库密码@host:3306/vaultwarden ,如果mysql也是通过应用商店部署的或者是docker部署的,这里需填写msyql的docker名
配置完成后保存,应用商店重建 Bitwarden应用,使配置生效。
六、对接 MySQL 数据库(非必须,默认 SQLite,追求性能可换)
💡 参考文档:
https://geekdaxue.co/read/Vaultwarden-Wiki-CN/docs-Using-the-MariaDB-(MySQL-Backend.md
数据迁移(SQLite→MySQL)
服务器安装 sqlite3 命令(Linux 系统):
yum install sqlite3 -y/apt install sqlite3 -y进入 Vaultwarden 的数据目录,导出 SQLite 数据(过滤无用表,仅保留 INSERT 语句):
sqlite3 db.sqlite3 .dump | grep "^INSERT INTO" | grep -v "__diesel_schema_migrations" > sqlitedump.sql ; echo -ne "SET FOREIGN_KEY_CHECKS=0;n$(cat sqlitedump.sql)" > mysqldump.sql
将导出的数据导入 MySQL 数据库:
mysql --force --password --user=vaultwarden --database=vaultwarden -h 127.0.0.1 < mysqldump.sql
导入完成后,启动 Vaultwarden,即可正常使用 MySQL 数据库
七、管理员界面配置 SMTP(邮件服务)
通过管理员地址访问:
https://你的域名:18800/admin,输入第四步设置的明文密码(非哈希值)登录进入管理员界面后,找到 SMTP 配置项,填写邮件服务器信息(SMTP 地址、端口、账号、密码、发件人等)

3. 配置完成后测试邮件发送,确保密码找回、邀请用户等功能正常。
最终验证
访问
https://你的域名:18800/,可正常登录已创建的账号尝试访问注册页面,已无法进行公共注册
管理员界面可正常操作,SMTP 测试邮件发送成功
查看 MySQL 数据库,已有对应的数据表和数据,说明迁移成功
总结
这套部署流程实现了 Vaultwarden 的HTTPS 安全访问、MySQL 数据库对接、关闭公共注册、管理员权限控制和SMTP 邮件配置,基于 1Panel 面板操作大幅降低了难度,适合个人和小型团队自建密码管理服务。核心注意点就是HTTPS 的强制要求和Admin_Token 的加密配置,避免敏感信息暴露,按步骤操作基本不会踩坑!
