宝塔面板的安装

安装宝塔界面最好全新系统安装

  • Debian
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh ed8484bec
  • Ubuntu/Deepin
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec
  • CentOS
yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec

nginx的安装

  • 软件商店 -> Nginx -> 安装

docker的安装

  • 软件商店 -> Docker -> 安装

域名解析

  • 通过Cloudfare或其他DNS服务商解析域名到服务器IP

vaultwarden的安装

不要使用默认的ADMIN_TOKEN,务必修改为一个随机的密码

docker run -d --restart always --name vaultwarden -e TZ=Asia/Shanghai -e ADMIN_TOKEN=some_random_token -v /vaultwarden-data/:/data/ -p 8443:80 vaultwarden/server:latest
  • -d:指定容器运行于前台或者后台(默认为 false 表示后台)
  • –restart always:自动启动(在宿主机重启后或者 Docker 服务重启后)
  • –name vaultwarden:指定容器名称为 vaultwarden
  • -e TZ=Asia/Shanghai:设置时区
  • -e LOG_FILE=/data/log/vaultwarden.log:设置日志文件路径
  • -e ADMIN_TOKEN=some_random_token:设置 ADMIN_TOKEN 环境变量以启用管理页面
  • -v /vaultwarden-data/:/data/:挂载容器的 data 目录到宿主机的 vaultwarden-data 目录上
  • -p 8443:80:指定容器的 80 端口暴露在宿主机的 8443 端口上

vaultwarden的配置

配置完反向代理和SSL证书后,需要重启Nginx

1、通过宝塔面板配置反向代理

  • 站点 -> 添加站点 -> 反向代理 -> 映射8443端口到域名

2、通过宝塔面板配置SSL证书

  • 站点 -> 站点管理 -> 证书 -> 申请证书 -> 选择域名 -> 选择证书类型 -> 提交申请

3、管理界面

  • 地址:https://域名/admin
  • 密码:ADMIN_TOKEN字段设置的值

禁止新用户注册:

  • Allow new signups:false

注册新用户:

  • Users->Invite User->输入邮箱
  • 浏览器输入域名->进入登录界面->注册

更新vaultwarden

1、拉取最新版本的稳定版镜像

# 拉取最新版本的稳定版镜像
docker pull vaultwarden/server:latest

2、停止旧版本容器

# 停止旧版本容器
docker stop vaultwarden

3、移除旧版本容器

# 移除旧版本容器
docker rm vaultwarden

4、使用已挂载的数据创建新的容器

注意修改ADMIN_TOKEN的值

# 使用已挂载的数据创建新的容器
docker run -d --restart always --name vaultwarden -e TZ=Asia/Shanghai -e ADMIN_TOKEN=some_random_token -v /vaultwarden-data/:/data/ -p 8443:80 vaultwarden/server:latest

自动备份数据

1、创建 Dropbox 应用

  1. 登录 Dropbox 后,打开 App Console 页面,点击 Create app 按钮创建一个 App
  2. Choose an API → 勾选 Scoped access
  3. Choose the type of access you need → 选择 App folder
  4. Name your app → 输入 App 名称(必须是不存在的名称,已存在会有提示已被占用),此名称会作为 Dropbox 上此 App 可读写的文件夹名称
  5. 创建成功后,进入应用
  6. Permissions 选项卡下的 Files and folders 部分,勾选Files.metadata.writeFiles.metadata.readFiles.content.writeFiles.content.read四个权限, 点击页面下方Submit 按钮保存

2、上传并配置脚本

SSH 定位到 VPS 的 root 目录,下载 dropbox_uploader.sh 脚本文件并赋予可执行权限,然后运行脚本:

wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh
chmod +x dropbox_uploader.sh # 赋予可执行权限
./dropbox_uploader.sh # 运行此脚本配置 access token
  • 输入App key
  • 输入App secret
  • 点击认证链接,登录 Dropbox 账号并授权,获取访问码
  • 输入访问码

修改访问码:

  • vim .dropbox_uploader

3、创建自己的备份脚本

vim /root/vaultwarden-data_backup.sh

