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 的精确定位:开源的库存管理系统,提供强大的低层库存控制和零件跟踪能力。其核心设计有三层:
- Python/Django 数据库后端:提供基于 Web 的管理界面(admin interface)与 REST API,供外部接口和应用交互;
- REST API:官方文档中提供 API 文档,用于与外部系统集成;
- 插件系统:强大的插件体系,支持自定义应用与扩展(详见 插件文档)。
从 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)
- PostgreSQL、MySQL、MariaDB、SQLite均可作为数据库后端;
- Redis作为缓存管理器。
在 config_template.yaml 的database段中,配置模板明确列出engine可取值包括mysql、postgresql、sqlite3。生产环境 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 明确给出了三种部署途径:Docker、Bare Metal(裸机安装)和单行安装脚本,并强调"完整安装和设置说明请参考 getting started 指南"。下文结合仓库真实文件逐一展开。
3.1 Docker Compose 生产部署
仓库在 contrib/container/docker-compose.yml 中提供了一套生产可用的编排方案,包含 5 个容器:
| 服务 | 镜像 | 职责 |
|---|---|---|
inventree-db | postgres:17 | PostgreSQL 数据库后端 |
inventree-cache | redis:7-alpine | Redis 缓存管理 |
inventree-server | inventree/inventree:stable | gunicorn Web 服务(InvenTree 主进程) |
inventree-worker | inventree/inventree:stable | django-q 后台任务进程 |
inventree-proxy | caddy:alpine | Caddy 反向代理 + 静态文件服务 |
关键设计要点(均可在 docker-compose.yml 中验证):
- 镜像版本策略:默认使用
inventree/inventree:${INVENTREE_TAG:-stable},即 STABLE 稳定版;如需最新开发版,在.env中将INVENTREE_TAG改为latest,或指定具体发布版本号如INVENTREE_TAG=0.7.5。 - 配置外置原则:README 注释明确要求"你不应该修改 docker-compose.yml 中的任何内容,所有变更通过
.env文件完成"。数据库名、用户名、密码分别由INVENTREE_DB_NAME、INVENTREE_DB_USER、INVENTREE_DB_PASSWORD强制提供(缺少即报错退出)。 - 数据卷持久化:数据卷必须映射到容器内
/home/inventree/data(${INVENTREE_EXT_VOLUME}:/home/inventree/data:z),Dockerfile 中对应环境变量为INVENTREE_DATA_DIR="/home/inventree/data"。 - 健康检查链:数据库使用
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。从安装器源码可以确认其工作流程:
- 发行版检测:读取
/etc/os-release、lsb_release等文件检测操作系统;当前仅支持Ubuntu 24.04/26.04与Debian 13,对已 EOL 的旧版本(如 Ubuntu 20.04/22.04、Debian 12 及以下)会明确提示不再支持并建议手动安装; - 安装依赖:自动安装
curl; - 配置软件源:通过
packager.io的 GPG 密钥与.list源文件将 InvenTree 打包进 apt 软件源; - 安装:
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_NAME、INVENTREE_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 # 生产环境必须为 False4.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_querycount、debug_silk、debug_silk_profiling、debug_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: False4.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_key、bucket_name、region_name、endpoint_url等参数)以及 SFTP 远程存储。
4.6 后台任务与缓存
background: workers: 4 timeout: 90 max_attempts: 5 cache: enabled: false host: 'inventree-cache' port: 6379background段控制 django-q 后台 worker 的并发数与超时,cache段则配置 Redis 外部缓存。
4.7 安全相关配置
allowed_hosts:DjangoALLOWED_HOSTS,模板默认允许所有主机('*'),但注释明确提示"这不安全!";trusted_origins:反向代理场景下的CSRF_TRUSTED_ORIGINS;login_attempts: 5与login_confirm_days: 3:登录尝试次数与确认时限;remote_login_enabled:远程/代理登录(需谨慎配置);cors:跨域设置(基于 django-cors-headers)。
4.8 其他配置
language: en-us、timezone: 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)的系统,并提供了多种与外部应用集成或添加自定义插件的途径:
- InvenTree API:完整的 REST API(详见 API 文档 与 API Schema),支持认证、分页、过滤等;
- Python 模块:官方 Python 客户端库,示例见 Python 使用示例;
- 插件接口:
invoke plugins安装管理插件,插件可横跨 API、事件、报表、机器、标签、邮件、通知、UI 等多个维度扩展; - 第三方工具:通过 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),仅供参考