樹莓派上部署Vaultwarden
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_TOKEN 由 sudo -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
2➜ ~ sudo pacman -S mkcert
3➜ ~ mkcert 192.168.1.5
4Created a new local CA 💥
5Note: the local CA is not installed in the system trust store.
6Run "mkcert -install" for certificates to be trusted automatically ⚠️
7
8Created a new certificate valid for the following names 📜
9 - "192.168.1.5"
10
11The certificate is at "./192.168.1.5.pem" and the key at "./192.168.1.5-key.pem" ✅
12
13It 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。

版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。
相關文章:
- 樹莓派跑分流代理
- 搭建樹莓派無線路由器
- 使用goaccess即時分析Caddy日誌
- 個人網站監控
- Hugo全站AVIF記
- Linux下嘗試使用Godot開發小遊戲
- Arch linux dae 透明代理
- Airflow接管galler-dl下載任務
- 如何使用gallery-dl批量下載圖像
- Arch核顯下如何愉快玩Dota2和CS2