记录一些常用的函数和瞎折腾的过程……

自建bitwarden/vaultwarden的密码服务

对于经常上网的我们,账号密码相当多,使用同一个密码很容易被脱裤,使用不同的密码却又难记。其实有很多密码管理软件可以使用,比如bitwarden。

bitwarden的密码默认是储存在官方有服务器上,当然是加密存储的。官方为了方便用户,也提供docker方式在自己的服务器安装该密码管理服务。要想自己安装使用bitwarden,需要先安装docker,这个可以参考《centos7下安装docker》一文。安装官方的镜像对服务器的要求高,由于官方使用的是mssql,内存必需大于2G,对于小内存机器来说是跑不起来的。

不过在github上有vaultwarden(为了便于与官方区别,bitwarden_rs已更名为vaultwarden),这个是用rust写的docker镜像,对服务器要求较低,小内存照样能用。具体详见:https://github.com/dani-garcia/vaultwarden/

按照提示,两行命令即可拉取docker镜像,进行默认安装:

docker pull vaultwarden/server:latest
docker run -d --name vaultwarden -v /bw-data/:/data/ -p 6666:80 vaultwarden/server:latest

为了可以通过宿主机上通过端口映射反代,需要配置相应的nginx,具体可以参考:https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples

按上面链接配置好web配置文件后(如nginx),就可以用配置好域名进行访问管理了。

当然vaultwarden也是可以自定义安装,这个自定义是指相关的docker配置,下面简单介绍一下。

1、自行选择安装目录,如安装到/home/vaultwarden:

cd /data && mkdir vaultwarden && cd vaultwarden

2、准备一个配置文件config.env,里面包含了需要配置的环境变量:

cat >> config.env <<EOF

写入基本的环境配置(其它配置可在在安装好后进后台进行设置):

# 启用或禁用新用户注册:true启用,false禁用
SIGNUPS_ALLOWED=true
# 设置web访问域名
DOMAIN=https://vault.yourdomain.com
# 设置SQLites数据库存储路径及数据库名
DATABASE_URL=data/vaultwarden.db
# 是否启用web客户端:true启用,false禁用
WEB_VAULT_ENABLED=true
# 启用管理后台并设置token,默认为空不启用,设置token后则启用
ADMIN_TOKEN=XXXXXXXXXXXX
# 是否启用WebSocket通知:true启用,false禁用
WEBSOCKET_ENABLED=false
# 设置日志路径
LOG_FILE=data/access.log
# 日志级别选项:trace、debug、info、warn、error 以及 off
LOG_LEVEL=warn
EXTENDED_LOGGING=true
EOF

DOMAIN填自己的域名,需要HTTPS。

这个环境配置文件不包含smtp发送邮件等配置,如果需要邮件功能,需要增加smtp的设置,可一并写入环境配置文件,相关设置说明如下(不一定非要写入环境文件,也可以按上面的基本配置安装完成后,进入后台界面进行设置):

# 启用或禁用新用户注册:true启用,false禁用
SIGNUPS_ALLOWED=false

# 设置web访问域名
DOMAIN=https://vault.yourdomain.com

# 设置SQLites数据库存储路径及数据库名
DATABASE_URL=data/vaultwarden.db

# 设置日志路径
LOG_FILE=data/access.log

# 日志级别选项:trace、debug、info、warn、error 以及 off
LOG_LEVEL=warn
EXTENDED_LOGGING=true

# 启用管理后台并设置token,默认为空不启用,设置token后则启用
ADMIN_TOKEN=XXXXXXXXXXXX

# 是否启用WebSocket通知:true启用,false禁用
WEBSOCKET_ENABLED=true

# 是否启用web客户端:true启用,false禁用
WEB_VAULT_ENABLED=true

# 修改线程,默认为10,若用户多可修改为更大,一般默认不需要设置
ROCKET_WORKERS=20

# 显示密码提示:true启用,false禁用
SHOW_PASSWORD_HINT=false

# 设置SMTP
SMTP_HOST=smtp.test.com
SMTP_FROM=test@test.com
SMTP_PORT=465
SMTP_USERNAME=test@test.com
SMTP_PASSWORD=password
# 自v1.25.0起,不再设置SMTP_SSL和SMTP_EXPLICIT_TLS,使用SMTP_SECURITY替代,它有以下选项:starttls、force_tls和off。
# 465端口使用force_tls,587端口使用starttls,25端口使用off。
SMTP_SECURITY=force_tls

# 启用或禁用邀请:true启用,false禁用
INVITATIONS_ALLOWED=false

# 启用或禁用分享发送功能,默认开启,启用true,禁用false
SENDS_ALLOWED=false

EOF

当然也可以在安装好后,进管理后台的界面设置smtp参数,不过要记得将Use explicit TLS(vaultwarden中的Force TLS选项)打上勾,然后保存即可,否则可能发送邮件会出错。

ADMIN_TOKEN为管理面板密码,推荐使用“openssl rand -base64 48”生成,当然也可以随意。

SIGNUPS_ALLOWED=true,此项控制注册,第一次使用的话设置为true,若是备份有数据库,可设置为false,安装好后将DATABASE_URL指定路径中的数据库替换为备份的db重启docker即可。

上述详细的环境变量说明请参阅:https://github.com/dani-garcia/vaultwarden/wiki

3、准备服务描述文件docker-compose.yml:

cat >> docker-compose.yml <<EOF

写入:

version: '3'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    volumes:
      - /docker/data:/data
    env_file:
      - config.env
    ports:
      - "6666:80"
      - "8888:3012"
EOF

vaultwarden:现在是唯一一个服务;

image: vaultwarden/server:latest 指定使用 Docker Hub 的 vaultwarden/server:latest 最新镜像;

volumes 中指定将容器内的 /data 目录挂载到宿主机的当前目录下的 /docker/data 目录,这样你可以在宿主机上执行数据库的备份操作;

ports 指定分别将容器内的 80和3012 端口映射到了宿主机的 6666和8888 端口;

3、拉取镜像:

docker-compose up -d

4、nginx配置反代(其它web方式请参阅:https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples):

server {
listen 443 ssl http2;
server_name vault.yourdomain.com;

# Specify SSL config if using a shared one.
#include conf.d/ssl/ssl.conf;

# Allow large attachments
client_max_body_size 128M;

location / {
proxy_pass http://<SERVER>:6666;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

location /notifications/hub {
proxy_pass http://<SERVER>:8888;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

location /notifications/hub/negotiate {
proxy_pass http://<SERVER>:6666;
}

# Optionally add extra authentication besides the AUTH_TOKEN
# If you don't want this, leave this part out
location /admin {
# See: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
auth_basic "Private";
auth_basic_user_file /path/to/htpasswd_file;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass http://<SERVER>:6666;
}

}

5、设置开机启动:

编辑rc.local文件:

vi /etc/rc.d/rc.local

在最后加上

/usr/local/bin/docker-compose -f /usr/local/vaultwarden/docker-compose.yml up -d

这样开机就会自动启动vaultwarden。

访问https://你的域名/admin可以进管理面板。

到这里vaultwarden就搭建完成可以使用了,不过个人还是建议配置数据备份。

6、如果修改了配置,需要重新启动容器以便生效:

docker-compose stop && docker-compose up -d

用这个命令,停止当前容器服务并重新启动。

docker-compose down && docker-compose up -d

这个命令是移除容器和镜像并重建。