Featured image of post Vaultwarden

Vaultwarden

密码管理

安装Vaultwarden

目的

手里有个域名(还没申请ssl证书),就想在家里的小主机上搭建个自己的密码管理,通过内网穿透以便随时随地可以使用

步骤

简单运行

docker run -d --name vaultwarden -v /mnt/sda1/dockers/vaultwarden/data:/data --restart unless-stopped -p 480:80 vaultwarden/server:latest

问题: 只能通过127.0.0.1访问网站,用ip时登录报错,

image-20240127113039287

解决思路:Caddy可以不用搞ssl而直接代理http成https

附加安装caddy

安装caddy,达到无需证书直接https转http

caddy文档:https://caddy2.dengxiaolong.com/docs/install#debian-ubuntu-raspbian

1
vim /etc/caddy/Caddyfile
1
2
3
4
192.168.50.4:1480 {
  reverse_proxy 127.0.0.1:480
  tls internal
}

问题:进行内网穿透时没办法将http的网站穿透到caddy的https

解决思路:看来还得去申请SSL,创建正常的https类型容器

申请ssl证书

不错的是阿里云申请免费证书还挺快,十几分钟搞定,一直以为很麻烦来着。可惜的是有效期只有三个月

重新创建带ssl的容器,然后直接内网穿透https到容器对应的端口

创建容器时带上ROCKET_TLS

1
docker run -d --name vaultwarden -v /mnt/sda1/dockers/vaultwarden/data:/data --restart unless-stopped -p 1480:80 -e ROCKET_TLS='{certs="/data/cert/ifelse01.top.pem",key="/data/cert/ifelse01.top.key"}' vaultwarden/server:latest

问题:内外网页面登录都没问题了,结果在浏览器插件登录时不行了

解决思路:试过增加Domain=pwd.ifelse01.top, 但没效果。后来看到一位大佬的是通过nginx rewrite一下报错的api,走起~~

最终解决:回归最简单的方式创建容器

  1. 创建容器

docker run -d --name vaultwarden -v /mnt/sda1/dockers/vaultwarden/data:/data --restart unless-stopped -p 480:80 vaultwarden/server:latest

  1. 用nginx的 https的端口反向代理到容器端口, 重点是rewrite /identity/accounts/prelogin
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

server {
    listen       8080 ssl;
    listen  [::]:8080 ssl;
    server_name  pwd.ifelse01.top;

    #ssl证书的pem文件路径
    ssl_certificate  ./cert/ifelse01.top.pem;
    #ssl证书的key文件路径
    ssl_certificate_key ./cert/ifelse01.top.key;

    location = /identity/accounts/prelogin {
        rewrite ^/identity/accounts/prelogin$ /api/accounts/prelogin;
    }

    location / {
        proxy_pass          http://192.168.50.4:480;
        proxy_redirect      off;
        proxy_set_header    Host    $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
comments powered by Disqus