InvenTree 开源库存管理系统技术全览:架构、部署与扩展实战指南
2026/9/16 15:46:06 网站建设 项目流程

InvenTree 开源库存管理系统技术全览:架构、部署与扩展实战指南

【免费下载链接】InvenTreeOpen Source Inventory Management System项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree

导读

InvenTree 是一款开源的库存管理系统(Inventory Management System),以Python/Django 后端 + REST API + React 前端 + 可插拔插件体系为核心设计,提供细粒度的低层库存控制(low-level stock control)与零件追踪能力。本文以项目根目录 README.md 为主线,结合 tasks.py、config_template.yaml、docker-compose.yml 等仓库源码,系统讲解其技术架构、部署方式、配置系统与集成扩展能力,帮助你从零掌握 InvenTree 的安装、配置与二次开发。

一、项目定位与核心能力

README 开篇即给出 InvenTree 的精确定位:开源的库存管理系统,提供强大的低层库存控制和零件跟踪能力。其核心设计有三层:

  1. Python/Django 数据库后端:提供基于 Web 的管理界面(admin interface)与 REST API,供外部接口和应用交互;
  2. REST API:官方文档中提供 API 文档,用于与外部系统集成;
  3. 插件系统:强大的插件体系,支持自定义应用与扩展(详见 插件文档)。

从 version.py 可以看到当前仓库的软件版本信息为INVENTREE_SW_VERSION = '1.6.0 dev',最低要求Python 3.12以上(MIN_PYTHON_VERSION = (3, 12)),并提供了inventreeVersion()inventreeApiVersion()inventreeCommitHash()等一系列运行时信息查询函数。

从 tasks.py 的builtin_apps()函数可以清晰地看到系统内置的业务模块:

def builtin_apps(): return [ 'build', 'common', 'company', 'importer', 'machine', 'order', 'part', 'report', 'stock', 'users', 'plugin', 'InvenTree', 'generic', 'machine', 'web', 'scim', ]

这些模块对应着 InvenTree 的核心业务域:part(零件/物料)stock(库存)build(生产/装配)order(采购/销售订单)company(供应商/客户/制造商)report(报表/标签)machine(机器集成)scim(用户供给与身份管理)等。

二、技术栈全景

README 用折叠菜单(Tech Stack)展示了完整的服务器端、数据库、客户端与 DevOps 技术选型,结合仓库实际文件可以逐项验证:

服务端(Server)

  • Python+Django:Web 框架核心;
  • Django REST Framework(DRF):REST API 层;
  • Django Q:后台任务队列,用于运行长时间任务与周期性任务(worker任务即调用qcluster,见 tasks.py);
  • Django-Allauth:认证体系,支持账号、SSO 等。

数据库(Database)

  • PostgreSQLMySQLMariaDBSQLite均可作为数据库后端;
  • Redis作为缓存管理器。

在 config_template.yaml 的database段中,配置模板明确列出engine可取值包括mysqlpostgresqlsqlite3。生产环境 Docker Compose 默认采用 PostgreSQL 17(见 docker-compose.yml),并以 Redis 7 作为缓存(inventree-cache服务)。

客户端(Client)

前端是独立的 React 单页应用,代码位于 src/frontend,从 package.json 可以看到主要依赖:

  • React 19+React Router:UI 框架与路由;
  • Lingui:前端国际化;
  • TanStack Query:服务端状态管理;
  • Zustand:客户端状态管理;
  • Mantine+Mantine Data Table:组件库与数据表格;
  • CodeMirror:代码/模板编辑器支持。

DevOps

  • Docker:官方镜像inventree/inventree
  • Crowdin:社区翻译平台(crowdin.yml);
  • Codecov / SonarCloud / Packager.io:代码覆盖率、代码质量与打包分发。

三、部署方式详解

README 明确给出了三种部署途径:DockerBare Metal(裸机安装)单行安装脚本,并强调"完整安装和设置说明请参考 getting started 指南"。下文结合仓库真实文件逐一展开。

