源码系统概览
1. 文章正文
InvoicePlane 是一款基于 PHP 与 CodeIgniter 框架构建的自托管开源发票与客户管理系统。它把报价、发票、客户、收款、产品、报表等环节集中到一个 Web 后台,数据完全保存在用户自己的服务器上,适合中小企业做财务系统的私有化部署。源码遵循 MIT 协议,可在官网与 GitHub 自由下载。
这套系统起源于 Kovah.de 团队在 2014 年从 FusionInvoice 接手的中文以外的多语言版本,经过十年迭代,目前在 193 个国家累计下载量已经超过 10 万次。
它不依赖任何 SaaS 计费,数据库使用 MySQL 或 MariaDB,Web 端基于 Bootstrap 3 + jQuery,前端可视化模板支持自定义 PDF 样式,默认语言文件通过 Crowdin 协作翻译,中文界面开箱即用。
对于需要离线管理发票、对接 Stripe 或 PayPal 收款、又能完全掌控财务数据的小型团队来说,InvoicePlane 提供了一个不绑死供应商的财务系统源码方案。
2. 源码简介
InvoicePlane 的源码根目录下分为 application、assets、resources、storage 四大区域。application 目录是 CodeIgniter 3 的应用核心,包含 controllers、models、views 三个层级的完整模块化代码。
代码以 modules 形式组织,共 31 个业务模块,涵盖 clients、invoices、quotes、payments、products、projects、tasks、reports、users、settings、tax_rates、custom_fields、import、setup 等。
数据库 schema 由 application/modules/setup/sql 下的 44 个 SQL 文件按版本号命名,从 000_1.0.0.sql 一直演进到 037_1.6.0.sql,完整记录了从初版到当前 1.7.2 候选版的字段变更与索引优化。
composer.json 显示它依赖 endroid/qr-code、ezyang/htmlpurifier、guzzlehttp/guzzle、moneyphp/money、mpdf/mpdf、phpmailer/phpmailer、pocketarc/codeigniter 3.4、setasign/fpdf、stripe/stripe-php 等成熟库,均为业内主流开源方案。
前端 assets 目录包含 SCSS、JS 与图片资源,storage 目录用于缓存、日志、上传文件,ipconfig.php.example 是配置文件模板,README.md 同时收录了英文原版与中文汉化版的双段说明,方便国内开发者直接使用。
3. 适用场景
InvoicePlane 适合需要本地化部署发票系统的中小企业、SOHO 工作室、咨询服务团队、自媒体运营者。
对于不愿把客户清单和开票记录交给第三方 SaaS 的企业,InvoicePlane 把数据库放在自家服务器或内网环境,数据主权完全属于使用者。
在跨境电商、独立开发者、设计师工作室等场景中,InvoicePlane 支持多币种(moneyphp/money)、多语言、自定义 PDF 模板,可以输出包含 logo、签名、二维码的发票 PDF。
对正在做内部财务工具二开的工程师来说,源码结构清晰、CodeIgniter 上手成本低,二次开发门槛远低于从零实现一套发票系统。
4. 功能亮点
支持完整的报价-发票-收款业务链路,客户档案独立维护,支持自定义字段、备注、交易历史、增值税号、税号等扩展属性。
发票模块支持草稿、已发送、已查看、已批准、已付款、逾期、已作废七种状态,每张发票可关联多个产品条目,自动计算小计、税额、折扣、合计金额。
收款模块允许手动登记付款记录、对接 Stripe 与 PayPal 网关、提供 eInvoices 电子发票 XML 模板(支持欧盟标准),通过 setasign/fpdf 与 setasign/fpdi 生成可定制的 PDF 文件。
报表模块提供按客户、按时间、按产品分类的销售汇总,以及发票账龄分析、付款历史、按年度统计等 6 个内置报表视图。
权限层面支持管理员与普通用户两类角色,多语言界面通过 Crowdin 协作翻译,默认附带 25 种语言,中文翻译完成度较高。
支持 Docker 一键启动,docker compose up -d 即可在 http://localhost:4895 跑起来,数据库使用 MariaDB 10.2 兼容版本。
By the numbers:597 个源文件、386 个 PHP 脚本、44 个 SQL 版本、36 张业务表、31 个业务模块、4 套内置 PDF 模板、25 种 UI 语言、10 万+ GitHub 下载量。
| 对比维度 | InvoicePlane(自托管) | FreshBooks(SaaS) | Excel 手工记账 |
|---|---|---|---|
| 部署方式 | 自有服务器,Docker/传统 LAMP | 厂商云端,月费订阅 | 本地 Office 文件 |
| 数据主权 | 完全自主 | 受厂商托管 | 本地文件 |
| 多用户协作 | 支持,基于角色 | 支持,按席位付费 | 受限 |
| PDF 模板自定义 | 支持,白标 | 受限 | 无 |
| 对外收款网关 | Stripe / PayPal | 内置 | 无 |
| 费用 | 免费(MIT) | 每月每席位计费 | 一次性软件成本 |
| 二开自由度 | 源码级修改 | API 受限 | VBA 宏 |
技术架构与部署指南
5. 技术栈与运行环境
后端语言:PHP 7.4 起步,推荐 8.0+ 至 8.3,8.4 兼容(以 8.2 为官方 CI 基线版本)。
Web 框架:pocketarc/codeigniter 3.4,即 CodeIgniter 3 系列的衍生维护版本,延续 CI3 的轻量级 MVC 架构。
数据库:MySQL 5.7+ 或 MariaDB 10.2+,使用 MyISAM 引擎(默认),亦可迁移至 InnoDB,共 36 张业务表。
前端 UI:Bootstrap 3.4 + jQuery 3.7 + jQuery UI 1.14 + Font Awesome 4.7,使用 Grunt 1.6 做 SCSS 编译与 JS 打包。
扩展依赖:Guzzle 7 处理 HTTP 通信、PHPMailer 6 发送邮件、mPDF 8 与 FPDF 1.9 生成 PDF、endroid/qr-code 生成二维码、smhg/sepa-qr-data 欧洲 SEPA 付款二维码、Stripe PHP 14 处理在线收款、vlucas/phpdotenv 加载环境变量。
容器化:resources/docker/ 目录提供 Containerfile 多阶段构建,在 PHP 8.2 Apache 镜像中完成 composer install 与 yarn build,默认端口 4895。
6. 安装与部署提示
Docker 方式(推荐开发与测试):执行 git clone https://github.com/InvoicePlane/InvoicePlane.git,然后进入项目目录运行 docker compose up -d –build,完成后访问 http://localhost:4895 即可使用默认管理员账号登录。
传统 LAMP 部署:从 invoiceplane.com 官网下载最新 zip 包,解压到 Web 根目录,复制 ipconfig.php.example 为 ipconfig.php,在其中填写数据库地址、端口、库名、用户名、密码与 BASE_URL。
浏览器访问 http://your-domain.com/index.php/setup 进入安装向导,按提示填入数据库连接信息,系统会自动执行 44 个版本 SQL 创建表结构,并生成初始管理员账号。
隐藏 index.php:在 Apache 上启用 mod_rewrite,把 ipconfig.php 中 REMOVE_INDEXPHP 设为 true,并将根目录的 htaccess 文件重命名为 .htaccess;Nginx 则需在 server 块中增加 try_files $uri $uri/ /index.php?$query_string 规则。
会话与缓存:默认 session 保存于 sys_get_temp_dir(),生产环境建议在 ipconfig.php 中通过 SESS_SAVE_PATH 指向 /var/lib/invoiceplane/storage/framework/sessions 这样的持久化目录。
7. 截图与演示说明
以下截图来自 GitHub 原版 InvoicePlane/InvoicePlane 仓库,均为无水印原图,登录官方 demo 站 demo.invoiceplane.com 截取,凭据为 guest@invoiceplane.com / demopassword。

