为什么会有非 Docker 环境这个怪字眼呢?
无他,因为满网搜索到的教程都是在 Docker 环境下安装使用。
但是穷啊,八戒的 vps 是个单核 500m 的 justhost 机器,便宜的很,这种廉价机器来跑 Docker,基本要占100M,跑不太动。
这种一穷二白的环境,就只能把 Bitwarden 从容器里拆出来用。
好在 Bitwarden_rs 是一个 rust 程序,占内存(16M左右)和cpu极少,本身就适合在 systemd 环境下跑。
这里就利用 vaultwarden 和 traefik,在一台老破小服务器上运行。
系统环境是 CentOS 7.9
步骤如下:
一、下载bitwarden(vaultwarden)
1wget https://github.com/dani-garcia/vaultwarden/archive/refs/tags/1.23.0.tar.gz
二、安装cargo并编译(可选)
1yum install -y epel-release
2yum install -y openssl-devel cargo
3
4cd vaultwarden-1.23.0
5cargo build --release --features sqlite
直接爆错啊,小小的 vps 连编译都过不去,编译进程都被 kill 掉了
三、下载vaultwarden主文件
编译不通,就只能想别的办法了。Faint
找一台有 docker 机器,从里面把文件都解析出来好了
1docker pull vaultwarden/server:alpine
2docker create --name vw vaultwarden/server:alpine
3docker cp vw:/vaultwarden .
4docker cp vw:/web-vault .
5docker rm vw
这样会得到一个可执行文件 vaultwarden 和一个目录 web-vault
我们把这两个东西都挪到 /opt/vaultwarden 目录下,并且建立 data 文件夹,用来存放要生成的 sqlite3 数据文件。
1mkdir -p /opt/vaultwarden/data
2mv vaultwarden /opt/vaultwarden
3mv web-vault /opt/vaultwarden
四、生成systemd启动文件
注意,下面我们设置了 vaultwarden ROCKET_ADDRESS 的监听地址是 127.0.0.1 ,一是为了安全,二是为了下一步我们搭建 traefik,来反代 vaultwarden 用的;因为访问 vaultwarden 必须要加证书,而它本身是没有这个功能的,必须前置一个 nginx 或者 haproxy 或者 traefik 或者 carddy。
1cat << EOF >> /etc/systemd/system/vaultwarden.service
2[Unit]
3Description=Bitwarden
4
5[Service]
6Type=simple
7Restart=always
8Environment="ROCKET_ADDRESS=127.0.0.1"
9WorkingDirectory=/opt/vaultwarden
10ExecStart=/opt/vaultwarden/vaultwarden
11
12[Install]
13WantedBy=local.target
14EOF
五、配置traefik
1wget https://github.com/traefik/traefik/releases/download/v2.4.8/traefik_v2.4.8_linux_amd64.tar.gz
2tar zxvf traefik_v2.4.8_linux_amd64.tar.gz
3
4mkdir -p /opt/traefik/dynamic
5mv traefik /opt/traefik
生成traefik配置文件,利用 traefik 自动申请 Let’s encrypt 证书
1cat << EOF >> /opt/traefik/traefik.yml
2log:
3 level: DEBUG
4
5api:
6 insecure: false
7 dashboard: true
8
9entryPoints:
10 http:
11 address: ":80"
12 http:
13 redirections:
14 entryPoint:
15 to: https
16 scheme: https
17 https:
18 address: ":443"
19
20certificatesResolvers:
21 letsEncrypt:
22 acme:
23 storage: /opt/traefik/acme.json
24 email: zhangranrui@gmail.com
25 tlsChallenge: {}
26 httpChallenge:
27 entryPoint: http
28
29providers:
30 file:
31 directory: /opt/traefik/dynamic
32 watch: true
配置 vaultwarden 代理
1cat << EOF >> /opt/traefik/dynamic/pass.yml
2http:
3 routers:
4 https_01:
5 rule: "Host(`xxx.rendoumi.com`)"
6 service: svc_01
7 tls:
8 certresolver: letsEncrypt
9 http_01:
10 rule: "Host(`xxx.rendoumi.com`)"
11 service: svc_01
12 entryPoints:
13 - http
14 services:
15 svc_01:
16 loadBalancer:
17 servers:
18 - url: "http://localhost:8000"
19EOF
设置 traefik 的 systemd 启动文件
1cat << EOF >> /etc/systemd/system/traefik.service
2[Unit]
3Description=traefik
4
5[Service]
6Type=simple
7Restart=always
8WorkingDirectory=/export/servers/traefik
9ExecStart=/export/servers/traefik/traefik
10
11[Install]
12WantedBy=local.target
13EOF
五、启动vaultwarden和traefik
1systemctl daemon-reload
2systemctl enable --now vaultwarden
3systemctl enable --now traefik
打开页面,我们就成功的用一台老破小搭建了自己的密码管理服务器!!!