3.1 Docker Compose 生产部署

仓库在 contrib/container/docker-compose.yml 中提供了一套生产可用的编排方案,包含 5 个容器:

服务镜像职责
inventree-dbpostgres:17PostgreSQL 数据库后端
inventree-cacheredis:7-alpineRedis 缓存管理
inventree-serverinventree/inventree:stablegunicorn Web 服务(InvenTree 主进程)
inventree-workerinventree/inventree:stabledjango-q 后台任务进程
inventree-proxycaddy:alpineCaddy 反向代理 + 静态文件服务

关键设计要点(均可在 docker-compose.yml 中验证):

  1. 镜像版本策略:默认使用inventree/inventree:${INVENTREE_TAG:-stable},即 STABLE 稳定版;如需最新开发版,在.env中将INVENTREE_TAG改为latest,或指定具体发布版本号如INVENTREE_TAG=0.7.5
  2. 配置外置原则:README 注释明确要求"你不应该修改 docker-compose.yml 中的任何内容,所有变更通过.env文件完成"。数据库名、用户名、密码分别由INVENTREE_DB_NAMEINVENTREE_DB_USERINVENTREE_DB_PASSWORD强制提供(缺少即报错退出)。
  3. 数据卷持久化:数据卷必须映射到容器内/home/inventree/data${INVENTREE_EXT_VOLUME}:/home/inventree/data:z),Dockerfile 中对应环境变量为INVENTREE_DATA_DIR="/home/inventree/data"
  4. 健康检查链:数据库使用pg_isready、缓存使用redis-cli ping、Web 服务通过invoke server-health --address "http://localhost:${INVENTREE_WEB_PORT:-8000}"检查、Worker 通过invoke worker-health检查心跳文件、代理检查/api/system/health/inventree-server依赖数据库与缓存健康后才启动,形成完整的依赖拓扑。

启动命令(在contrib/container目录下):

cp .env.example .env # 按需修改 .env 配置 docker compose up -d

关于容器内部实现,Dockerfile 采用多阶段构建(multi-stage):inventree_base基础镜像 →builder_stage编译 Python 依赖与前端 →production生产镜像(gunicorn 启动)与dev开发镜像(Django 开发服务器 + Vite 热更新,监听 5173 端口)。生产镜像以gunicorn -c ./gunicorn.conf.py InvenTree.wsgi启动,开发镜像则以invoke dev.server启动。

3.2 单行安装脚本(Packager.io)

README 提供了单行安装命令:

wget -qO install.sh https://get.inventree.org && bash install.sh

该脚本在仓库中对应 contrib/install.sh 与 contrib/installer/src/root_command.sh。从安装器源码可以确认其工作流程:

  1. 发行版检测:读取/etc/os-releaselsb_release等文件检测操作系统;当前仅支持Ubuntu 24.04/26.04Debian 13,对已 EOL 的旧版本(如 Ubuntu 20.04/22.04、Debian 12 及以下)会明确提示不再支持并建议手动安装;
  2. 安装依赖:自动安装curl
  3. 配置软件源:通过packager.io的 GPG 密钥与.list源文件将 InvenTree 打包进 apt 软件源;
  4. 安装sudo apt-get install inventree -y完成安装。

该脚本还支持--no-call(导出NO_CALL=true,用于跳过实际安装回调)与--dry-run(仅打印要执行的命令)两个标志参数。

3.3 裸机安装与 Procfile 进程模型

README 同时给出 Bare Metal 安装途径。仓库根目录的 Procfile 明确了生产环境的进程模型:

web: env/bin/gunicorn --chdir $APP_HOME/src/backend/InvenTree -c src/backend/InvenTree/gunicorn.conf.py InvenTree.wsgi -b 0.0.0.0:$PORT worker: env/bin/python src/backend/InvenTree/manage.py qcluster

