bitwarden内网自建服务器(Ubuntu 22.04 + Docker + Nginx + IP + 自签 SSL)
一、文档简介
1. 编写目的
本教程用于指导用户在 Ubuntu 22.04 内网环境 中,
通过 Docker + Nginx 部署 Vaultwarden(Bitwarden 非官方服务器),
并实现 基于 IP 的 HTTPS 安全访问。
完成本教程后,你将获得:
- 一套可长期稳定使用的私有密码管理服务
- 完全兼容官方 Bitwarden 客户端与浏览器插件
- 内网 IP 访问也能显示 HTTPS 安全锁
- 资源占用极低、更新维护简单的部署方案
2. 适用范围
- 操作系统:Ubuntu 22.04 LTS
- 网络环境:内网 / 局域网
- 访问方式:IP 直连(无域名)
- 使用对象:个人 / 家庭 / 小团队
3. 环境说明
- 系统版本:Ubuntu 22.04
- Vaultwarden 版本:Docker
latest - Docker:官方仓库安装
- 反向代理:Nginx
- SSL 方式:自建 CA + IP SAN 证书
4. 免责声明
- 本教程为个人实践总结,非官方文档
- 所有操作请自行评估风险
- 涉及密码与重要数据,请务必提前备份

二、准备工作
1. 安装 Docker(官方推荐方式)
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg |
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg]
https://download.docker.com/linux/ubuntu
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
验证安装:
docker --version
docker compose version
三、Vaultwarden 部署
1. 创建工作目录
sudo mkdir -p /opt/vaultwarden
sudo chown $USER:$USER /opt/vaultwarden
cd /opt/vaultwarden
2. 创建 docker-compose.yml
vim docker-compose.yml
version: "3.9"
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
WEBSOCKET_ENABLED: "true"
SIGNUPS_ALLOWED: "false"
DOMAIN: "https://192.168.0.104"
ROCKET_PORT: 8080
volumes:
- ./data:/data
ports:
- "127.0.0.1:8080:8080"
说明:
-
SIGNUPS_ALLOWED=false:防止被随意注册 -
DOMAIN:必须与最终访问地址一致 -
127.0.0.1绑定:避免服务直接暴露到内网
3. 启动 Vaultwarden
docker compose up -d
docker ps
四、生成自签 CA 与 SSL 证书(IP 访问必须)
⚠️ 如果证书中 没有 SAN IP,Bitwarden 客户端将拒绝连接
1. 创建根 CA(只需一次)
sudo mkdir -p /opt/ssl
cd /opt/ssl
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
Internal-Vaultwarden-CA
2. 为服务器 IP 签发证书
openssl genrsa -out vw.key 2048
vim vw.cnf
[req]
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext
[dn]
CN = 192.168.0.104
[req_ext]
subjectAltName = @alt_names
[alt_names]
IP.1 = 192.168.0.104
openssl req -new -key vw.key -out vw.csr -config vw.cnf
openssl x509 -req -in vw.csr
-CA ca.crt -CAkey ca.key -CAcreateserial
-out vw.crt -days 825 -sha256
-extensions req_ext -extfile vw.cnf
五、Nginx 反向代理配置
sudo apt install -y nginx
sudo vim /etc/nginx/sites-available/vaultwarden.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl http2;
server_name 192.168.0.104
ssl_certificate /opt/ssl/vw.crt;
ssl_certificate_key /opt/ssl/vw.key;
client_max_body_size 128m;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
启用配置并重载:
sudo ln -s /etc/nginx/sites-available/vaultwarden.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
六、客户端配置与使用
1. 导入 CA(非常关键)
Windows
-
将
ca.crt导入 -
位置:受信任的根证书颁发机构
手机 / Bitwarden App
-
导入
ca.crt -
完全关闭并重启 App
2. 访问 Vaultwarden
https://192.168.0.104
-
页面可正常访问
-
显示 HTTPS 安全锁
七、初始化与使用示例
示例 1:首次注册
-
注册第一个账号
-
注册完成后立刻关闭注册(已默认关闭)
示例 2:官方客户端使用
-
桌面端 / 手机端
-
自定义服务器地址填写 IP
-
自动填充、同步功能正常
八、完成效果
部署完成后,你将拥有:
-
内网 HTTPS 安全访问
-
Vaultwarden 稳定运行
-
官方 Bitwarden 客户端完全兼容
-
极低资源占用(1G 内存即可)
九、进阶:长期安全备份体系规划
当 Vaultwarden 已经可以在内网中稳定运行,并开始存放真实且重要的账号密码后,
部署本身就不再是风险的主要来源。
真正需要认真面对的,是长期使用过程中的数据安全与可恢复性问题,例如:
- 密码数据被误删或损坏,是否还能找回
- 服务器、磁盘或系统出现故障时,能否快速恢复
- 备份的数据是否完整、可信,并且真的“能用”
因此,在将 Vaultwarden 作为长期密码管理方案之前,
非常有必要提前规划一套成体系的安全备份方案,
而不仅仅是简单地拷贝文件或保留一份副本。
后续内容规划说明
围绕 Vaultwarden 的长期安全使用,
我会把「备份」这一主题拆分为以下四个部分,逐步展开说明:
-
应该备份哪些数据
—— 明确 Vaultwarden 中哪些数据是必须备份的,
同时区分应用数据备份与系统映像备份在整体灾备中的不同作用。 -
备份数据的安全存储方式
—— 介绍如何对备份文件进行加密、解密与完整性验证,
以及在备份场景下引入 GPG 的基本思路。 -
YubiKey 在备份体系中的使用方式
—— 从实际备份需求出发,
说明硬件密钥在密钥保护、误操作防护中的角色与边界。 -
将备份流程自动化并形成体系
—— 把分散的操作整合为可重复、可验证、可恢复的完整流程,
使备份不依赖个人记忆,而成为长期可执行的安全机制。
以上内容会按顺序逐篇展开,
从“认清该备什么”,到“如何安全保存”,再到“如何长期稳定执行”,
逐步深入,而不是一开始就引入复杂工具或脚本。
如果你已经完成了本文的部署,
并计划将 Vaultwarden 作为长期使用的密码管理服务,
建议在正式投入使用前,
先把这套备份与恢复的整体思路规划清楚。
十、卸载与恢复
1. 卸载 Vaultwarden
cd /opt/vaultwarden
docker compose down
rm -rf /opt/vaultwarden
2. 清空数据(恢复初始状态)
rm -rf /opt/vaultwarden/data
附件
说明:
本文中的部署流程,我已经整理成了一套 自动化部署脚本,
适合希望「少踩坑、快速复现」的用户。脚本主要用于:
- 初始化 Vaultwarden 运行环境
- 规范化目录与权限
- 快速完成容器与基础配置
如果你更偏向「直接落地」,
或者不想手动重复这些步骤,
可以私下交流。









