真诚友善团结专业,共建你我引以为荣之社区。《常见问题解答》
1 / 29
12月 1 日

由 Lush 发布于 12月 1 日

本小白最近在折腾自托管的 Vaultwarden,部署在 1Panel 上。
发现一个痛点: 多端同步不及时
比如在电脑端改了密码,手机端必须手动“下拉刷新”才能看到;或者手机改了,电脑端需要手动点击同步密码库。

在哈基米3的帮助下终于搞定,实现了WebSocket 实时通讯移动端官方推送。踩了几个 1Panel 配置文件的坑,特此记录分享一下。

原理简述

  1. 电脑/插件端:依赖 WebSocket 长连接,需要反向代理(Nginx)开启 Upgrade 头支持。
  2. 手机端 (iOS/Android):依赖 Bitwarden 官方的 Push 服务,需要去官方申请一个免费的中转 Key,并配置到 Docker 环境变量中。

一、 开启移动端官方推送 (解决手机必须下拉刷新)

Vaultwarden v1.29.0 以后支持使用 Bitwarden 官方的中转服务器进行推送。为了安全和规范,推荐将敏感信息配置在 环境变量 (.env)

  1. 获取授权 Key
    访问 https://bitwarden.com/host,输入任意邮箱,获取 INSTALLATION_IDINSTALLATION_KEY
    建议选择 bitwarden.com (United States)

  2. 配置环境变量 (.env)
    在 1Panel 应用详情页 → 点击 “环境” 标签页。
    在输入框的末尾追加以下内容(填入你刚才获取的 ID 和 Key):

    PUSH_ENABLED=true PUSH_INSTALLATION_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx PUSH_INSTALLATION_KEY=xxxxxxxxxxxxxxxxxxxx

    配置截图:

  3. 修改容器编排 (docker-compose.yml)
    切换到 “容器”-“编排” 标签页,找到 environment 部分,修改为引用刚才定义的变量:

    environment: - SIGNUPS_ALLOWED=false # --- 引用 .env 中的配置 --- - PUSH_ENABLED=${PUSH_ENABLED} - PUSH_INSTALLATION_ID=${PUSH_INSTALLATION_ID} - PUSH_INSTALLATION_KEY=${PUSH_INSTALLATION_KEY}

    配置截图:

  1. 重建容器
    点击右下角的 “确认” 保存编排,然后点击 “重建” 按钮使配置生效。

第二步:配置 Nginx 反代 (解决电脑端延迟问题)

这一步是为了让 WebSocket 正常工作。我们一般采用 1Panel 的反向代理功能,这里我踩了个路径的坑

  1. 找到正确的配置文件
    网站的配置文件中最后有一行 include,它引用了 proxy 目录下的配置。我们必须修改这个配置文件。

文件路径
/opt/1panel/www/sites/你的域名/proxy/

或者在 1Panel 文件管理器中依次点击:根目录 → opt1panelwwwsites[你的域名]proxy → 编辑里面的 .conf 文件 (通常叫 root.conf)。

  1. 添加 WebSocket 支持
    打开文件后,在 location ^~ / { ... } 代码块中,找到 proxy_pass 这一行,在它下面添加以下配置:

    location ^~ / { proxy_pass http://127.0.0.1:40031; # ... 其他原有配置 ... # === 核心部分:开启 WebSocket === proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # ============================= # ... 其他原有配置 ... }

示例(可以直接用这个替换你的root.conf):

location ^~ / { proxy_pass http://127.0.0.1:40031; 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 REMOTE-HOST $remote_addr; # --- WebSocket 标准配置 --- proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # ----------------------- proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; add_header X-Cache $upstream_cache_status; add_header Cache-Control no-cache; # 这一行通常不需要,如果遇到 502 可以删掉试试,但在 1Panel 里通常保留即可 proxy_ssl_server_name off; proxy_ssl_name $proxy_host; add_header Strict-Transport-Security "max-age=31536000"; }

第三步:客户端重置 (重要)

配置好服务端后,客户端不会立马生效,必须操作:

  1. 手机端:进入设置 → 注销 (Log out) → 重新登录。这一步是为了向服务器注册推送 ID。
  2. 电脑端:建议也注销重登一次。

效果验证

  • 测试推送:电脑浏览器新增一个笔记/登录 → 保存 → 拿起手机(不要手动刷新) → 内容自动变化。
  • 测试 WebSocket:手机改笔记 → 电脑浏览器插件自动更新。

希望能帮到同样使用 1Panel 部署 Vaultwarden 的佬友们!

方案仅供大家参考,如果有更优雅的配置姿势,或者有什么疏漏,欢迎各位大佬指正!
:innocent:

由 handsome 发布于 12月 1 日

由 Lush 发布于 12月 1 日

由 OYeah 发布于 12月 1 日

由 zshawk 发布于 12月 1 日

由 felamin 发布于 12月 1 日

我只是配置了push也可以自动同步呢,无需下拉刷新,甚至在密码查看界面停留着都会自动变

由 Lush 发布于 12月 1 日

由 andyxiong 发布于 12月 1 日

感谢分享,不需要及时同步都没注意到这个问题 :rofl:

由 sqkwater 发布于 12月 1 日

由 PonyDavi 发布于 12月 1 日

由 felamin 发布于 12月 1 日

按理说只配置佬教程第一步那三个参数就能实现了,我刚才测试是iOS App和Chrome扩展都是自动的,其他端我没安装

由 App 发布于 12月 1 日

我之前也是手动刷新,感谢分享

由 App 发布于 12月 1 日

我试了浏览器扩展和pc版会自动同步,安卓客户端不行

由 Lush 发布于 12月 1 日

由 wilile 发布于 12月 1 日

由 App 发布于 12月 2 日

注销重新登录了,两台安卓机都不行,一个是play版,一个是github版,情况都一样

由 colt 发布于 12月 2 日

由 moonk 发布于 12月 2 日

由 Lush 发布于 12月 2 日

那可能是ID和key配置有点问题 :thinking:
格式或者复制的不完整?
可以试试直接把key和id写在yaml里

由 App 发布于 12月 2 日

我是直接写到yaml里的,我用优选ip了,不知道这是否会有影响,不过就算不能及时同步,对我的影响也不大,就这样用也行

8 天后

由 fawkes233 发布于 13 小时前

由 Pony0690 发布于 4 小时前

由 Keenly2963 发布于 3 小时前

这个我以前配置是为了app上批准登录用的,哈哈

由 Lush 发布于 2 小时前

由 nerokim 发布于 2 小时前

由 enter9 发布于 2 小时前

由 amm10090 发布于 2 小时前

由 Keenly2963 发布于 52 分钟前

由 Lush 发布于 34 分钟前