web 进程(gunicorn 提供 HTTP 服务)与worker 进程(django-q 集群处理后台任务)分离运行。这与 Docker Compose 中的inventree-server/inventree-worker设计一一对应。

3.4 生命周期管理:invoke 任务体系

仓库通过 tasks.py 中的 invoke 任务统一管理安装、迁移、更新、备份与服务器启动。核心任务包括:

  • invoke install:安装requirements.txt中的依赖,并自动安装插件(可--skip-plugins--dev安装开发依赖,--uv使用 uv 包管理器);
  • invoke migrate:执行数据库迁移(runmigrations+migrate --run-syncdb,可--detect自动生成新迁移),随后自动重建 MPTT 树模型与缩略图;
  • invoke update:一键更新——按顺序执行依赖安装、翻译编译、备份、迁移、前端编译/下载、静态文件收集、设置清理;
  • invoke backup/invoke restore:数据库与媒体文件的备份/恢复(支持--compress--encrypt(GPG)、--clean等选项);
  • invoke server(开发服务器)、invoke gunicorn(生产服务器)、invoke worker(后台任务)、invoke superuser(创建管理员账号);
  • invoke export_records/invoke import_records:以 JSON 格式导出/导入全部数据库记录,导出文件会附带版本元数据(来源版本、API 版本、Django 版本、commit 等),导入时会做严格的元数据校验(版本不匹配会给出INVE-W13警告或INVE-E16错误)。

四、配置系统详解

InvenTree 的配置核心位于 config_template.yaml,这是一个可直接复制为config.yaml使用的模板。需要注意的最重要规则是:环境变量的优先级高于配置文件中的值,例如INVENTREE_DB_NAMEINVENTREE_DEBUG等环境变量会覆盖 YAML 中的同名配置。

4.1 数据库与基础配置

database: # engine: mysql | postgresql | sqlite3 # name: Database name # user: Database username # password: Database password # host: Database host address # port: Database host port # site_url: 'http://localhost:8000' # 或环境变量 INVENTREE_SITE_URL debug: False # 生产环境必须为 False

4.2 日志与调试

模板提供了细粒度的日志控制:

log_level: WARNING # 可选 DEBUG / INFO / WARNING / ERROR / CRITICAL json_log: False # 是否以 JSON 格式输出日志(INVENTREE_JSON_LOG) db_logging: False # 数据库级日志 write_log: False # 写入日志文件(INVENTREE_WRITE_LOG) console_log: True # 输出到 stdout

同时还有debug_querycountdebug_silkdebug_silk_profilingdebug_shell等进阶调试开关。

4.3 邮件服务

支持三种邮件后端:SMTP、Console、Anymail。对应的 YAML 配置段(所有选项均可使用INVENTREE_EMAIL_前缀环境变量覆盖):

email: sender: '' # backend: 'django.core.mail.backends.smtp.EmailBackend' host: '' port: 25 username: '' password: '' tls: False ssl: False

4.4 插件系统

插件是 InvenTree 最重要的扩展机制:

plugins_enabled: False # 或环境变量 INVENTREE_PLUGINS_ENABLED # plugin_noinstall: True # plugin_file: '/path/to/plugins.txt' # plugin_dir: '/path/to/plugins/'

从 tasks.py 可以看到invoke plugins会读取plugins.txt文件安装全部插件,并执行collectplugins收集插件静态文件。插件生态的完整介绍见 插件文档 与 mixins 参考,支持 API、事件、导出、标签、机器、邮件、通知、报表、定时任务、UI 等多种 Mixin 扩展点。

4.5 存储后端

storage: target: local # 可选 local / s3 / sftp

支持本地文件系统、S3 兼容对象存储(含access_keybucket_nameregion_nameendpoint_url等参数)以及 SFTP 远程存储。

4.6 后台任务与缓存

background: workers: 4 timeout: 90 max_attempts: 5 cache: enabled: false host: 'inventree-cache' port: 6379

