前言(可跳过)
为了能够记住密码相信小伙伴们使用过很多密码管理器,比如手机、浏览器自带的密码管理软件,或者微信收藏、便签这种手动保存密码的方法。但是随着注册的网站越来越多,记忆密码会带来很多烦恼。很多密码可能会混淆,还有很多无关紧要的网站干脆就设置成 ”12356789“ 这样的弱密码,要么所有网站都使用同一个密码。这些做法无疑会带来安全性问题和密码遗失的窘境。
这些问题也困扰了我很久。因此,想要找到一款全平台自动同步的密码管理软件。调查了一下之后发现要么就是闭源的付费软件,要么就只能在部分平台进行同步。一次偶然,发现很多人都在讨论**Bitwarden**。搜索之后发现,这不就是我理想的密码管理软件吗?
Bitwarden有免费的套餐。如果不想折腾的朋友可以用他们家的免费套餐,使用的是他们的服务器,也是支持全平台的。缺点是数据不在自己手中,在支付宝都能崩的时代里我已经不相信官方的安全性,自建的话可以实现多重备份,不怕数据丢失。话不多说,开工!
自建方案
**方案一:**使用官方自建方案。缺点是使用两步验证器等高级功能还是需要付费获取密钥才能使用。如果不付费的话就只是做到了数据保留在自己手中。
**方案二:**使用第三方社区的替代方案。缺点是部分功能不完善(看了一下基本都是不用的功能),可能会出现稳定性和不兼容的问题。
下面两种方法都会分析给大家。一些自己踩过的坑也分析给大家。
预备
一台2c2g以上的服务器、域名、SSL证书(后续会出一期Certd SSL证书自动化部署更新系统,这里先挖个坑)、一点点docker知识。下面是官方的服务器配置要求:
方案一:官方自建
一、安装docker和docker compose(以Ubuntu22.04为例,已安装的可跳过)
安装Docker
-
更新包索引:
sudo apt-get update
-
安装必要的包,以便通过HTTPS使用存储库:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
-
添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-
设置Docker存储库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
-
更新包索引:
sudo apt-get update
-
安装Docker CE:
sudo apt-get install docker-ce
-
启动Docker并设置开机自启动:
sudo systemctl start docker sudo systemctl enable docker
-
验证Docker安装是否成功:
sudo docker run hello-world
安装Docker Compose
-
下载Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
为Docker Compose二进制文件添加执行权限:
sudo chmod +x /usr/local/bin/docker-compose
-
创建符号链接(可选):
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
-
验证Docker Compose安装是否成功:
docker-compose --version
二、创建新用户和工作空间
-
创建bitwarden用户
sudo adduser bitwarden
-
设置密码
sudo passwd bitwarden
-
创建并添加bitwarden至docker组
sudo groupadd docker sudo usermod -aG docker bitwarden
-
创建bitwarden工作目录(课自行修改)
sudo mkdir /opt/bitwarden # 创建工作目录 sudo chmod -R 700 /opt/bitwarden # 赋予读写权限 sudo chown -R bitwarden:bitwarden /opt/bitwarden # 将目录权限赋予bitwarden用户
三、安装Bitwarden
开始之前请进入到你前一步设置的工作目录。
-
下载安装脚本
curl -Lso bitwarden.sh "https://func.bitwarden.com/api/dl/?app=self-host&platform=linux" && chmod 700 bitwarden.sh
-
安装
./bitwarden.sh install
-
配置
- Enter the domain name for your Bitwarden instance: 准备好的域名
- Do you want to use Let’s Encrypt to generate a free SSL certificate? (y/n): 如果你已经有证书就不用再申请,将证书放到./bwdata/ssl/your.domain目录下
- Enter your installation id: 点击进入https://bitwarden.com/host/,获取安装id
- Enter your installation key: 点击进入https://bitwarden.com/host/,获取key
- Enter your region (US/EU): 默认US
- Do you have a SSL certificate to use? (y/n): 根据自己情况选择
- Do you want to generate a self-signed SSL certificate? (y/n): 根据自己情况选择
-
修改端口
# Note: After making changes to this file you need to run the `rebuild` or `update` 修改了这个部分你需要运行./bitwarden rebuild或者./bitwarden update # Full URL for accessing the installation from a browser. (Required) url: https://your.domain ... http_port: 如果你的80端口被占用就需要设置其他端口 ... https_port: 如果你的443端口被占用就需要设置其他端口 ...
-
修改环境变量
vi ./bwdata/env/global.override.env
需要修改以下几个位置:
... globalSettings__mail__replyToEmail=<placeholder>这里请注意,有些邮箱系统要求发件人要和用户名相同,否则可能会报错。 其他部分根据你使用的邮件服务商填写,# 后面是QQ邮箱例子 globalSettings__mail__smtp__host=<placeholder> # smtp.qq.com globalSettings__mail__smtp__port=<placeholder> # 465(587端口适用于TLS,这里是SSL验证,填写587可能会报错) globalSettings__mail__smtp__ssl=<placeholder> # true globalSettings__mail__smtp__username=<placeholder> # [email protected] globalSettings__mail__smtp__password=<placeholder> # 生成的授权码 ... adminSettings__admins= # 管理员邮箱(必须),可以和上面的邮件服务器相同 ...
我推荐使用QQ邮箱,因为没有SMTP数量限制。
-
配置docker外的nginx
如果你的80或者443端口被占用,那么你需要再进行一步反向代理。将下面的bitwarden配置文件修改后复制到
/etc/nginx/nginx.config
的http{ }
中。sudo vi /etc/nginx/nginx.config
修改对应的部分:
# BitWarden server { listen 80; server_name your.domain; return 301 https://$host$request_uri; } server { listen 443 ssl; #请填写绑定证书的域名 server_name your.domain; #请填写证书文件的相对路径或绝对路径 ssl_certificate your.crt; # 这里改成 工作目录/bwdata/ssl/your.domain/xxx.crt #请填写私钥文件的相对路径或绝对路径 ssl_certificate_key your.key; # 这里改成 工作目录/bwdata/ssl/your.domain/xxx.key ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Range $http_range; proxy_set_header If-Range $http_if_range; proxy_redirect off; proxy_pass http://127.0.0.1:10086; # 改成你设置的http端口 client_max_body_size 20000m; } }
:wq # 保存退出
nginx -t # 检查配置文件是否正确 nginx -s reload # 重载配置文件
至此,所有配置全部完成。
-
管理员设置
登录你的bitwarden的管理员站点
https://your.domain/admin
会出现下面的界面,如果报错,请看8. Tips
输入你设置好的管理员邮箱,然后去邮箱里接收验证链接,应该长这样:
Log in Now
接下来你就可以注册一个账号使用了,具体的使用方法请自行百度或者留言。
-
Tips
- 以上实现的是全链路的SSL加密通信。如果你提前准备好了SSL证书,其实在
3. 配置
这一步只需要设置好你的域名即可,有关SSL的全选n
。个人觉得服务器内部不需要加密通信(这里指的是服务器的nginx向docker中的nginx转发),除非担心你的服务器被入侵。这个按照自己的需求来。 - 如果输入你的域名能打开bitwarden,但是注册或者进入管理员面板后报错502,请输入
docker ps
找到admin的容器id,例如7abe6e143c39 bitwarden/admin:2024.11.0
,然后输入命令docker logs 7abe6e143c39
查看日志,如果有报错基本都在这个日志能看到。找到问题请善用chatgpt等工具,也可以留言我帮你解决(不一定及时)。
- 以上实现的是全链路的SSL加密通信。如果你提前准备好了SSL证书,其实在
方案二:社区自建
一、安装docker和docker compose
见方案一:安装docker和docker compose(以Ubuntu22.04为例,已安装的可跳过)。
二、创建新用户
见方案一:创建新用户和工作空间。
三、安装 Vaultwarden
Vaultwarden官方仓库:Vaultwarden: Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs。
-
创建数据存储路径(包含数据库和配置文件)
su bitwarden # 切换到bitwarden用户 mkdir /home/bitwarten/data # 创建数据目录,这里可以自行设置,之后的配置文件和数据库都会在这里。
-
创建docker-compose.yml
这里我推荐使用docker compose方式安装vaultwarden。直接在命令行用docker安装坑太多不推荐!
cd /home/bitwarden # 进入你准备安装vaultwarden的目录,可自行修改 vi docker-compose.yml
以下是最基本的配置,开启了管理员页面和移动设备通知。修改下面的配置文件后粘贴到docker-compose.yml文件中。(如果你不熟悉docker,建议只修改备注的地方)
services: vaultwarden: image: vaultwarden/server:latest container_name: waitwarden # 容器名称 restart: unless-stopped ports: - "10086:80" # 将10086修改为你想要映射的端口(记住你修改的端口,后面配置nginx用得到) volumes: - ./data:/data # 配置数据存储路径。将./data修改为你在第一步设置的数据存储路径 environment: - ADMIN_TOKEN=XXXXXXXXXXXXXXXXXX # 去下面的密码生成网站生成一串40位以上的token - PUSH_ENABLED=true # 这里的意思是打开推送功能(不开启的话移动设备无法接收通知) - PUSH_INSTALLATION_ID=XXXXXXXXX # 去下面的推送通知网站获取你的id和key。填入id - PUSH_INSTALLATION_KEY=XXXXXXXX # 填入key - WEBSOCKET_ENABLED=true - PUSH_RELAY_URI=https://api.bitwarden.eu - PUSH_IDENTITY_URI=https://identity.bitwarden.eu - SIGNUPS_ALLOWED=false # 禁止新用户注册,可以在管理员页面邀请注册
-
启动!!!
第一次启动:
docker compose up -d && docker compose logs -f
docker compose logs -f
是为了查看日志,如果报错的话可以查一查原因,不懂的话可以留言帮你解决。如果更新compose文件之后的话用下面的命令启动:
docker compose pull && docker compose up -d && docker compose logs -f
此时,如果你的端口是打开的就可以用
ip:port
访问了(不推荐)
四、配置nginx
见方法一:配置docker外的nginx。忽略其他废话,直接配置,注意其中的端口修改为你刚才设置的映射端口。
下面是官方的nginx示例:Proxy examples
还有官方的HTTPS证书申请方法:Enabling HTTPS
五、其他设置
第四步完成之后就可以使用域名来访问自建的vaultwarden了。其他设置都可以在https://you.domain/admin
进行设置。
这里一定配置好邮箱,邮箱的配置还是看方法一。这里还有官方推荐的几种邮箱:SMTP Configuration
大功告成!
其他更加详细的配置建议查看官方文档:Vaultwarden Wiki。
- 附上我的博客地址