惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
IT之家
IT之家
T
The Blog of Author Tim Ferriss
V
V2EX
博客园 - 聂微东
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
U
Unit 42
Vercel News
Vercel News
L
LangChain Blog
博客园 - 司徒正美
H
Help Net Security
Recent Announcements
Recent Announcements
Recorded Future
Recorded Future
V
Visual Studio Blog
Jina AI
Jina AI
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
Y
Y Combinator Blog
C
Check Point Blog
博客园 - 三生石上(FineUI控件)
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
The Register - Security
The Register - Security
The GitHub Blog
The GitHub Blog
B
Blog RSS Feed
F
Fortinet All Blogs
B
Blog
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
云风的 BLOG
云风的 BLOG
爱范儿
爱范儿
MongoDB | Blog
MongoDB | Blog
F
Full Disclosure
有赞技术团队
有赞技术团队
罗磊的独立博客
博客园_首页
MyScale Blog
MyScale Blog
aimingoo的专栏
aimingoo的专栏
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
Engineering at Meta
Engineering at Meta
量子位
I
InfoQ
小众软件
小众软件
P
Proofpoint News Feed

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 使用goaccess实时分析Caddy日志 个人网站监控 Hugo全站AVIF记 Linux下尝试使用Godot开发小游戏 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 打造自己的流媒体音乐服务 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 Arch linux如何顺畅连接蓝牙设备 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 实用自动代理配置示例 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Atuin ZFS下卡顿问题解决 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 如何修复Waybar微信图标错误 信封加密简要 Linux环境下维护公众号记录 快速隐藏和呼出终端 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Linux环境按键检测 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Python中rstrip方法细解 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
树莓派上部署Vaultwarden
2026-01-25 · via mephisto.cc

Vaultwarden(原名 Bitwarden_RS)是一个用 Rust 编写的轻量级、自托管的 Bitwarden 兼容密码管理服务器。它资源占用低,适合单机部署,非常适合个人或小团队使用。

我主要用来弥补 KeePassXC 不能覆盖的场景,它的多端同步功能非常适合局域网,比如你在家里电脑上保存了个密码,通过 Vaultwarden 可同步到同 WI-FI 的手机或者平板上,完全不用绕道公网去。

老实说,对于密码类管理工具,我不信任任何能被公网接触到的方案。所以,在树莓派上私有化部署 Vaultwarden 非常合理。

设备信息:

1mephisto@raspberrypi:~ $ cat /proc/cpuinfo | grep Model
2Model		: Raspberry Pi 2 Model B Rev 1.1
3mephisto@raspberrypi:~ $ uname -m
4armv7l

我已经在上面跑了很多服务

 1mephisto@raspberrypi:~ $ pstree
 2systemd─┬─ModemManager───2*[{ModemManager}]
 3        ├─NetworkManager───2*[{NetworkManager}]
 4        ├─2*[agetty]
 5        ├─avahi-daemon───avahi-daemon
 6        ├─cron
 7        ├─dbus-daemon
 8        ├─frpc───6*[{frpc}]
 9        ├─navidrome───12*[{navidrome}]
10        ├─nginx───4*[nginx]
11        ├─polkitd───2*[{polkitd}]
12        ├─prometheus───10*[{prometheus}]
13        ├─sing-box───10*[{sing-box}]
14        ├─sshd───sshd───sshd───bash───pstree
15        ├─sudo───sudo───vim───{vim}
16        ├─systemd───(sd-pam)
17        ├─systemd-journal
18        ├─systemd-logind
19        ├─systemd-timesyn───{systemd-timesyn}
20        ├─systemd-udevd
21        ├─thd
22        └─vaultwarden───12*[{vaultwarden}]

已经在跑的:frpc、navidrome、sing-box、prometheus,昨天又加上了 vaultwarden,都是自己玩的轻量服务,cpu 长期空闲,内存用了不到 1/3,只有磁盘剩余容量不多了。

题外话不多说,跟着我开始操作,难点在 2 个地方:

  • 在电脑端交叉编译出 armv7l 32 位版本的的二进制程序;
  • 配置证书如何让 iPhone 和 iPad 上的 Bitwarden 客户端可用。

二者都有一定的难度,主要是互联网上相关资料比较少。

1. 电脑上交叉编译 arm 版本 32 位 vaultwarden 程序

搜索互联网上的资料,私有化部署 vaultwarden 都是 docker 一把梭,试问我一个低配版树莓派,还要额外安装个 docker?直接二进制部署不好么。

当然,高配机器或者不想折腾,能跑 docker 也节约时间。

看官方的 release 页面没有提供 ARMv7 的预编译版本,只能自己动手在 Arch Linux 主机上进行交叉编译,这是获得最新版 + 安全更新 + ARMv7 支持的最佳方式。

