自建Bitwarden服务端
source link: https://maxqiu.com/article/detail/126
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
官方教程:Install and Deploy - Linux
项目 最低 推荐
CPU x64 1.4GHz x64 2GHz 双核
内存 2GB 4GB
存储 10GB 25GB
Docker 版本
Engine 19+
Compose 1.24+
Engine 19+
Compose 1.24+
PS:笔者购买腾讯云的
1C2G
服务器,实际系统只有1837MB
内存,而搭建时使用的mssql
服务至少需要2000MB
内存,因此不能正常部署。笔者又切换到2C4G
配置的服务器上运行,mssql
却只占用500MB
,整个服务加起来占用1GB
。哎~该死的mssql
部署完成后的服务建议使用域名进行访问,且一定是https
协议访问
- 有域名:设置域名解析到服务器(国内需备案),再申请一个免费的
https
证书(阿里云,腾讯云都有) - 无域名:自定义一个域名,并修改本地
hosts
文件,使域名解析到对应服务器
安装ID和密钥
每个自建的
bitwarden
服务端在安装时都需要一对唯一的id
和key
。
浏览器打开https://bitwarden.com/host/
,输入个人邮箱并提交,之后将id
和key
记录下来
服务端需要设置一个邮箱的账户密码,用于发送注册通知等
本文基础系统环境:
CentOS7
服务端安装
创建文件夹与下载脚本
PS:官方文档建议创建一个独立用户,使
Bitwarden
实例与服务器上运行的其他应用程序隔离开来,本文直接使用root
用户
# 创建文件夹
mkdir -p /work/bitwarden
# 进入该文件夹
cd /work/bitwarden
# 下载脚本并授予执行权限(如果出现下载不了的情况建议自己电脑上科学上网进行下载,完成上传)
curl -Lso bitwarden.sh https://go.btwrdn.co/bw-sh && chmod 700 bitwarden.sh
执行初始化脚本
./bitwarden.sh install
初始化过程中会有如下提示:
Enter the domain name for your Bitwarden instance (ex. bitwarden.example.com):
输入使用的域名Do you want to use Let's Encrypt to generate a free SSL certificate? (y/n):
输入n
,即不使用Let's Encrypt
创建证书Enter the database name for your Bitwarden instance (ex. vault):
输入数据库的名称,任意即可,例如vault
Enter your installation id (get at https://bitwarden.com/host):
输入准备阶段获取的id
Enter your installation key:
输入准备阶段获取的key
Do you have a SSL certificate to use? (y/n):
输入n
Do you want to generate a self-signed SSL certificate? (y/n):
有域名,输入n
无域名,输入y
服务端配置
默认情况下,服务会使用80和443端口
编辑配置文件
vim ./bwdata/config.yml
修改如下配置
http_port: 8080
https_port: 8443
./bitwarden.sh rebuild
编辑配置文件
vim bwdata/env/global.override.env
修改如下配置
[email protected]
globalSettings__mail__smtp__host=xxxxxx
globalSettings__mail__smtp__port=465
globalSettings__mail__smtp__ssl=true
[email protected]
globalSettings__mail__smtp__password=xxxxxx
[email protected]
replyToEmail
:回件邮箱(一般同发件人)host
:邮箱服务器地址port
:邮箱服务器端口ssl
:设置为true
username
:发件人邮箱地址password
:发件人邮箱密码admins
:管理员邮箱(如有多个,用,
隔开)
服务端启动
启动服务时需要下载镜像且比较大,耐心等待
./bitwarden.sh start
- 有域名:启动完成后访问
http://自己设置的域名:8080/
- 无域名:启动完成后访问
https://自己设置的域名:8443/
,浏览器提示不安全,继续访问即可
成功访问登录注册页面
即可以代表服务端安装没有问题
设置https
解析
本步骤仅适用有域名情况
上一步启动完成后,浏览器访问会提示不安全,只需要自己再创建一个nginx
服务,配置https
,并解析到bitwarden
的8080
端口
如果服务器上已有nginx
代理了80和443端口,则修改对应配置即可
这个创建的nginx
需要和bitwarden-nginx
需要在同一网络内,所以此时创建一个网络用于连接这两个容器,若已有的nginx
已连接在一个网络上,则忽略次步骤
docker network create -d bridge bitwarden-https
创建文件夹,上传证书文件
# 创建文件夹
mkdir bitwarden-nginx-https
# 进入该文件夹
cd bitwarden-nginx-https
# 上传证书文件至该文件夹
证书文件去申请的地方下载并上传
nginx.conf
vim Dockerfile
内容如下(注意域名)
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 3;
gzip_types text/plain text/css application/xml application/javascript application/x-javascript text/javascript;
client_max_body_size 20m;
server {
listen 443 ssl http2;
server_name domain;
ssl_certificate domain.pem;
ssl_certificate_key domain.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://bitwarden-nginx:8080/;
add_header Strict-Transport-Security "max-age=31536000";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect default;
}
}
server {
listen 80;
server_name domain;
return 301 https://domain$request_uri;
}
}
Dockerfile
vim Dockerfile
内容如下(注意域名)
FROM nginx:1.20.1
ENV TZ=Asia/Shanghai
COPY nginx.conf /etc/nginx/nginx.conf
COPY domain.pem /etc/nginx/domain.pem
COPY domain.key /etc/nginx/domain.key
start.sh
vim start.sh
内容如下(先创建容器,在连接网络,最后再启动)
#!/bin/bash
docker build -t bitwarden-nginx-https .
docker rm -f bitwarden-nginx-https
docker run -d --restart always --name nginx -p 80:80 -p 443:443 --network bitwarden-https bitwarden-nginx-https:latest
保存后授予执行权限
chmod +x start.sh
先将bitwarden
服务的Nginx连接到刚刚创建的网络上
docker network connect bitwarden-https bitwarden-nginx
# 启动
./start.sh
启动完成后访问
https://domain/
,即可正确访问登录页
- 浏览器访问
https://domain/admin
打开管理端 - 输入管理员邮箱(即之前配置的管理员邮箱)并提交
- 查看邮箱的收件箱,点击
Log In Now
进入管理界面
编辑配置文件
vim bwdata/env/global.override.env
修改如下配置
globalSettings__disableUserRegistration=true
重启服务端
./bitwarden.sh restart
如果有自己创建的nginx
做https
代理,则需要重新连接网络
docker network connect bitwarden-https bitwarden-nginx
此时再次打开登录页面,虽然有注册按钮,但是不能提交注册
打开下载地址https://bitwarden.com/download/
,下载对应客户端即可,这里不做介绍
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK