前一篇介紹了用Docker架設自己的Vaultwarden密碼管理庫,並透過Bitwarden連線存取,以及如何自助備份資料。今天這篇就來兌現上篇文末的flag(?),就是不用Docker要怎麼架設Vaultwarden(這也是我目前使用的方法)。
行前準備
在開始架設自己的Bitwarden伺服器前,需要準備以下這些:
- 一台使用Linux系統的電腦/VPS
- 一個網域(沒有又不想花錢買的話可以用No-IP免費註冊一個)
- docker-image-extract指令檔(沒有裝Docker才需要)
docker-image-extract使用方法:./docker-image-extract (參數) (映像名稱:標籤)
參數有這兩個:
- -p:指定平台,預設為linux/amd64(64位元)
- -o:指定解壓縮的檔案要存放的位置;預設為目前使用中的目錄(以
pwd
指令檢視)
開始架設
這裡示範的環境與條件如下:
- 使用的是執行Debian 12的實體主機/VPS
- 已經註冊好一個網域(付費購買的網域或從No-IP註冊的DDNS網址),且已設定好HTTPS連線
- 主機的80連接埠已被使用
- 登入你的主機。
- 若沒有安裝Docker/Podman:下載docker-image-extract指令檔到Linux主機或VPS上,並設定可執行權限
指令:wget https://raw.githubusercontent.com/jjlin/docker-image-extract/main/docker-image-extract
- 建立使用者vaultwarden,這是用來執行vaultwarden程式的帳號(※)
- 選個地方作為Bitwarden伺服器的資料存放目錄。這裡我使用/opt/vaultwarden
(記得用chown將目錄擁有者與群組設定成vaultwarden) - 進入1.的目錄,建立一個文字檔,命名為vaultwarden.env,然後填入以下內容:
TZ=Asia/Taipei
LOG_FILE=data/vaultwarden.log
ROCKET_PORT=80
DOMAIN=https://(換成你要使用的網域)
ADMIN_TOKEN=(隨機亂數)SMTP_HOST=郵件伺服器*
SMTP_FROM=寄件者email
SMTP_PORT=SMTP伺服器連接埠號*
SMTP_SECURITY=連線加密方式*
SMTP_USERNAME=使用者名稱
SMTP_PASSWORD=登入密碼- TZ:設定時區
- LOG_FILE:Vaultwarden的紀錄檔
- ROCKET_PORT:Vaultwarden使用的連接埠號
- DOMAIN:Vaultwarden對外連線使用的網域
- ADMIN_TOKEN:Vaultwarden管理後台(與密碼管理介面不一樣!)的密鑰,可使用openssl指令產生;留空會將其停用
- SMTP開頭變數:設定Vaultwarden的寄件參數,如伺服器、登入資訊、寄件者email等等
看你要用哪個郵件服務就填與之對應的參數即可
- 下載並解壓縮vaultwarden檔案
- 使用docker-image-extract
- 新建一個目錄(例:output),這是用作vaultwarden映像解壓縮後的暫存目錄
- 執行
docker-image-extract -o ./output vaultwarden/server:latest-alpine
- 將output目錄中的vaultwarden, web-vault複製到/opt/vaultwarden,並設定vaultwarden權限為可執行
然後就可以刪除output目錄了
- 使用Docker/Podman-依序執行以下1.-5.的指令(Podman使用者將docker換成podman即可,作用相同)
docker pull docker.io/vaultwarden/server:latest-alpine
docker create --name vw docker.io/vaultwarden/server:latest-alpine
docker cp vw:/vaultwarden /opt/vaultwarden
docker cp vw:/web-vault /opt/vaultwarden
docker rm vw
- 使用docker-image-extract
- 建立vaultwarden.service檔案,寫入以下內容:
[Unit]
Description=Vaultwarden server
Documentation=https://github.com/dani-garcia/vaultwarden
After=network.target
After=network-online.target
[Service]
Type=simpleUser=vaultwarden
Group=vaultwarden
Restart=on-failure
RestartSec=1m
EnvironmentFile=/opt/vaultwarden/vaultwarden.env
ExecStart=/opt/vaultwarden/vaultwarden
LimitNOFILE=1048576
LimitNPROC=64
WorkingDirectory=/opt/vaultwarden
[Install]
WantedBy=multi-user.target
然後複製到/etc/systemd/system,之後執行sudo systemctl daemon-reload - 執行sudo systemctl start vaultwarden.service啟動服務;前面指令中的start改成enable可設定開機自動啟動
- 最後就是設定反向代理,這裡我使用Nginx。
- 在nginx設定目錄下的sites-available中新增一個文字檔,本例命名為vaultwarden.conf
- 打開這個連結,展開Nginx項目並將其中所有內容貼進去
要修改的部分(行末要附上’;’): - server_name:換成你的網域
- upstream vaultwarden-default中的server:最後的連接埠號換成在3.中的-p參數的第一個連接埠號(8080)
- 執行
ln -s /etc/nginx/sites-available/vaultwarden.conf /etc/nginx/sites-enabled/vaultwarden.conf
,啟用設定檔 - 執行
sudo nginx -t
檢查設定檔;沒問題的話就執行sudo nginx -s reload
- 或者直接用docker即可
上面步驟都有做正確的話,打開網址後應該會看到這個畫面:

最後就可以註冊一個帳號並登入,然後把帳號密碼一一加進去(或者從瀏覽器匯出然後匯入也可以)
其他部分如用戶端連線、備份等如前篇所述。
※:這是為了預防當vaultwarden伺服器不幸遭到入侵時,駭客能夠順手接管整個系統。若沒有指定使用者,那預設就會使用root(相當於Windows的Administrator帳號)這個帳號執行;若不幸被入侵,那麼整台主機就GG了。
這裡新增一個vaultwarden帳號,就是令其權限限縮在vaultwarden相關的檔案與目錄上,其餘各處最多就只能讀取而無法寫入與修改,以此來確保整個系統的安全性。不懂的話可以在文末找到鳥哥私房菜的相關說明。
關於如何新增使用者,請看文末第一個連結。
更新
- 停止vaultwarden服務
- 重複上述下載vaultwarden映像及解壓縮的步驟
- 恢復vaultwarden服務