避坑:不要使用 paru -S arm-linux-gnueabihf-gcc 进行交叉编译,arm-linux-gnueabihf-gcc 在 aur 中,会下载很多额外环境包,好几个 G 的那种,光是编译这些包就会消耗小时级别的时间,还有可能出错,灾难级别,不信你可以试试看。

这个时候,不得不让人感叹!gcc-arm-linux-gnueabihf 包在 Debian 发行版仓库中默认就包含,不用自己手刨编译😅,还是有实力的,Arch 没有它有,这就是差别。

先切换到 Vaultwarden 的源码目录,然后开始编译。

编译方法:

 1docker run --rm -v "$(pwd)":/build -w /build \
 2  debian:bookworm \
 3  bash -c "
 4    # 1. 安装工具链
 5    apt update && apt install -y \
 6      curl build-essential gcc-arm-linux-gnueabihf pkg-config
 7
 8    # 2. 启用 multiarch 并安装 ARM 依赖
 9    dpkg --add-architecture armhf
10    apt update
11    apt install -y libssl-dev:armhf libsqlite3-dev:armhf
12
13    # 3. 安装 Rust
14    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
15    source /root/.cargo/env
16
17    # 4. ⭐⭐⭐ 关键:配置 Cargo 使用 ARM 链接器 ⭐⭐⭐
18    mkdir -p .cargo
19    cat > .cargo/config.toml <<EOF
20[target.armv7-unknown-linux-gnueabihf]
21linker = \"arm-linux-gnueabihf-gcc\"
22runner = \"qemu-arm -L /usr/arm-linux-gnueabihf\"
23EOF
24
25    # 5. 设置 pkg-config(可选,但推荐)
26    export PKG_CONFIG_PATH=/usr/lib/arm-linux-gnueabihf/pkgconfig
27    export PKG_CONFIG_SYSROOT_DIR=/
28
29    # 6. 编译(启用 sqlite)
30    rustup target add armv7-unknown-linux-gnueabihf
31    cargo build --release --target=armv7-unknown-linux-gnueabihf --features sqlite
32  "

上面的意思是使用 docker 镜像 debian:bookworm,在容器里进行编译,前后倒腾了几个小时得到的。

比如说要启用 multiarch 支持、libssl-dev:armhf 和 libsqlite3-dev:armhf 缺失、--features sqlite 编译参数等,谁编谁知道,不过现在有 AI 加持,稍微能省点心。

读者直接用上面的编译语句,约等于节约 2 个小时。编译需要时间,看电脑配置,请保持耐心!

查看编译结果

1➜  vaultwarden git:(main) file target/armv7-unknown-linux-gnueabihf/release/vaultwarden
2target/armv7-unknown-linux-gnueabihf/release/vaultwarden: ELF 32-bit LSB pie executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=e8a6e119d65a23dc6b2833d59aa669bb36bdce38, for GNU/Linux 3.2.0, not stripped

确认为 32 位 archv7,直接复制到树莓派上面就能跑。

2. 安装 Web Vault 等

在树莓派上运行 vaultwarden 会提示你安装 Web Vault

 1# 1. 进入 Vaultwarden 安装目录
 2cd /opt/vaultwarden
 3
 4# 2. 创建 web-vault 目录
 5sudo mkdir -p web-vault
 6
 7# 3. 进入 web-vault 目录
 8cd /opt/vaultwarden/web-vault
 9
10# 4.下载
11sudo wget https://github.com/dani-garcia/bw_web_builds/releases/download/v2025.12.2/bw_web_v2025.12.2.tar.gz
12
13# 解压到当前目录(注意:tar.gz 通常包含一个顶层目录,我们需要提取内容)
14sudo tar -xzf bw_web_v2025.12.2.tar.gz --strip-components=1
15
16# 清理压缩包
17sudo rm bw_web_v2025.12.2.tar.gz
18
19# 权限处理
20sudo chown -R vaultwarden:vaultwarden /opt/vaultwarden/web-vault

其它配置信息

 1mephisto@raspberrypi:~ $ systemctl cat vaultwarden.service
 2# /etc/systemd/system/vaultwarden.service
 3[Unit]
 4Description=Vaultwarden Password Manager (Raspberry Pi)
 5After=network.target
 6
 7[Service]
 8User=vaultwarden
 9Group=vaultwarden
10WorkingDirectory=/opt/vaultwarden
11EnvironmentFile=/etc/default/vaultwarden
12ExecStart=/opt/vaultwarden/vaultwarden
13Restart=always
14RestartSec=10
15
16[Install]
17WantedBy=multi-user.target
18mephisto@raspberrypi:~ $ cat /etc/default/vaultwarden
19DOMAIN=http://192.168.1.5
20ADMIN_TOKEN='your token'
21WEBSOCKET_ENABLED=true
22DATA_FOLDER=/opt/vaultwarden/data
23ROCKET_ADDRESS=127.0.0.1
24ROCKET_PORT=8080

