MyFin Budget 介绍与选型指南

MyFin Budget(afaneca/myfin)开源自托管个人预算与记账平台介绍与选型指南:三端架构、功能特性、快速上手、适用限制,并与 Actual、Firefly III 等同类量化对比,全部信息溯源官方渠道(2026-10-24 查询)。

MyFin Budget财务记账2026/10/24

MyFin Budget 介绍与选型指南

目标:全面认知 MyFin Budget 这款开源自托管个人预算/记账平台——它是谁、由什么组成、能做什么、不能做什么、与同类产品比该不该选它。本文所有项目事实(版本、星数、许可、技术栈、功能清单)均溯源官方渠道(GitHub 仓库、官方 Releases、awesome-selfhosted 收录页),查询日期统一为 2026-10-24;「快速开始」中的命令与回显已在实测环境(myfin-api 5.5.0)逐条验证。

一、环境信息

本文为认知与选型篇,不依赖本地安装环境。信息源与实测环境如下:

  • 溯源渠道:GitHub 官方仓库 afaneca/myfin(Web 前端)、afaneca/myfin-api(REST API 后端)、afaneca/myfin-android(Android 客户端);官方 Releases Atom 源;官方站点 myfinbudget.com;awesome-selfhosted「Money, Budgeting & Management」分类收录页(2026-10-06 快照)
  • 查询日期:2026-10-24(星数经 shields.io GitHub Stars 徽章实时读取)
  • 快速开始实测环境:Ubuntu 22.04 x86_64 服务器,MyFin API 版本 5.5.0(GET / 实测回显 {"info":"MyFin API","version":"5.5.0"}),Web 前端由 nginx 提供服务(实测响应头 Server: nginx/1.31.6)
  • 部署形态:官方 docker-compose.yml 三服务编排(MySQL 8.4 数据库 + myfin-api 后端 + myfin 前端),完整部署步骤见《MyFin Budget Docker Compose 部署指南》

二、软件概述

MyFin Budget(仓库与官网均使用「MyFin」全称,awesome-selfhosted 收录名为「MyFin Budget」)是一款 GPL-3.0 开源、可自托管的个人财务/预算管理平台。项目由葡萄牙开发者 António Faneca(afaneca)于 2020 年作为个人项目发起(官方 README 原文:MyFin originated as my own passion project in 2020),动机是当时市面上的个人财务管理工具(FPM)普遍存在三个痛点:不够易用、缺少完整的预算(budgeting)工具、数据不掌握在自己手里。MyFin 的产品定位就是针对这三点——把账本放在自己的服务器上,以「逐月预算」为核心方法论管理收入、支出与资产预测。

项目由三个官方仓库组成(信息来自各仓库 README,2026-10-24 查询):

组成仓库技术栈最新版本(2026-10-24 实查 Releases)GitHub Stars(shields.io 实读)
Web 前端afaneca/myfinReact + TypeScript(Vite 构建)10.7.0317
REST API 后端afaneca/myfin-apiNode.js + Express + Prisma ORM5.5.035
Android 客户端afaneca/myfin-androidKotlin—53

💡 说明:三个仓库独立发版。前端与后端版本号不同步是正常的(前端 10.x、后端 5.x、Android 独立节奏)。Docker 官方镜像发布在 GitHub Container Registry(ghcr.io/afaneca/myfin 与 ghcr.io/afaneca/myfin-api),README 上的 Docker 徽章直接指向这两个包页面。

关键事实速览:

  • 许可证:GPL-3.0(两个主仓库徽章均标注 License: GPL v3)
  • 语言支持:原生多语言,官方 README 明确「Native full support to both english and portuguese」(英语/葡萄牙语全量支持,其余语言由社区本地化覆盖);界面提供白/暗主题
  • 货币支持:后端内置 20 余种货币(源码 consts.js 实查,含 EUR、USD、GBP、JPY、CNY 人民币、SGD、HKD 类的 MYR 等),实例初始化时选定一种作为记账本位币
  • 活跃度:awesome-selfhosted 收录页显示 2026-10-06 时点 ★316、标签 Nodejs/Docker/GPL-3.0、Actively maintained(最近提交 2026-08-28,来自 selfhostyourself.com 索引页);两主仓库 Releases 持续滚动(myfin 10.3.0→10.7.0、myfin-api 5.2.1→5.5.0 连续多个版本)
  • 定位关键词:个人使用、自托管、逐月预算(Boonzi 风格)、CSV/剪贴板批量导入、规则自动分类

三、核心架构

MyFin 采用经典的三层分离架构,三个组成部分可分布在不同机器,仅通过 HTTP/REST 通信(架构组成来自官方仓库与官方 docker-compose.yml,2026-10-24 查询;部署实测详见部署篇):

