21

自建Bitwarden服务端

 2 years ago
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.
neoserver,ios ssh client

官方教程: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服务端在安装时都需要一对唯一的idkey

浏览器打开https://bitwarden.com/host/,输入个人邮箱并提交,之后将idkey记录下来

服务端需要设置一个邮箱的账户密码,用于发送注册通知等

本文基础系统环境:CentOS7

服务端安装

创建文件夹与下载脚本

PS:官方文档建议创建一个独立用户,使Bitwarden实例与服务器上运行的其他应用程序隔离开来,本文直接使用root用户

  1. # 创建文件夹
  2. mkdir -p /work/bitwarden
  3. # 进入该文件夹
  4. cd /work/bitwarden
  5. # 下载脚本并授予执行权限(如果出现下载不了的情况建议自己电脑上科学上网进行下载,完成上传)
  6. curl -Lso bitwarden.sh https://go.btwrdn.co/bw-sh && chmod 700 bitwarden.sh

执行初始化脚本

  1. ./bitwarden.sh install

初始化过程中会有如下提示:

  1. Enter the domain name for your Bitwarden instance (ex. bitwarden.example.com):
    输入使用的域名
  2. Do you want to use Let's Encrypt to generate a free SSL certificate? (y/n):
    输入n,即不使用Let's Encrypt创建证书
  3. Enter the database name for your Bitwarden instance (ex. vault):
    输入数据库的名称,任意即可,例如vault
  4. Enter your installation id (get at https://bitwarden.com/host):
    输入准备阶段获取的id
  5. Enter your installation key:
    输入准备阶段获取的key
  6. Do you have a SSL certificate to use? (y/n):
    输入n
  7. Do you want to generate a self-signed SSL certificate? (y/n):
    有域名,输入n
    无域名,输入y

服务端配置

默认情况下,服务会使用80和443端口

编辑配置文件

  1. vim ./bwdata/config.yml

修改如下配置

  1. http_port: 8080
  2. https_port: 8443
  1. ./bitwarden.sh rebuild

编辑配置文件

  1. vim bwdata/env/global.override.env

修改如下配置

  1. [email protected]
  2. globalSettings__mail__smtp__host=xxxxxx
  3. globalSettings__mail__smtp__port=465
  4. globalSettings__mail__smtp__ssl=true
  5. [email protected]
  6. globalSettings__mail__smtp__password=xxxxxx
  7. [email protected]
  • replyToEmail:回件邮箱(一般同发件人)
  • host:邮箱服务器地址
  • port:邮箱服务器端口
  • ssl:设置为true
  • username:发件人邮箱地址
  • password:发件人邮箱密码
  • admins:管理员邮箱(如有多个,用 , 隔开)

服务端启动

启动服务时需要下载镜像且比较大,耐心等待

  1. ./bitwarden.sh start
  • 有域名:启动完成后访问http://自己设置的域名:8080/
  • 无域名:启动完成后访问https://自己设置的域名:8443/,浏览器提示不安全,继续访问即可

成功访问登录注册页面即可以代表服务端安装没有问题

设置https解析

本步骤仅适用有域名情况

上一步启动完成后,浏览器访问会提示不安全,只需要自己再创建一个nginx服务,配置https,并解析到bitwarden8080端口

如果服务器上已有nginx代理了80和443端口,则修改对应配置即可

这个创建的nginx需要和bitwarden-nginx需要在同一网络内,所以此时创建一个网络用于连接这两个容器,若已有的nginx已连接在一个网络上,则忽略次步骤

  1. docker network create -d bridge bitwarden-https

创建文件夹,上传证书文件

  1. # 创建文件夹
  2. mkdir bitwarden-nginx-https
  3. # 进入该文件夹
  4. cd bitwarden-nginx-https
  5. # 上传证书文件至该文件夹

证书文件去申请的地方下载并上传

nginx.conf

  1. vim Dockerfile

内容如下(注意域名)

  1. user nginx;
  2. worker_processes 1;
  3. error_log /var/log/nginx/error.log warn;
  4. pid /var/run/nginx.pid;
  5. events {
  6. worker_connections 1024;
  7. }
  8. http {
  9. include /etc/nginx/mime.types;
  10. default_type application/octet-stream;
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for"';
  14. access_log /var/log/nginx/access.log main;
  15. sendfile on;
  16. #tcp_nopush on;
  17. keepalive_timeout 65;
  18. gzip on;
  19. gzip_min_length 1k;
  20. gzip_buffers 4 16k;
  21. gzip_comp_level 3;
  22. gzip_types text/plain text/css application/xml application/javascript application/x-javascript text/javascript;
  23. client_max_body_size 20m;
  24. server {
  25. listen 443 ssl http2;
  26. server_name domain;
  27. ssl_certificate domain.pem;
  28. ssl_certificate_key domain.key;
  29. ssl_session_timeout 5m;
  30. ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
  31. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  32. ssl_prefer_server_ciphers on;
  33. location / {
  34. proxy_pass http://bitwarden-nginx:8080/;
  35. add_header Strict-Transport-Security "max-age=31536000";
  36. proxy_set_header X-Real-IP $remote_addr;
  37. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  38. proxy_set_header Host $http_host;
  39. proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
  40. proxy_set_header X-Forwarded-Proto $scheme;
  41. proxy_redirect default;
  42. }
  43. }
  44. server {
  45. listen 80;
  46. server_name domain;
  47. return 301 https://domain$request_uri;
  48. }
  49. }

Dockerfile

  1. vim Dockerfile

内容如下(注意域名)

  1. FROM nginx:1.20.1
  2. ENV TZ=Asia/Shanghai
  3. COPY nginx.conf /etc/nginx/nginx.conf
  4. COPY domain.pem /etc/nginx/domain.pem
  5. COPY domain.key /etc/nginx/domain.key

start.sh

  1. vim start.sh

内容如下(先创建容器,在连接网络,最后再启动)

  1. #!/bin/bash
  2. docker build -t bitwarden-nginx-https .
  3. docker rm -f bitwarden-nginx-https
  4. docker run -d --restart always --name nginx -p 80:80 -p 443:443 --network bitwarden-https bitwarden-nginx-https:latest

保存后授予执行权限

  1. chmod +x start.sh

先将bitwarden服务的Nginx连接到刚刚创建的网络上

  1. docker network connect bitwarden-https bitwarden-nginx
  1. # 启动
  2. ./start.sh

启动完成后访问https://domain/,即可正确访问登录页

  1. 浏览器访问https://domain/admin打开管理端
  2. 输入管理员邮箱(即之前配置的管理员邮箱)并提交
  3. 查看邮箱的收件箱,点击Log In Now进入管理界面

编辑配置文件

  1. vim bwdata/env/global.override.env

修改如下配置

  1. globalSettings__disableUserRegistration=true

重启服务端

  1. ./bitwarden.sh restart

如果有自己创建的nginxhttps代理,则需要重新连接网络

  1. docker network connect bitwarden-https bitwarden-nginx

此时再次打开登录页面,虽然有注册按钮,但是不能提交注册

打开下载地址https://bitwarden.com/download/,下载对应客户端即可,这里不做介绍


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK