每月二十美元听起来不算多,直到你把它乘以整个自由职业生涯的长度。按每月 20 美元计算,一个标准的开票订阅服务每年要花你 240 美元——在六年的自由职业生涯中,这就是 1,440 美元,只为获得发送 PDF 和收款的资格。而一台小型虚拟专用服务器每月租金大约 5 美元,最好的自托管开票软件则是免费的。
那么,你应该取消订阅、自己托管开票系统吗?对于一个有技术背景的自由职业者来说,诚实的答案是:很可能是的,但前提是你选择仍在维护的软件,并预算每月一小时的维护时间。本指南将带你了解你不断会遇到的三个名字——Invoice Ninja、Crater 和 InvoicePlane——它们各自的实际运行成本、你要承担的维护工作,以及何时继续使用托管软件才是更明智的选择。
真实算术:订阅制 vs. 自托管
先看看你现在正在支付、或者将会支付的托管开票费用:
- FreshBooks 入门档月付起价 21 美元(年付方案为每月 17 美元),更完整的会计功能则需要每月 38 美元的 Plus 方案。
- QuickBooks Solopreneur 每月 20 美元,直接面向想要在开票之外获得税务分类和 Schedule C 报税准备的一人企业。
- Invoice Ninja 自家的托管服务提供了一个真正免费的档位(最多 5 个客户,发票数量不限),付费方案为每月 14 美元和 18 美元。
再来看看自托管这一侧:
- 主流服务商的小型 VPS 每月大约 5 美元,即每年约 60 美元。
- Invoice Ninja 的自托管版本免费,且包含 Pro 和 Enterprise 功能;可选的去品牌授权,用于从面向客户的页面中移除 Invoice Ninja 品牌标识,每年 40 美元。
- InvoicePlane 完全免费,没有任何付费档位。
所以,现实的对比是:典型 SaaS 订阅每年约 240 美元,而自托管每年约 60 到 100 美元。你每年大约省下 150 美元——这有意义,但并非翻天覆地。自托管更重要的理由是:对客户数据的掌控、摆脱按客户数计费和涨价、以及按你自己的想法精确定制发票模板和工作流。省下的钱是附带的奖励,而不是理由本身。
选项一:Invoice Ninja——大多数自由职业者应该选的那个
Invoice Ninja 是当今最强大的自托管开票选择,也是三者中唯一仍在积极开发的。其第 5 版代码库是 Laravel(PHP)后端,配合基于 Flutter 的网页和移动应用,涵盖发票、报价、循环账单、支出、时间追踪、带看板的项目、客户门户,以及通过数十个支付网关的在线支付。
对自托管者来说,这个交易异常慷慨:自托管版本免费,并解锁托管客户每月花 14 到 18 美元才能使用的 Pro 和 Enterprise 功能。唯一的付费附加项是每年 40 美元的去品牌授权,用于移除"Created by Invoice Ninja"的品牌标识。如果你的客户会看到门户和发票 PDF——而他们肯定会看到——那就把这笔钱算进预算。
你应该了解的授权细节
Invoice Ninja v5 采用 Elastic License 2.0 发布。这使得它是源码可得的,而非严格意义上的开源:你可以阅读代码、修改代码,并自由地用于自己的业务,但你不能把它拿去作为竞争性的托管服务转售。对于一个给客户开票的自由职业者来说,这个限制无关紧要——但值得知道的是,你依赖的是厂商的善意,而不是社区的保证。如果严格的开源授权对你很重要,下面介绍的 InvoicePlane 就是 MIT 授权的替代方案。
运行它需要什么
官方文档中列出的服务器要求并不高:PHP 8.1 或更高版本,搭配 MySQL 5.7+ 或 MariaDB 10.3+。实际上,大多数人会用官方 Docker 镜像部署,配合一个由三个服务组成的 compose 栈——应用、数据库和一个 cron 工作进程。首次运行设置意味着生成应用密钥、运行数据库迁移,并完成一个基于网页的向导。第一次预计要折腾一个晚上,包括把域名指向服务器、配置 TLS 终止,以及配置 SMTP 服务商以便发票真正能送达收件箱。
从第一天起就要做对两件事:自动化数据库备份到服务器本身以外的地方,以及一个真正在运行的 cron 调度器——没有它,循环发票和逾期提醒会悄无声息地停止工作。
选项二:InvoicePlane——简单、真正开放、轻量
InvoicePlane 是三者中最极简的:一个用于管理报价、发票、客户和付款的自托管 PHP 应用,采用 MIT 授权。它脱胎于旧的 FusionInvoice 代码库,并保留了这个项目最初的承诺——在你自己的服务器上运行直截了当的账单系统,没有付费档位、没有功能门槛、没有任何回传行为。
如果你的需求确实简单,就选 InvoicePlane。如果你每月只发少量发票、不需要时间追踪或项目管理,并且想要一个攻击面小、你能从头到尾理解的软件,它非常合适。它能愉快地运行在最便宜的共享主机或一台微型 VPS 上,而它的简单性也是维护上的优势:要坏的东西更少,要更新的也更少。
代价在于发展势头。稳定的 1.x 系列基于老旧的 CodeIgniter 3 框架,而现代的 v2 重写版(Laravel 加 Filament)仍在开发中,像 Peppol 电子发票这样的重要部分尚未实现。InvoicePlane 有人在维护,但很慢——对于一个工作描述几十年都没变过的工具来说,这没问题;而这也是一个理由,让你保持 PHP 版本和备份处于最新状态,而不是指望项目会替你解决疏于维护的问题。
选项三:Crater——一个警示故事,而非推荐
你仍会在"最佳开源开票"的清单文章里找到 Crater:一个精致的 Laravel 和 Vue.js 应用,用于发票、估价、支出和付款,带有移动应用和多币种支持。它当年是名正言顺地赢得这个声誉的——但那已是几年前。
如今,Crater 实际上已停止维护。它的发行版在 2022 年停留在 6.x 版本,文档更新在 2023 年停止,此后代码库只有零星活动。没人打补丁的账单软件,就是围绕你客户的姓名、地址、费率和付款详情不断累积已知漏洞的账单软件。对于一款业务工具来说,这是不可接受的基础。
这个教训可以推广到 Crater 之外:在采用任何自托管业务软件之前,先检查代码库的脉搏——近期的发行版、已合并的安全修复、以及反应积极的维护者。一个漂亮的应用配上已死的提交历史,就是一个披着演示外衣的负债。如果你想要 Crater 的形态(现代技术栈、宽松授权)并且还要有生命力,不妨看看由社区维护的 MIT 授权替代方案,比如 SolidInvoice。
你真正要承担维护的是什么
自托管用一笔订阅费,换来了一串简短的经常性责任。没有一个是难的;但每一个都不可选:
- 更新。 在应用和依赖项发布后几天内应用更新,而不是几个月。账单软件持有个人数据,所以你开票技术栈中一个已知 CVE 是客户信任问题,而不仅仅是技术问题。
- 备份。 自动化每日数据库导出加上文件存储目录,把它们送到服务器以外的地方,并且至少测试一次恢复。未经测试的备份是希望,不是备份。
- TLS 与访问控制。 一切通过 HTTPS 提供,用强凭据加上受支持的第二因素来保护管理面板,永远不要把数据库端口暴露到互联网。
- 邮件送达率。 落进垃圾邮件的发票收不到钱。通过信誉良好的 SMTP 服务商发送,为你的域名配置好 SPF、DKIM 和 DMARC,并留意你的退信率。
- Cron 与队列。 循环发票、付款提醒和货币更新都依赖调度器。监控它——一个悄悄死掉的 cron 任务,看起来和客户突然开始迟付一模一样。
- PHP 与操作系统生命周期。 追踪你的 PHP 次版本和服务器操作系统的终止支持日期。你计划好的升级只需一小时;被过期版本逼迫的升级则要花一个周末。
一旦稳定下来,预算每月大约一小时,外加偶尔的升级之夜。如果这听起来像是你会怨恨的苦差事,那这种感受就是数据——留在托管服务上吧。
让自托管者吃亏的常见错误
大多数自托管的失败都很无聊,而且可预防:
- 没有服务器外的备份。 同一台 VPS 上的快照不是备份。当服务商倒霉的时候,你的数据和你的"备份"一起蒸发。
- 一直跳过更新,直到跨越太大变得吓人。 一年十二次小升级无痛;一次跨越三个大版本的巨跃就是发票丢失的原因。少量而频繁地更新。
- 不用 HTTPS 运行。 一个承载客户姓名和金额的发票门户用明文 HTTP 提供服务是失职。免费证书只需几分钟——已经没有任何借口了。
- 忘了 cron 工作进程。 "我的循环发票停了"最常见的原因。验证调度器在重启和部署后仍然存活。
- 升级前没有预演环境。 给服务器拍快照,或者更好,在克隆环境上演练重大升级。回滚一个快照,胜过在午夜调试一个迁移到一半的数据库。
- 把开票工具当成账本。 开票软件追踪的是你开了什么账单;它不是复式记账。这就引出了最后一节。
何时留在托管服务上更明智
自托管不是道德美德,而且在一些情况下付费订阅是明确更好的选择:
- 你的活跃客户不超过五个。 Invoice Ninja 的托管免费档位以零成本、零维护覆盖你的需求。接受它吧。
- 你依赖银行同步和自动对账。 托管工具的 Yodlee 和 GoCardless 集成胜过你自己接的任何东西。
- 电子发票强制要求适用于你。 随着 Peppol 和各国的特定强制要求延续到 2026 年,托管 Enterprise 档位内置的电子发票额度可能比自己实现合规的时间成本更便宜。
- 报税季是你的瓶颈。 如果你真正需要的是 Schedule C 分类和干净的年终报告,QuickBooks Solopreneur 每月 20 美元买的是报税工作流,不只是发票。
- 你不会去做维护。 一台持有客户财务数据、没打补丁的服务器,在所有要紧的方面都比订阅更糟。
开票不是记账——把两者连起来
无论你用什么开票,记住已发送的发票只是财务图景的一半。一张发票记录的是客户欠你什么;你的账本必须记录钱实际何时到账、支付处理商抽走了哪些费用、哪些支出抵消了收入、以及你欠多少预估税。那些把"已开票"当成"已赚到"的自由职业者,会在报税季发现两者的差别——通常很痛苦。
养成一个简单的每月习惯:把每一笔打款与对应的发票核对,把处理商费用记为支出而不是悄悄地进行净额处理,并把业务资金放在单独的账户里,让记录保持清晰。如果你想了解这个习惯背后的复式记账机制,文档会带你搭建一个能适配任何开票工具的账本。
让发票和账本保持同步
当你在优化自由职业账单——无论是否自托管——在那些发票背后维护清晰的财务记录,是让报税季变得无聊的关键。Beancount.io 提供纯文本记账,让你对自己的财务数据拥有完全的透明度和控制力——没有黑箱,没有供应商锁定。免费开始使用,看看为什么开发者和财务专业人士正在转向纯文本记账。