[浏览器 / Android 客户端]
        │  HTTP(前端静态资源)
        ▼
[myfin 前端]  ──REST/JSON(sessionkey 会话认证)──▶ [myfin-api 后端] ──Prisma ORM──▶ [MySQL 8.4 数据库]
  React+TS                                        Node.js+Express                      独立库实例
  nginx 托管静态资源                                限流 100 请求/分钟                     myfin 库

各层职责与实测要点:

  • 前端(ghcr.io/afaneca/myfin):React + TypeScript SPA,构建产物由容器内 nginx 托管。前端需要一个指向 API 的基础地址,由环境变量 VITE_MYFIN_BASE_API_URL 提供——实测确认该变量在运行时注入即可生效(浏览器侧 API 地址写在 JS 产物中,无需重新构建)。前端对外暴露 80 端口。
  • 后端(ghcr.io/afaneca/myfin-api):Node.js + Express + Prisma 的 REST API,默认监听 3001 端口。所有业务端点直接挂在根路径下(无 /api 前缀),如 /auth/、/accounts/、/budgets/。内置三件安全/治理中间件(源码 app.ts 实查):helmet 安全响应头、CORS、全局限流(每分钟 100 请求,源码 rateLimiter.ts 实查 windowMs: 60 * 1000, limit: 100)。认证采用「登录换取 UUID 会话键」模式:登录返回 sessionkey,此后每次请求以 HTTP 请求头 sessionkey + authusername 携带身份,会话 30 分钟滑动续期(源码 sessionManager.ts 实查 30 * 60 秒,移动端会话为 30 天)。
  • 数据库(mysql:8.4):官方 compose 以 MySQL 8.4 为唯一存储,库名 myfin,由 Prisma 管理表结构(migrations 随 API 镜像启动时执行 prisma migrate deploy)。金额以整数分值存储(实测备份接口返回 current_balance: 315750 对应界面 3157.50),避免浮点误差。
  • Android 客户端:复用同一套 REST API,与 Web 端共用账号(后端为移动端单设 sessionkey_mobile 与 30 天会话,源码实查)。

💡 技术拓展:个人记账系统的「前后端一体 vs 前后端分离」是选型时容易忽视的维度。主流方案对比——

形态代表产品特点适合人群
单体一体(服务端渲染/单体服务)Firefly III、IHateMoney一个服务一个端口,部署简单,前端定制受限只想要「能用的账本」
前后端分离(API 优先)MyFin Budget、Actual(同步服务)前端/后端/移动端独立演进,可自建第三方客户端有 API/自动化诉求、多端使用
本地优先(Local-first)Actual数据文件在本地,服务器仅做同步极致数据主权、离线优先

MyFin Budget 实际采用「API 优先的前后端分离」形态:官方同时发布 Web、REST API、Android 三端,自动化脚本可直接调用 REST API 而不必模拟浏览器。

四、功能特性

功能清单逐项溯源自官方 README(afaneca/myfin 与 afaneca/myfin-api 的 Features 小节,2026-10-24 查询),并标注实测验证情况(凡标「已实测」的项,均在 myfin-api 5.5.0 实测环境以 REST API 真实跑通,回显见《MyFin Budget API 使用详解》):

功能域官方描述说明与实测情况
多语言本地化原生多语言支持英语/葡萄牙语全量官方支持;界面白/暗主题可选
交易 Transactions手动记账,或从剪贴板/CSV/网银导出批量导入已实测:POST /trxs/step1 创建支出/收入交易成功,列表返回完整记录
拆分交易 Split Transactions数次点击即可把一笔已入账交易拆成两笔更新交易接口带 split_* 字段组(源码 schema 实查)
账户 Accounts跟踪所有账户及其交易与余额已实测:创建支票账户与现金钱包成功;账户类型 7 种——CHEAC 支票/SAVAC 储蓄/INVAC 投资/CREAC 信用/OTHAC 其他/WALLET 钱包/MEALAC 餐补卡(源码 schema 实查)
分类与实体 Categories & Entities无限分类与实体(交易对手),细分收支已实测:创建分类、实体成功,GET /user/categoriesEntitiesTags 返回聚合清单
规则与自动分类 Rules & Auto-categorization按用户定义规则对导入交易自动分类接口已实测连通(/rules、/trxs/auto-cat-trx,内部用模糊匹配服务 fuzzyMatchingService)
预算 BudgetsBoonzi 风格逐月预算,对未来逐月规划已实测:三步式创建(step0 取各分类历史均值 → step1 建预算)、分类计划值更新、预算矩阵、删除全部成功
统计 Stats资产逐月演变总览 + 未来数年财务预测已实测:月度收支分布、逐月余额、用户计数统计、余额快照四个统计端点真实返回
投资 Investing跟踪投资组合(官方标注 currently in beta!)接口域存在(invest/assets、invest/trx、invest/reports),官方明确为 beta 功能
账户管理改密码、改币种等已实测:PUT /users/changeCurrency 从 USD 切到 EUR 成功
目标 Goals记录并跟踪储蓄目标官方 Roadmap 列出开发中;/goals 接口域已在 5.5.0 就位
备份与恢复用户级数据备份/恢复已实测:GET /user/backup 返回完整 JSON 账本(含 apiVersion 标识)

