自架預算應用程式比較:Actual、Firefly III、Fava、Wallos
比較 Actual、Firefly III、Fava 與 Wallos:哪些能自動擷取銀行交易、哪些必須手動匯入,並說明 aggregator、Actual 手動同步與 GoCardless 不再接受新帳戶等限制。
簡短結論
自架預算應用程式的主要差異,在於它是自動擷取交易,還是由你手動輸入交易。對家庭預算而言,Actual Budget 是最佳預設選擇。它採用信封預算法,並以單一容器執行。你也可以在需要時,透過銀行資料提供者擷取交易。
如果你需要複式簿記帳戶,或希望在無人監看時依排程執行匯入,Firefly III 是合適的選擇。Beancount 搭配 Fava 適合希望將分類帳儲存為純文字檔,並置於版本控制下的人。Wallos 只處理單一用途:追蹤每月從帳戶扣除的週期性費用。
這些應用程式都不會自行連線到你的銀行。任何顯示銀行交易的應用程式,都是從第三方彙整服務取得資料;申請彙整服務帳戶,往往就是阻礙使用者的步驟。安裝任何應用程式前,請先閱讀同步一節。
各項服務的執行方式對照
The data behind this chart
[
{
"tool": "Actual Budget",
"services": 1,
"storage": "SQLite files",
"bank_sync": "Aggregators, manual pull",
"multi_user": "Needs OpenID",
"encryption": "Optional end to end"
},
{
"tool": "Firefly III",
"services": 3,
"storage": "MariaDB",
"bank_sync": "Importer, cron capable",
"multi_user": "Built in accounts",
"encryption": "None at rest"
},
{
"tool": "Beancount + Fava",
"services": 1,
"storage": "Text file",
"bank_sync": "Import scripts only",
"multi_user": "No login at all",
"encryption": "File level, your choice"
},
{
"tool": "Wallos",
"services": 1,
"storage": "SQLite file",
"bank_sync": "Manual entry only",
"multi_user": "Extra logins in settings",
"encryption": "None at rest"
}
]Actual Budget 會執行 1 個長時間運作的服務。Firefly III 會執行 3 個,因為其官方 compose 檔案會將應用程式、MariaDB 資料庫與 cron 輔助程式分別啟動為獨立容器。這就是這 4 個應用程式的完整資源概況:群組中只有資料庫伺服器屬於資源消耗較高的部分,其餘只是持有小型檔案的小型程序。
哪些自架預算管理應用程式可以從銀行取得交易資料?
沒有任何自架應用程式會直接連線至銀行。銀行會透過 open banking API 提供交易資料,而這些 API 必須透過 aggregator 存取。aggregator 是負責維護銀行關係並轉售存取權的公司。因此,真正的問題分成兩部分:應用程式是否支援某個 aggregator,以及你能否在涵蓋自己銀行的 aggregator 開設帳戶?
Actual Budget 支援多個 aggregator。截至 August 2026,其文件列出 New Zealand 的 Akahu、Europe 的 Enable Banking、Europe 的 GoCardless Bank Account Data、North America 的 SimpleFIN Bridge,以及 Brazil 的 Pluggy.ai。你必須自行向供應商註冊、產生 keys 和 secrets,再將它們貼到伺服器中。這裡有兩項限制需要注意。文件明確指出,Actual 不會自動同步銀行資料,因此必須由使用者按下按鈕。同一頁也註明 GoCardless 不再接受新帳戶,因此舊版指南仍推薦的免費 European 管道已無法使用。SimpleFIN Bridge 是付費訂閱服務,費用由供應商向你收取,不是由 Actual 收取。
Firefly III 將匯入功能拆分到第二個容器 Firefly III Data Importer。其範例設定包含 GoCardless (Nordigen)、Enable Banking、Spectre 和 SimpleFIN 的憑證欄位,也支援 CSV 與 CAMT.053 檔案匯入。設定 CAN_POST_AUTOIMPORT=true,在 AUTO_IMPORT_SECRET 中填入長度足夠的隨機值,然後由主機上的 cron 工作觸發匯入,不必開啟瀏覽器。這是本比較中唯一真正不需人工介入的同步方式。
Beancount 不支援同步。你必須從銀行下載 CSV 或 OFX 檔案,再執行自行撰寫或取得的 importer script。Wallos 也不支援同步,而且這是刻意的設計:你只需輸入一次訂閱資料,之後便會依照自身排程重複建立。
手動匯入是永遠可行的方式,也不會受到銀行更換供應商的影響。如果銀行連線能力是你的決定因素,請在安裝任何軟體前,先確認 aggregator 是否涵蓋你的特定銀行。這項確認只需十幾分鐘,卻能省下整個週末。
Actual Budget:在單一容器中採用信封預算
信封預算是指在花錢前,先將已有的資金分配到各個類別。雜貨分配 300,交通分配 80,且分配總額永遠不能超過帳戶中的資金。Actual 採用這套方法,而且應用程式以本機優先為設計:瀏覽器或桌面用戶端會保存完整的預算副本,並與伺服器同步。因此,即使伺服器停止運作,應用程式仍可繼續使用。
services:
actual_server:
image: actualbudget/actual-server:latest
ports:
- '5006:5006'
volumes:
- ./actual-data:/data
restart: unless-stopped使用 docker compose up -d 啟動,並開啟 http://your-server:5006。資料磁碟區會新增兩個目錄:server-files 和 user-files。這些目錄就是你的預算資料。若要從自有網路以外的位置使用,請先在前方設定具備 TLS(傳輸層安全性)的反向代理。完整流程請參閱Actual Budget 安裝指南;該檔案使用的 Compose 模式則請參閱VPS 上的 Docker Compose。
多使用者。 伺服器預設只有一組所有人共用的密碼。若要使用個別帳戶,必須設定 OpenID Connect;伺服器支援使用 Authentik、Keycloak、Google 和 GitHub 等身分提供者。第一位透過 OpenID 登入的人會成為伺服器擁有者,而 ACTUAL_USER_CREATION_MODE 會決定後續登入是否自動建立帳戶。兩個人可以同時開啟同一個預算檔案,但文件警告同時產生的編輯不安全。因此,共用一份預算的兩人應避免同時編輯同一個畫面。
加密。 Actual 可針對每個預算檔案提供端對端加密。啟用後,伺服器會儲存無法讀取的資料;如果伺服器是租用的主機,這正是你需要的功能。但會產生兩個後果。若遺失加密密碼,檔案就無法取回,因為沒有重設機制。此外,銀行同步權杖會分開儲存,不受這項加密保護。因此,任何能存取伺服器資料庫的人都能讀取這些權杖。
Firefly III:複式記帳,以及這裡唯一的無人值守匯入
複式記帳表示每筆交易都有來源帳戶與目的帳戶。購買日用品時,資金會從支票帳戶移至支出帳戶,因此不會憑空出現任何金額。無法說明的金額會顯示為未平衡帳戶,而不是隱藏在分類總額中。這就是選擇 Firefly III 的原因:它更接近會計,而不是預算管理。
從專案本身的檔案安裝:
mkdir -p /srv/firefly
curl -fsSL -o /srv/firefly/docker-compose.yml https://raw.githubusercontent.com/firefly-iii/docker/main/docker-compose.yml
curl -fsSL -o /srv/firefly/.env https://raw.githubusercontent.com/firefly-iii/firefly-iii/main/.env.example
curl -fsSL -o /srv/firefly/.db.env https://raw.githubusercontent.com/firefly-iii/docker/main/database.env第一次啟動前,編輯 .env。APP_KEY 必須是長度恰好為 32 個字元的字串,而專案提供了產生該字串的指令:
head /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 32 && echoSTATIC_CRON_TOKEN 需要另一個長度為 32 個字元的字串。該 compose 檔案中的 cron 容器每天會呼叫一次應用程式;若沒有有效 token,呼叫就會遭拒,因此週期性交易與帳單提醒都不會執行。將 SITE_OWNER 設為你的電子郵件地址,讓 .env 中的資料庫密碼與 .db.env 中的密碼一致,然後啟動服務:
docker compose up -d
docker compose logs -f app首次啟動正常時,應用程式會在容器內的 port 80 提供服務,且日誌會逐漸恢復穩定。若資料庫連線錯誤持續循環,表示 .env 與 .db.env 中的密碼不一致,因此應用程式無法登入 MariaDB。
自動匯入。 Data Importer 會以獨立容器執行,並使用 FIREFLY_III_ACCESS_TOKEN 中的 personal access token 向 Firefly III 進行驗證。先以互動方式設定一次匯入,儲存它產生的設定檔,再讓 cron 依排程向 auto import endpoint 發送資料。人們所說的 Firefly III 同步,就是指這個流程:aggregator 維持銀行連線,importer 從中收集資料,而你的伺服器會在你休息時處理工作。
多使用者。 Firefly III 將實際帳戶儲存在自己的資料庫中,AUTHENTICATION_GUARD=web 用來選擇此模式。改為指向 remote_user_guard 後,Authelia 等驗證 proxy 會處理登入,並將使用者名稱放入 header。LDAP 已不再支援。若執行個體可從網際網路連線,首次登入後開啟管理頁面,並檢查 single user mode 設定。此設定控制其他使用者是否可以註冊。
加密。 靜態資料不會加密。交易會以可讀形式儲存在 MariaDB 中,因此任何擁有資料庫密碼或取得 volume 副本的人,都能取得你的財務歷史。請在前方進行 TLS termination;在可行時避免讓服務暴露於開放網際網路,並加密備份。
Beancount 與 Fava:您的分類帳是文字檔案
Beancount 是純文字的複式簿記語法。交易只需在您擁有的檔案中占用幾行:
2026-08-19 * "Supermarket" "Weekly shop"
Expenses:Food:Groceries 42.10 EUR
Assets:Bank:CheckingFava 是建構在該檔案之上的 Web 介面。它會繪製圖表、資產負債表與損益表,也能編輯來源檔案。請在虛擬環境中安裝:
sudo apt update && sudo apt install -y python3-venv
python3 -m venv ~/.venvs/fava
~/.venvs/fava/bin/pip install fava
~/.venvs/fava/bin/fava --read-only ~/ledger/main.beancount在 Ubuntu 24.04 上,純 pip3 install fava 會因為 error: externally-managed-environment 而失敗,原因是 apt 管理系統 Python。因此,虛擬環境是解決方案,而不是權宜措施。
Fava 預設在 localhost 的 5000 埠監聽。-H 會變更主機,-p 會變更埠,但擴大存取範圍前請先審慎考量:Fava 沒有登入功能。命令列沒有使用者名稱或密碼選項,因此任何能連線到該埠的對象,都能讀取您擁有的所有交易。請保留預設主機,並透過 SSH tunnel、VPN 或具備驗證功能的 proxy 存取。--read-only 旗標會阻止瀏覽器寫入檔案。如果您在筆記型電腦上編輯檔案並提交變更,建議設定此旗標。
多使用者與加密。 Fava 完全沒有使用者模型。單一執行個體會提供一個未附加身分資訊的分類帳,因此共用代表共用 proxy 登入資訊。加密方式取決於您對檔案採用的措施,例如使用 age 或 gpg 加密的副本,或加密的備份儲存庫。文字分類帳的優點是,git 可免費提供歷程記錄、blame 與遠端副本。
Wallos:專門管理定期支出的輕量工具
services:
wallos:
image: bellamy/wallos:latest
ports:
- "8282:80/tcp"
volumes:
- './db:/var/www/html/db'
- './logos:/var/www/html/images/uploads/logos'
restart: unless-stoppedWallos 將所有資料儲存在 db/wallos.db 的單一 SQLite 檔案中。它支援多種貨幣與匯率換算,也能透過電子郵件、Discord、Telegram、Gotify、Pushover 或 webhook,在定期續訂日期即將到來時通知你。你可以從設定頁面建立其他登入帳號,每個帳號都有自己的清單。
請先確認 Wallos 不包含哪些功能。Wallos 不會追蹤每日支出,也沒有預算概念。它只回答一個問題:我每月要支付哪些費用?下週有哪些費用會續訂?許多人正是為此將它與 Actual 搭配使用。如果你在意的定期金額是你開立並寄出的款項,而不是你支付的款項,請改看自架發票軟體。
Maybe 呢?
Maybe Finance 在許多討論串中都會被推薦,因此有必要說明。其 README 表示,該 repository 已不再積極維護,最後發布的版本標記為 v0.6.0,程式碼採用 AGPLv3 授權。它目前仍可執行。預算資料通常會保存 10 年,而讓未維護的軟體管理資料庫結構與銀行憑證,並不是妥善的保存方式。這是截至 2026 年 8 月的判斷;在決定採用前,請自行檢查該 repository。
這些服務需要多少伺服器資源?
這些服務都很輕量,應自行測量,不要直接採信部落格上的數字。正常使用一天後,在自己的主機上執行:
docker stats --no-stream查看 MEM USAGE 欄位。Actual、Wallos 與 Fava 各自在單一小型程序後方使用一個小型檔案,因此可輕鬆與其他服務共用資源有限的 VPS。Firefly III 則不同,因為其堆疊包含 MariaDB;資料庫伺服器即使沒有處理查詢,也會持續占用記憶體。規劃資源時,應為資料庫預留餘裕,而不是只依交易量估算。即使如此,預算管理應用程式通常不會耗盡 VPS 資源。如果要為整個堆疊規劃單一主機,PhotoPrism 與 Immich 的記憶體最低需求更可能決定所需的 RAM 容量。
資料本身幾乎不會增長。十年的家庭交易資料通常只是以 MB 計算的檔案,因此磁碟空間不是限制。這種長期累積真正造成的影響,會在下一節說明。
行動裝置支援,以及它的不足之處
這是自架財務應用程式不如商業產品的地方。因此,在將整個家庭改用這類應用程式前,請先評估實際限制。
官方文件明確指出,官方行動應用程式已淘汰。取而代之的是網頁版。官方文件將其描述為回應式 progressive web app。你可以將它安裝到主畫面,並像原生應用程式一樣使用。實際使用效果良好。但它不是 app store 應用程式。不過,社群仍維護非官方原生用戶端。
Firefly III 也沒有官方應用程式。但它的 API 已促成兩個功能完整的非官方應用程式。Waterfly III 是 Android 應用程式,發佈於 Google Play 和 F-Droid。Abacus 可在 iPhone、iPad 和 Android 上執行,使用 OAuth2 登入,並將 token 儲存在 iOS keychain。這兩者都要求手機能連線到你的執行個體。
Fava 和 Wallos 只提供回應式網頁,沒有其他功能。在手機上閱讀分類帳沒有問題。但使用手機鍵盤輸入 Beancount 交易並不理想。
有一點適用於所有這些應用程式:使用行動數據的手機不在你的家用網路上。你必須將應用程式發佈到具備 TLS 和強式驗證的網域,或讓手機連線到 VPN。避免將財務應用程式發佈到公開網際網路,卻只使用一組共用密碼保護。若這兩種方式都不適合,將執行個體置於 v3 onion service 後方也是第三種連線方式。這不需要公開 DNS 記錄,也不需要對整個網際網路開放連接埠。但手機必須透過 Tor Browser 存取它。
備份:此類別中最重要的部分
遺失媒體資料庫,最多只是需要重新下載。遺失分類整理了 5 年的交易資料,則無法重新下載。第一天就完成這項設定。
各應用程式應備份的內容:
- Actual Budget:完整資料 volume,包括
server-files與user-files。 - Firefly III:資料庫 dump,以及
.env、.db.env和 upload volume。 - Beancount:ledger 檔案,最好以 git repository 搭配 remote 儲存。
- Wallos:
db/wallos.db與上傳的 logos 目錄。
直接複製使用中的 SQLite 檔案,是產生無法還原備份的典型方式。SQLite 會將最近的寫入內容保存在獨立的 write ahead log 檔案中,因此只複製 .sqlite 檔案可能遺漏最新交易,甚至完全無法開啟。停止 container 幾秒鐘,等待複製完成:
cd /srv/actual
docker compose stop actual_server
tar czf /srv/backups/actual-$(date +%F).tgz -C /srv/actual actual-data
docker compose start actual_serverFirefly III 需要使用 dump。從 database container 內執行,避免密碼出現在 shell history 中:
cd /srv/firefly
docker compose exec -T db sh -c 'mariadb-dump -u firefly -p"$MYSQL_PASSWORD" firefly' > /srv/backups/firefly-$(date +%F).sql較舊的 MariaDB image 會以舊名稱 mysqldump 提供相同工具。將 .env 與 .db.env 和 dump 放在一起,因為若將資料庫還原到已遺失原設定的安裝環境,最糟糕的時機就得重新解開這個謎題。
儲存在同一台 VPS 上的副本,只能防範錯誤編輯。它無法防範伺服器遺失或遭到入侵。使用 restic 將備份目錄推送至 object storage。restic 會先加密 repository,再將任何資料傳出伺服器:
export RESTIC_REPOSITORY=s3:s3.example.com/money-backups
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
restic backup /srv/backups
restic forget --keep-daily 7 --keep-weekly 8 --keep-monthly 12 --prunerestic snapshots 現在應列出一個標記為今天日期的 snapshot。排程、憑證與 systemd timer 請參閱我們的 VPS 加密 restic 備份指南。
從未還原過的備份只是猜測。現在就測試一次,趁一切正常時進行:
restic restore latest --target /tmp/restore-test將 Actual archive 解壓縮到 scratch 目錄,在另一個埠上使用該目錄啟動第二個 container,然後開啟它。你應能看到備份執行時的帳戶及其餘額。至於 Firefly III,請將 dump 載入 scratch database,並計算 transactions table 中的資料列數。若數字與執行中的 instance 相符,表示備份確實可用。接著刪除 scratch copies,因為遺忘的測試 instance 若含有真實財務資料,本身就會造成問題。
選擇一個應用程式,先使用真實數據運作 1 個月,再遷移任何歷史資料,並在同一週完成備份設定。如果你仍在決定哪些生活資料適合放在自己的伺服器上,請參閱我們整理的 2026 年值得自行託管的服務,了解其餘 stack。
FAQ
哪個自架預算管理應用程式可以連接我的銀行?
Actual Budget 和 Firefly III 都可以,但必須透過第三方聚合服務,而不是直接連接銀行。Actual 支援 SimpleFIN Bridge(北美)、Enable Banking(歐洲)、Akahu(紐西蘭)和 Pluggy.ai(巴西)等供應商。其文件也指出,Actual 不會自動同步銀行資料,因此需要按下按鈕。Firefly III 使用獨立的 Data Importer 容器,可由 cron 觸發,因此是唯一真正能無人值守執行的選項。Beancount 和 Wallos 完全不支援銀行連線。選擇前請確認聚合服務涵蓋你的特定銀行,因為支援範圍通常比功能更能決定結果。
我可以在手機上使用這些預算管理應用程式嗎?
可以,但沒有官方應用程式。Actual 的文件指出,官方行動應用程式已棄用,並建議使用網頁版。網頁版是回應式 progressive web app,可安裝到主畫面。Firefly III 有 2 個穩定的非官方用戶端:Android 上的 Waterfly III,以及 iOS 和 Android 上的 Abacus。Fava 和 Wallos 只有回應式網頁,沒有其他形式。無論使用哪個選項,手機都必須能連線到你的伺服器。因此,請規劃使用具備 TLS 和強式驗證的網域,或讓手機連線至 VPN。
如何備份自架預算管理應用程式,避免資料庫損毀?
不要單獨複製正在使用的 SQLite 檔案。SQLite 會將最近的寫入內容保存在獨立的 write ahead log 中,因此在寫入期間建立的複本可能遺失交易資料,或無法開啟。請停止容器、複製資料目錄,再重新啟動容器。這類應用程式的操作只需數秒。對於 Firefly III,請改在資料庫容器內執行 mariadb-dump,並將環境檔案與 dump 一起保存。將結果以加密的 restic repository 傳送到主機外,並還原 1 次以確認備份可正常使用。
Firefly III 對小型 VPS 來說太耗資源嗎?
它是這裡最耗資源的選項,原因只有一個:官方 compose file 會在應用程式和 cron 容器旁執行 MariaDB 伺服器。個人財務資料量很小,因此記憶體主要消耗在閒置的資料庫程序,而不是交易資料。請在一般使用日結束後於自己的主機執行 docker stats --no-stream,查看 MEM USAGE 欄位,不要直接採信已發布的數據。若希望使用最小的資源,Actual Budget 和 Wallos 都只需以 1 個程序操作 1 個檔案。