其中 ADMIN_TOKENsudo -u vaultwarden /opt/vaultwarden/vaultwarden hash 生成,不符合要求看启动日志排错。

启动 sudo systemctl start vaultwarden 后,确认进程正常:

1mephisto@raspberrypi:~ $ sudo ss -lntp |grep vault
2LISTEN 0      4096       127.0.0.1:8080       0.0.0.0:*    users:(("vaultwarden",pid=16926,fd=22))

3. Nginx 配置

没有人希望带个 8080 端口访问, 而且移动端的 Bitwarden 是需要 https,所以要通过 Nginx 代理下。

 1mephisto@raspberrypi:~ $ cat /etc/nginx/sites-enabled/vaultwarden
 2server {
 3    listen 443 ssl;
 4    server_name _;
 5
 6    ssl_certificate /etc/nginx/ssl/my.pem;
 7    ssl_certificate_key /etc/nginx/ssl/my.key;
 8
 9    location / {
10        proxy_pass http://127.0.0.1:8080;
11        proxy_set_header Host  $host;
12        proxy_set_header X-Real-IP  $remote_addr;
13        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
14        proxy_set_header X-Forwarded-Proto  $scheme;
15    }
16
17    location /notifications/hub {
18        proxy_pass http://127.0.0.1:8080;
19        proxy_http_version 1.1;
20        proxy_set_header Upgrade  $http_upgrade;
21        proxy_set_header Connection "upgrade";
22    }
23}

上面的配置很简单,启动运行 Nginx 后,通过电脑浏览器访问 https://192.168.1.5就能正常使用了(信任证书操作还是要的)。

证书部分要特殊说明下,见下面一个章节。

4. 移动端证书处理

坑点:在 iPhone 和 iPad 上面,使用类似下面的方式生成的证书是不可用的❌,Bitwarden 限制,请注意!

1sudo openssl req -x509 -nodes -days 3650   -newkey rsa:2048   -keyout /etc/nginx/ssl/vaultwarden.key   -out /etc/nginx/ssl/vaultwarden.crt   -subj "/CN=192.168.1.5"

得在电脑上使用 mkcert 生成证书!

 1➜  ~ sudo pacman -S mkcert
 2➜  ~ mkcert 192.168.1.5
 3Created a new local CA 💥
 4Note: the local CA is not installed in the system trust store.
 5Run "mkcert -install" for certificates to be trusted automatically ⚠️
 6
 7Created a new certificate valid for the following names 📜
 8 - "192.168.1.5"
 9
10The certificate is at "./192.168.1.5.pem" and the key at "./192.168.1.5-key.pem"11
12It will expire on 25 April 2028 🗓

用上面的 certificate 和 key,分别替换 Nginx 中的 ssl_certificate 和 ssl_certificate_key,我想你应该懂的。

此外,还需要把根证书 rootCA.pem 导入到移动端。

1➜  ~ mkcert -CAROOT
2/home/mephisto/.local/share/mkcert
3➜  ~ ls /home/mephisto/.local/share/mkcert/rootCA.pem
4/home/mephisto/.local/share/mkcert/rootCA.pem

具体操作,请看这个文档:https://github.com/FiloSottile/mkcert?tab=readme-ov-file#mobile-devices

传到手机上后,按上面的文档设置信任证书,否则,你的 Bitwarden 始终无法工作,会弹出报错,报错信息也看不出来错在哪里!

信任证书后,创建账号不报错了,才表明大功告成。

为什么 openssl 生成的证书不行,而 mkcert 生成的可以,真的是搞不明白,也许这就是苹果生态吧。

没有 Android 手机,没做测试,这么多年折腾下来,深刻感觉还是 web 标准好,真正的互联网。

5. 其它

最后提下使用经验,在 pc 浏览器上,配合浏览器插件 Bitwarden 插件使用

iPhone 和 iPad 上:

  • 自动填充,可以和 Password 并存
  • 启动刷新同步,方便多端同步
  • 启用面容识别、Touch ID 等,我想没有人喜欢输入高强度的主密码

至于使用方法,多摸索下就知道了,很方便的。

此外,我的个人核心密码放在 KeePassXC 中,密码个人倾向全掌控的离线加密方案。只是 KeePassXC 的多端能力欠缺,才同时启用 Bitwarden,适用一些非重要的登录移动端登录场景,也就是作为 KeePassXC 补充,个人觉得非常方便又安全。如果你信任 Bitwarden,全端同步,甚至开启公网访问能力,可完全替代其它密码管理器,比如系统自带的 Password。