💡 说明:MyFin 的「预算」不是简单的支出限额表,而是 Boonzi 式逐月预算(葡萄牙流行的 YNAB/信封法变体):每月为每个分类设定「计划支出(debit)」与「计划收入(credit)」,接口在创建预算时自动带出该分类的上月均值、去年同期均值、近 12 月均值与生涯均值四个参考值(实测 POST /budgets/step0 真实返回),帮你「按历史定计划、按计划控当月」。

五、快速开始(最小可用示例)

本节给出两条从零到「第一次成功握手」的最小路径:不想装,30 秒体验官方 Demo;想自托管,按 API 初始化流程跑通第一个用户与会话(完整部署、镜像版本锁定与排障见《MyFin Budget Docker Compose 部署指南》)。

5.1 体验官方 Demo(免安装)

官方提供在线演示实例(README 官方链接 myfinbudget.com/goto/demo,2026-10-24 查询),演示账号:

Username: demo
Password: demo

浏览器打开 Demo 地址登录即可体验完整功能,无需任何本地安装。

5.2 首次初始化与登录(API 最小握手)

以下命令在实测环境(myfin-api 5.5.0)逐条验证,输入与回显均为真实记录。假定 API 已部署并可达(本地实测地址 http://localhost:8151)。

第一步,实例初始化——当系统中还没有任何用户时,通过 POST /setup/init 创建第一个用户(请求体含用户名、密码、邮箱、记账币种):

curl -s -X POST http://localhost:8151/setup/init \
  -H 'Content-Type: application/json' \
  -d '{"username":"admin","password":"q1w2e3r4","email":"admin@example.com","currency":"USD"}'

实测回显:

"Done!"

⚠️ 注意:邮箱必须是可解析的合法格式(后端 joi 校验 .email())。实测使用 admin@myfin.local 被拒绝,回显 {"message":"\"email\" must be a valid email"}——.local 不是有效顶级域,改用 admin@example.com 即成功。

第二步,登录换取会话键——POST /auth/ 校验账号密码并签发 sessionkey:

curl -s -X POST http://localhost:8151/auth/ \
  -H 'Content-Type: application/json' \
  -d '{"username":"admin","password":"q1w2e3r4"}'

实测回显(节选):

{"user_id":1,"username":"admin","email":"admin@example.com","sessionkey":"465e8818-bc1a-485b-891d-3f9a5ad19403","sessionkey_mobile":null,"last_update_timestamp":"0","accounts":[],"currency":"USD","is_demo":false}

第三步,带着会话键读取账户列表——GET /accounts/,认证信息放请求头(sessionkey + authusername):

curl -s -H "sessionkey:465e8818-bc1a-485b-891d-3f9a5ad19403" \
  -H "authusername:admin" http://localhost:8151/accounts/

实测回显:

[]

返回空数组即代表「用户已就绪、会话有效、账本为空」——从这里开始建账户、记账、做预算的完整流程见 API 使用详解与部署篇。

5.3 部署入口

自托管部署采用官方三服务编排(MySQL 8.4 + myfin-api + myfin 前端),官方 docker-compose.yml 一键拉起,含健康检查依赖链与数据卷持久化。完整步骤、端口规划、密码变更与常见排障(邮箱校验、镜像版本锁定、前端 API 地址注入)见《MyFin Budget Docker Compose 部署指南》。

六、适用场景与限制

6.1 适合的场景

  • 想用「逐月预算」方法论管钱的人:MyFin 的核心就是 Boonzi/信封式逐月预算,带历史均值参考与执行率跟踪,比流水账工具更适合「先规划后花钱」的用户。
  • 数据主权敏感的个人用户:GPL-3.0 + 自托管 + 账本落在自家 MySQL,配合用户级 JSON 备份(/user/backup)可自由迁移。
  • 多端使用者:官方 Web + Android 双端共用同一账号与会话体系(Web 30 分钟滑动会话、移动端 30 天会话),API 优先架构也适合写自动化脚本。
  • 有网银 CSV 导入需求的用户:批量导入(剪贴板/CSV/网银导出)+ 规则自动分类是官方主打工作流,实测导入前置接口(step0/step1/step2)齐备。

6.2 当前限制(2026-10-24 官方渠道确认)

  • 单实例多用户但账本彼此独立:实例初始化只允许创建第一个用户(实测重复调用 POST /setup/init 返回 HTTP 406),后续用户靠注册开关 ENABLE_USER_SIGNUP 控制;它不是家庭共享账本工具(对比 IHateMoney 的多人共享分摊定位)。
  • 无自动银行同步:官方功能清单中没有银行 API 直连,交易靠手动/CSV 批量导入 + 规则辅助。
  • 投资模块为 beta:官方 README 明确标注 beta,投资报表能力仍在完善(Roadmap 亦列出更多统计与目标功能开发中)。
  • 社区规模小:主仓库 317 星、后端 35 星(shields.io,2026-10-24 实读),遇到问题主要靠 GitHub Issues 与官方 Wiki,第三方教程生态远少于 Actual/Firefly III。
  • 币种单一本位:每个实例/用户初始化时选定一种本位币(内置 20 余种可选,含人民币 CNY),不支持多币种账本。

七、同类选型对比

7.1 候选全景与量化对比

对比对象选自 awesome-selfhosted「Money, Budgeting & Management」分类中与 MyFin 定位相近的主流自托管记账/预算工具。星数为 2026-10-24 经 shields.io GitHub Stars 徽章实读(IHateMoney 与 ezbookkeeping 当日徽章解析失败,不列星数,只比定位);技术栈与许可溯源各自官方仓库。

产品Stars技术栈部署形态核心方法论数据主权/离线许可
MyFin Budget317React+TS / Node.js+Express / MySQL三服务 compose(前端/后端/DB)Boonzi 式逐月预算 + 规则自动分类自托管、用户级 JSON 备份GPL-3.0
Actual30kReact / Node.js / SQLite单服务 + 数据文件预算信封法(本地优先)本地优先,服务器仅同步MIT
Firefly III25kPHP Laravel / MySQL·PostgreSQL单服务 + DB双录入复式记账 + 规则引擎自托管AGPL-3.0
Ghostfolio9.6kNestJS / PostgreSQL服务 + DB投资组合与净值跟踪自托管AGPL-3.0
Bigcapital4kNode.js / React服务 + DB小企业复式记账 + 报表自托管AGPL-3.0
Kresus344Node.js / Python 银行抓取模块服务 + DB欧洲网银自动抓取 + 预算自托管AGPL-3.0
IHateMoney—Python Flask / SQLite·MySQL单服务多人共享账本与分摊自托管BSD-3-Clause

💡 说明:星数只反映社区热度,不代表质量排序。Actual/Firefly III 的 25k+ 星与 MyFin 的 317 星相差两个数量级,对应的直接差异是:第三方教程、模板、集成生态、Issue 响应速度都向大社区产品集中;MyFin 的相对优势在「轻、专、快」——三服务小栈资源占用低、逐月预算方法论贯彻彻底、版本迭代快(2026 年内 myfin 连发 10.3→10.7、myfin-api 连发 5.2→5.5)。

7.2 选型建议(如果……则……)

  • 如果你要「逐月预算」为核心、界面清爽、资源占用小 → 选 MyFin Budget;三服务小栈在 1 核 1GB 级小型服务器即可流畅运行(实测 MySQL 8.4 + Node.js API + nginx 前端)。
  • 如果你要本地优先/离线可用/最大社区生态 → 选 Actual;MIT 许可 + 本地数据文件,社区活跃度最高。
  • 如果你是复式记账重度用户、要规则引擎与报表深度 → 选 Firefly III;功能纵深最大,但 PHP 栈与配置复杂度也更高。
  • 如果你主要管投资组合而非日常收支 → 选 Ghostfolio;MyFin 的投资模块仍是 beta。
  • 如果家庭多人共享记账/分摊 → 选 IHateMoney 或 Budget 分摊类工具;MyFin 的用户隔离设计不适合共享账本场景。
  • 如果你在欧洲且依赖网银自动抓取 → 选 Kresus;其银行抓取模块是独有卖点(对非欧洲银行支持有限)。

综合结论:MyFin Budget 是一款方法论清晰、架构干净的小而美自托管预算工具,适合「个人使用 + 逐月预算 + 想要 API 可编程」的读者;若把「社区规模、生态成熟、银行自动同步」排在第一位,Actual 与 Firefly III 仍是更稳的选择。

八、参考链接