自架預算應用程式比較:Actual、Firefly III、Fava、Wallos
比較 Actual、Firefly III、Fava 與 Wallos:哪些能自動擷取銀行交易、哪些必須手動匯入,並說明 aggregator、Actual 手動同步與 GoCardless 不再接受新帳戶等限制。
簡短結論
自架預算應用程式的主要差異,在於它是自動擷取交易,還是由你手動輸入交易。對家庭預算而言,Actual Budget 是最佳預設選擇。它採用信封預算法,並以單一容器執行。你也可以在需要時,透過銀行資料提供者擷取交易。
如果你需要複式簿記帳戶,或希望在無人監看時依排程執行匯入,Firefly III 是合適的選擇。Beancount 搭配 Fava 適合希望將分類帳儲存為純文字檔,並置於版本控制下的人。Wallos 只處理單一用途:追蹤每月從帳戶扣除的週期性費用。
這些應用程式都不會自行連線到你的銀行。任何顯示銀行交易的應用程式,都是從第三方彙整服務取得資料;申請彙整服務帳戶,往往就是阻礙使用者的步驟。安裝任何應用程式前,請先閱讀同步一節。
各方案的執行內容對照
此圖表背後的資料
[
{
"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 via admin page",
"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。截至 2026 年 10 月,其文件列出適用於紐西蘭的 Akahu、適用於歐洲的 Enable Banking、適用於歐洲的 GoCardless Bank Account Data、適用於北美的 SimpleFIN Bridge,以及適用於巴西的 Pluggy.ai。你必須自行向供應商註冊、產生 keys 和 secrets,然後將它們貼到伺服器中。需要注意兩項限制。在目前的穩定版本 26.10.0 中,只有使用者按下按鈕時才會執行同步。可依指定間隔自動同步已連結帳戶的設定已合併,但截至 2026 年 10 月,該功能只在 nightly builds 中提供;即使使用 nightly build,也只有在裝置上開啟 Actual 時才會同步。同一頁文件也指出,GoCardless 不再接受新帳戶,這表示舊版指南仍建議的免費歐洲方案已無法使用。SimpleFIN Bridge 是付費訂閱服務,費用由供應商向你收取,而不是由 Actual 收取。
如果你希望 Actual 在今天就能於無人監看的情況下匯入資料,可以使用名為 actual-auto-sync 的社群專案,依排程執行銀行同步。這是獨立的 container,與 Actual server 並列執行,並透過 Actual 的官方 API package 與其通訊。它不屬於 Actual,因此你還需要額外設定及維護另一項服務,並持續更新。
Firefly III 將匯入功能拆分到第二個 container,也就是 Firefly III Data Importer。其範例設定包含 GoCardless (Nordigen)、Enable Banking、SimpleFIN 和 Lunch Flow 的認證欄位,也支援 CSV 和 CAMT.053 檔案匯入。設定 CAN_POST_AUTOIMPORT=true,在 AUTO_IMPORT_SECRET 中放入長度足夠的隨機值,接著即可由主機上的 cron job 觸發匯入,不需要開啟瀏覽器。這是本比較中唯一內建無人監看同步功能的應用程式;Actual 則必須搭配上述額外的社群服務才能做到。
Beancount 不支援同步。你必須從銀行下載 CSV 或 OFX 檔案,然後執行自行撰寫或取得的 importer script。Wallos 也不支援同步,而且這是刻意的設計:你只需輸入一次訂閱資料,之後系統會依自己的排程重複處理。
手動匯入是永遠可用的方式,也不會因銀行更換供應商而失效。如果銀行連線能力是你的決定因素,請在安裝任何軟體前,先確認 aggregator 是否涵蓋你的特定銀行。這項確認只需 10 分鐘,卻能省下整個週末的時間。
Actual Budget:在單一容器上進行信封預算
信封預算是指在花錢前,先將現有資金分配給各個類別。雜貨分配 300,交通分配 80;依照這種方法,分配總額不應超過帳戶中的資金。Actual 不會將此規則強制為硬性上限:即使分配金額超過現有資金,仍可完成分配,但該月份會顯示為超額預算,超出的部分會從下個月的資金中扣除,直到補足為止。Actual 實作了這種方法,而且應用程式採用本機優先設計:瀏覽器或桌面用戶端會保存完整的預算副本,並與伺服器同步,因此即使伺服器停止運作,應用程式仍可繼續使用。
services:
actual_server:
image: actualbudget/actual-server:latest
ports:
- '5006:5006'
volumes:
- ./actual-data:/data
restart: unless-stopped使用 docker compose up -d 啟動。Actual 的 Docker 安裝文件指出,應從區域網路上的另一台電腦,透過純 HTTP 的 http://your-server:5006 開啟它,因此應用程式不需要 HTTPS 也能載入。Actual 的 HTTPS 頁面補充說明,若要安全使用所有 Actual 功能,就需要 HTTPS;但在以下兩種情況可略過此步驟:伺服器位於自己的電腦上,且只透過 localhost 開啟;或由雲端服務供應商代為處理 HTTPS。資料磁碟區會新增兩個目錄:server-files 和 user-files。這些目錄就是你的預算資料。在透過網際網路連線的 VPS 上,第一次使用前應先在前方設定具備 TLS(傳輸層安全性)的反向代理,並透過該代理提供的 HTTPS 位址開啟應用程式。自簽憑證也可運作,但瀏覽器會警告憑證無效。完整操作流程請參閱我們的 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 8080 提供服務;compose 檔案會將其發佈至主機的 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 等驗證代理程式會處理登入,並透過標頭傳遞使用者名稱。不再支援 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,提醒即將到期的續訂。管理員可在管理頁面建立其他登入帳號,也能開放註冊或啟用 OpenID Connect 登入;每個登入帳號都有自己的清單。您在設定中新增的家庭成員只是用來標示付款人,並不是獨立的登入帳號。
請明確了解它不包含哪些功能。Wallos 不會追蹤每日支出,也沒有預算功能。它只回答一個問題:我每月要支付哪些費用,下週有哪些項目會續訂?許多人正是為了這個用途,將它與 Actual 搭配使用。如果您關心的定期金額是您收取的款項,而不是您支付的款項,請改看 自架發票軟體。
Maybe Finance 呢?
Maybe Finance 在許多討論串中都會獲得推薦,因此需要特別說明。其 README 表示,該 repository 已不再維護,最後一個 release 標記為 v0.6.0,程式碼採用 AGPLv3。該 repository 已於 27 July 2025 封存為唯讀。它目前仍可執行。預算資料通常需要保存十年,而由未維護軟體管理資料庫 schema 與銀行憑證並不適合。直到 October 2026,情況仍是如此,因此在採用前請自行檢查該 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;在目前的穩定版本中,按下按鈕後才會執行同步。以 2026 年 10 月的狀態來看,只有 nightly builds 支援依指定間隔自動同步,而且 Actual 必須保持開啟;社群服務 actual-auto-sync 則可作為額外容器,依排程執行同步。Firefly III 使用獨立的 Data Importer 容器,可由 cron 觸發,因此是唯一內建無人值守匯入功能的選項。Beancount 和 Wallos 完全不支援銀行連線。選擇前請確認聚合服務涵蓋你的銀行,因為實際支援範圍通常比功能更能決定結果。
我可以在手機上使用這些預算管理應用程式嗎?
可以,但沒有官方應用程式。Actual 的文件指出,官方行動應用程式已停止維護,並建議使用網頁版;這是一個回應式 progressive web app,可以安裝到主畫面。Firefly III 有 2 個可靠的非官方用戶端:Android 上的 Waterfly III,以及支援 iOS 和 Android 的 Abacus。Fava 和 Wallos 只有回應式網頁,沒有其他形式。Actual 會在本機保留預算副本,因此離線時仍可運作,但手機必須連到你的伺服器,才能同步及取得銀行資料。其他應用程式的所有功能都需要伺服器。無論採用哪一種方式,都應準備具備 TLS 和強式驗證的網域,或讓手機連線至 VPN。
如何備份自架預算管理應用程式,避免資料庫損毀?
不要單獨複製正在使用中的 SQLite 檔案。SQLite 會將最近的寫入內容保存在獨立的 write ahead log 中,因此在寫入期間複製可能遺漏交易,或導致檔案無法開啟。請先停止容器,複製資料目錄,再重新啟動容器;這類應用程式的資料量很小,整個過程只需幾秒。對於 Firefly III,請改在資料庫容器內執行 mariadb-dump,並將環境檔案與 dump 一起保存。將結果以加密方式移出主機,存放在 restic repository 中,並實際還原 1 次,以確認備份可用。
Firefly III 對小型 VPS 來說是否太耗資源?
它是這裡最耗資源的選項,但原因只是官方 compose file 會在應用程式和 cron 容器旁邊執行 MariaDB server。個人財務資料量很小,因此記憶體主要被閒置的資料庫程序使用,而不是交易資料。正常使用 1 天後,在自己的主機上執行 docker stats --no-stream,查看 MEM USAGE 欄位,不要只依賴公開的估算數值。如果希望占用資源盡可能少,Actual Budget 和 Wallos 都只需 1 個程序,並使用 1 個檔案。