/ VPS相关 / 34浏览

docker 配置vaultwarden服务

文章目录
  • 1.系统要求
  • 2.预设环境
  • 3.设置 http 跳转到 https、设置反向代理
  • 4.部署 Vaultwarden
  • 5.常见故障解决
  • 1.系统要求

    Vaultwarden 使用 Rust 编写,支持 SQLite、MySQL 和 PostgreSQL 数据库后端,运行时只需要 10M 内存,可以说对硬件基本没有要求。

    2.预设环境

    • 假设使用域名 vault.ekhysis.com 访问 Vaultwarden 实例
    • Vaultwarden 容器的 80 端口暴露到宿主机的 3280 端口上,注意防火墙开放端口
    • 使用 acme.sh 由 Let’s Encrypt 生成并自动更新的免费证书
    • 在 Nginx 上设置反向代理为 Vaultwarden 开启 https

    3.设置 http 跳转到 https、设置反向代理

    server {
      
      listen 80;
      # listen [::]:80;
      server_name vault.ekhysis.com;
      index index.html index.htm index.php default.html default.htm default.php;
      root /usr/share/nginx/html;
     
      return 301 https://$server_name$request_uri; #设置 http 跳转到 https
    
      # include rewrite/none.conf;
      # error_page   404   /404.html;
    
      # Deny access to PHP files in specific directory
      # location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
    
      # include enable-php.conf;
    
      access_log off;
    }
    
    server {
      listen 443 ssl http2;
      # listen [::]:443 ssl http2;
      server_name vault.ekhysis.com;
    "/etc/nginx/sites-available/vault.ekhysis.com" 91L, 2754C                                 8,2           Topserver {
    
      listen 80;
      # listen [::]:80;
      server_name vault.ekhysis.com;
      index index.html index.htm index.php default.html default.htm default.php;
      root /usr/share/nginx/html;
      
      return 301 https://$server_name$request_uri; #设置 http 跳转到 https
      
      # include rewrite/none.conf;
      # error_page   404   /404.html;
      
      # Deny access to PHP files in specific directory
      # location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
      
      # include enable-php.conf;
      
      access_log off;
    }
    
    server {
      listen 443 ssl http2;
      # listen [::]:443 ssl http2;
      server_name vault.ekhysis.com;
      index index.html index.htm index.php default.html default.htm default.php;
      root /usr/share/nginx/html;
      
      ssl_certificate /root/cert/vault.ekhysis.com.cer;
      ssl_certificate_key /root/cert/vault.ekhysis.com.key;
      ssl_session_timeout 5m;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
      ssl_prefer_server_ciphers on;
      ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
      ssl_session_cache builtin:1000 shared:SSL:10m;
      # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
      # ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
      
      # include rewrite/none.conf;
      # error_page   404   /404.html;
      
      # Deny access to PHP files in specific directory
      # location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
      
      # include enable-php.conf;
      
      # ==设置反向代理开始== #
      client_max_body_size 128M; #允许大型附件
      
      location / {
        proxy_pass http://127.0.0.1:3280;
        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 timeouts
        proxy_connect_timeout              60s;
        proxy_send_timeout                 60s;
        proxy_read_timeout                 60s;
      }
      
      location /notifications/hub {
        proxy_pass http://127.0.0.1:3012;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
      }
      
      location /notifications/hub/negotiate {
        proxy_pass http://127.0.0.1:3280;
      }
      
      location /admin {
        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://127.0.0.1:3280;
      }
      # ==设置反向代理结束== #
      
      location ~ /.well-known {
        allow all;
      }
      
      location ~ /\. {
        deny all;
      }
      
      access_log off;
    }
    

    4.部署 Vaultwarden

    docker run -d --name vaultwarden \
     -e ADMIN_TOKEN=some_random_token \
     -v ./vaultwarden-data/:/data/ \
     --restart unless-stopped \
     -p 3280:80 \
     vaultwarden/server:latest
    • -d:指定容器运行于前台或者后台(默认为 false 表示运行于后台)
    • --restart always:自动启动(在宿主机重启后或者 Docker 服务重启后)
    • --name vaultwarden:指定容器名称为 vaultwarden
    • -e ADMIN_TOKEN=some_random_token:设置 ADMIN_TOKEN 环境变量以启用管理页面,some_random_token可以用openssl rand -base64 48 命令来生成一个长 token 来保护 admin 页面,开启 admin 页面后会在 DATA_FOLDER 目录下生成一个 config.json 文件,如果后期需要关闭 admin 页面,需要同时删除环境变量和 config.json 文件中的 admin_token 参数
    • -v ./vaultwarden-data/:/data/:挂载容器的 data 目录到宿主机的 /root/vaultwarden-data 目录上
    • -p 3280:80:指定容器的 80 端口暴露在宿主机的 3280 端口上

    4.1vaultwarden 常用环境变量

    通过设置环境变量或在 admin 管理页面(会将设置写入 data 目录下的 config.json 文件)来配置 vaultwarden。注意,config.json 中的设置会覆盖相应的环境变量设置,因此推荐两种方式二选一。完整的环境变量参数可以参考 .env.example,通过 docker run --env-file <env-file> 或者 docker run -v /path/to/.env:/.env 来使用自定义环境变量,下面是一些我使用到的参数,仅供参考:

    • SIGNUPS_ALLOWED=false:禁止注册新用户
    • INVITATIONS_ALLOWED=false:禁止邀请用户,即使设置了禁止注册/邀请用户,在 admin 页面仍然可以邀请用户
    • ADMIN_TOKEN=some_long_long_random_token:开启 admin 管理页面,推荐使用 openssl rand -base64 48 命令来生成一个长 token 来保护 admin 页面,开启 admin 页面后会在 DATA_FOLDER 目录下生成一个 config.json 文件,如果后期需要关闭 admin 页面,需要同时删除环境变量和 config.json 文件中的 admin_token 参数
    • LOG_FILE=/data/vaultwarden.log:输出日志,默认使用 stdout 输出日志,可以通过设置该参数输出到文件
    • SHOW_PASSWORD_HINT=false:关闭密码提示

    5.常见故障解决

    5.1直接修改 config.json 文件不生效

    通过管理页面修改配置并保存后,会将配置参数写入 config.json 文件,但当通过直接编辑 config.json 文件配置参数后,管理页面无法读取修改后的配置参数。

    原因为只有在 Vaultwarden 容器启动时才会读取 config.json 文件。修改 config.json 文件后要使功能生效,需要在修改 config.json 文件后重启 Vaultwarden 容器:

    docker restart vaultwarden

    5.2日志记录项的时间和系统时间不一致

    日志记录使用 UTC(全球标准时间),而中国使用时间为 UTC+8,比 UTC 推后 8小时。

    在创建 Vaultwarden 容器时加上时区环境变量:复制

    -e TZ=Asia/Shanghai

    更新于

    0

    1. 感谢阅读

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注