复制并粘帖如下内容:

# 这个改成你存放刚刚下载下来的 dropbox_uploader.sh 的文件夹位置
SCRIPT_DIR="/root"
# 这个改成你的备份文件想要放在 Dropbox 上的文件夹名称,如果不存在,脚本会自动创建
BACK_DIR="/vaultwarden-data"
# 这个是你想要备份的本地 VPS 上的文件夹,不同的目录用空格分开
BACKUP_SRC="/vaultwarden-data"
# 这个是你暂时存放备份压缩文件的地方,这里我们放在 /tmp/vaultwarden-data-backup 下
BACKUP_DST="tmp/vaultwarden-data-backup"

# 定义备份文件的名称
## 定义当前日期的备份文件
BACKUP_FILE=vaultwarden-data_$(date +"%Y-%m-%d").tar.gz
## 定义 6 天前的备份文件
OLD_BACKUP_FILE_6=vaultwarden-data_$(date -d -6day +"%Y-%m-%d").tar.gz
## 定义 15 天前的备份文件
OLD_BACKUP_FILE_15=vaultwarden-data_$(date -d -15day +"%Y-%m-%d").tar.gz

# 删除 VPS 上 6 天前的备份文件
rm -rf "$BACKUP_DST/$OLD_BACKUP_FILE_6"

# 对备份文件夹进行压缩打包
tar zcf "$BACKUP_DST/$BACKUP_FILE" $BACKUP_SRC

# 上传备份文件到 Dropbox
$SCRIPT_DIR/dropbox_uploader.sh upload "$BACKUP_DST/$BACKUP_FILE" "$BACK_DIR/$BACKUP_FILE"

# 删除 Dropbox 上 15 天前的备份文件
$SCRIPT_DIR/dropbox_uploader.sh delete "$BACK_DIR/$OLD_BACKUP_FILE_15"

赋予可执行权限:

chmod +x /root/vaultwarden-data_backup.sh

创建备份文件夹:

cd ~ 
mkdir tmp 
cd tmp
mkdir vaultwarden-data-backup

输入 ./vaultwarden-data_backup.sh 手动执行脚本,以测试能否成功备份。

4、创建自动执行任务

crontab -e # 打开定时任务
0 4 * * * /root/vaultwarden-data_backup.sh # 添加一行新任务:每天凌晨 4 点自动执行此脚本
service crond restart # 重启定时任务

日志转储

如果你想保留日志记录,又不希望日志记录文件变得越来越大,可以设置定期转储日志记录。

创建日志转储规则文件:

vim /etc/logrotate.d/vaultwarden

复制并粘帖如下内容:

# 其他配置项使用 logrotate 配置文件 /etc/logrotate.conf 中的默认值
/vaultwarden-data/log/vaultwarden.log
{
  daily
	rotate 30
	missingok
	copytruncate
	noolddir
	dateext
	postrotate
		find /vaultwarden-data/log/ -name vaultwarden.log"-`(date +%Y%m%d)`" -exec mv {} /vaultwarden-data/log/vaultwarden"-`(date +%Y%m%d)`".log \;
	endscript
}

这里设置为每天转储一次(如果日志记录比较少也可以设置为每周或每月),并保留 30 个转储的日志记录文件。

配置解释:

  • daily:daily 指定转储周期为每天。也可以为 weekly/monthly 。默认为 weekly。
  • rotate 30:表示转储备份的数量。这里为 30 个。
  • missingok:在日志转储期间,任何错误将被忽略。
  • copytruncate:用于还在打开中的日志文件。把当前日志截断并备份,然后再清空。由于备份和清空之间有一个时间差,可能会丢失部分日志数据。
  • noolddir:转储后的日志文件和当前日志文件放在同一个目录下。
  • dateext:指定转储后的日志文件以当前日期格式结尾。如 vaultwarden.log-20201020。
  • postrotate/endscript:在转储之后需要执行的命令可以放入这个语句对中,这两个关键字必须单独成行。同样,prerotate/endscript 表示在转储之前需要执行的命令。

参考资料