background段控制 django-q 后台 worker 的并发数与超时,cache段则配置 Redis 外部缓存。

4.7 安全相关配置

  • allowed_hosts:DjangoALLOWED_HOSTS,模板默认允许所有主机('*'),但注释明确提示"这不安全!";
  • trusted_origins:反向代理场景下的CSRF_TRUSTED_ORIGINS
  • login_attempts: 5login_confirm_days: 3:登录尝试次数与确认时限;
  • remote_login_enabled:远程/代理登录(需谨慎配置);
  • cors:跨域设置(基于 django-cors-headers)。

4.8 其他配置

  • language: en-ustimezone: UTC:默认语言与时区;
  • sentry_enabled: False:错误上报(可自定义sentry_dsn);
  • auto_update: False:自动迁移开关;
  • admin_user/admin_email/admin_password:首次启动自动创建管理员(也可从admin_password_file读取);
  • customize:管理后台标题、登录提示、Logo 等 UI 定制;
  • social_backends/ldap:SSO 与 LDAP 认证。

五、集成与扩展

README 强调 InvenTree 被设计为可扩展(extensible)的系统,并提供了多种与外部应用集成或添加自定义插件的途径:

  1. InvenTree API:完整的 REST API(详见 API 文档 与 API Schema),支持认证、分页、过滤等;
  2. Python 模块:官方 Python 客户端库,示例见 Python 使用示例;
  3. 插件接口invoke plugins安装管理插件,插件可横跨 API、事件、报表、机器、标签、邮件、通知、UI 等多个维度扩展;
  4. 第三方工具:通过 API 与外部系统(如 ERP、条形码扫描、电子商务平台)对接。

值得留意的是仓库还提供 metadata 文档,说明 InvenTree 基于 OpenAPI 的 Schema 化 API 设计,便于工具链自动生成客户端。

六、配套移动应用

README 明确指出 InvenTree 有配套的移动端 App(companion mobile app),允许用户随时随地访问库存控制信息与功能,上架于 Google Play(Android)与 Apple App Store(iOS)。移动端通过 REST API 与后端连接,相关接入说明见 App 文档。

七、安全策略与社区治理

  • 行为准则:CODE_OF_CONDUCT.md 承诺为所有用户提供安全友好的环境;
  • 安全策略:SECURITY.md 遵循行业最佳实践,项目还提供专门的安全文档页;
  • 贡献指南:CONTRIBUTING.md 欢迎社区贡献;开发相关指引见 开发文档;
  • 翻译:Web 应用的多语言翻译通过 Crowdin 社区贡献完成,仓库中 locale 目录 已包含 40+ 语言的.po翻译文件;
  • 许可证:项目以MIT License分发,见 LICENSE。

八、如何继续深入

如果你希望进一步研究 InvenTree:

  • 快速体验:使用单行安装脚本或docker compose up -d部署一个实例,体验零件管理、库存调整、采购/销售订单、BOM 与生产装配等核心流程;
  • 阅读源码入口:后端入口为 manage.py,配置解析在 config.py,API 路由定义在 urls.py;
  • 阅读测试:各业务模块(part、stock、order、company、build 等)均配有test_api.py/tests.py,例如 part 模块测试,可作为理解接口行为的权威参考;
  • 前端开发:frontend README 说明了 React 前端的技术组织方式,router.tsx 展示了页面路由结构。

小结

InvenTree 是一套以 Django/DRF 为后端、React 为前端、django-q 处理后台任务、支持多数据库与对象存储、具备完整 REST API 与插件生态的开源库存管理系统。其核心优势在于清晰的领域模块划分、灵活的配置体系(YAML + 环境变量双重驱动)与多种开箱即用的部署方案。无论你是想快速搭建个人/团队库存管理系统,还是希望基于其 API 与插件机制构建深度定制的物料管理体系,本文涉及的架构、部署与配置知识都是直接可用的起点。

【免费下载链接】InvenTreeOpen Source Inventory Management System项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询