仪表盘(Dashboard)是 InvoicePlane 的总览入口,集中展示当月报价、发票、逾期金额汇总,以及最近 10 条报价与发票记录。

发票列表(Invoices)按状态标签分组,支持草稿、已发送、已查看、已付款、逾期五种筛选,可一键新建发票并通过邮件发送给客户。

客户管理(Clients)模块支持批量导入 CSV、自定义字段、客户备注,每个客户有独立的交易历史与联系信息。

报价单(Quotes)同样支持草稿-已发送-已批准-已拒绝-已取消的完整状态流转,可一键转换为发票。

报表(Reports)模块提供按客户、按时间、按年度的销售汇总,支持导出 PDF 给管理层审阅。

收款记录(Payments)允许手动登记银行转账、现金、PayPal、Stripe 等多种支付方式,并自动匹配对应发票。
8. 常见问题
问:InvoicePlane 是否需要付费?
整套系统以 MIT 协议开源,可以从 invoiceplane.com 官网或 GitHub Releases 免费下载,商业使用也无需授权费。
问:能否用中文界面?
系统默认附带 25 种语言,中文翻译在 application/language/chinese/ 目录下,首次安装后可在用户设置里切换为简体中文。
问:支持哪些在线支付方式?
官方集成 Stripe 与 PayPal 两个网关,可通过 composer 引入 stripe/stripe-php 14 完成卡支付,通过 application/modules/gateways/ 下的控制器实现 PayPal IPN 回调。
问:能否去掉 URL 里的 index.php?
可以。在 ipconfig.php 中把 REMOVE_INDEXPHP 设为 true,把根目录的 htaccess 文件重命名为 .htaccess,Apache 启用 mod_rewrite,Nginx 增加对应重写规则即可。
问:支持多公司多账套吗?
默认单账套,如需多公司可复制一份 application 目录并通过不同的 BASE_URL 指向同一数据库的多套表前缀实现。
问:PDF 模板可以自定义吗?
从 1.7.2 起,自定义模板名通过 ipconfig.php 的白名单机制加入,文件系统不会被扫描,杜绝远程代码执行风险。
问:如何从旧版本升级?
在升级前阅读 .github/CHANGELOG.md 与 .github/docs/UPGRADE.md,按照版本号顺序逐个应用 application/modules/setup/sql/ 下的 SQL 脚本,确认 composer 依赖升级无破坏性变更后再切换线上服务。
9. 安全风险提示
InvoicePlane 在 1.6.0 中集中修复了一批安全漏洞,涉及支付模块、文件上传、SQL 查询等环节,旧版本(1.5.x 及以前)不建议继续在公网环境运行。
如果使用 Docker 部署,官方 compose.yml 仅供本地开发测试,其中包含固定的 ENCRYPTION_KEY 与数据库密码,生产环境必须参考 .github/docs/CONTAINER_DEPLOYMENT.md 改用环境变量注入并删除 ENCRYPTION_KEY 默认值。
自定义模板从 1.7.2 起采用白名单机制,任何包含 ..、绝对路径、PHP 文件扩展名的模板路径都会被拒绝加载,从机制上杜绝通过模板目录遍历实现远程代码执行的可能性。
建议关闭 PHP display_errors、限制 uploads 目录的执行权限、设置正确的文件属主,定期把 storage 与 uploads 目录纳入备份计划。
发现问题后请通过 GitHub Security Advisory(https://github.com/InvoicePlane/InvoicePlane/security/advisories/new) 私密报告,不要在公开 Issue 中暴露漏洞细节。
10. 下载说明
本文提供的源码来自 InvoicePlane 1.7.2 候选版(v1.7.2-rc-1),与 GitHub 仓库 master 分支保持一致,代码未做任何二次修改。
如需获取最新稳定版,推荐从 invoiceplane.com 官网下载官方打包的 zip 包(包含字体、第三方插件等),或者从 GitHub Releases 拉取带 tag 的源码压缩包。
开发者可以直接 git clone 仓库,使用 docker compose up -d –build 拉起开发环境,或者参考 .github/docs/INSTALLATION.md 完成传统 LAMP 部署。
遇到安装或使用问题,可在 Discord(https://discord.gg/PPzD2hTrXt)与社区实时交流,或者在 GitHub Issues 提交问题,附上复现步骤与环境信息。
GitHub项目开源地址:https://github.com/InvoicePlane/InvoicePlane