InvenTree 开源库存管理系统完整指南:Docker 部署与物料跟踪全流程 30 分钟上手
【免费下载链接】InvenTreeOpen Source Inventory Management System项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree
当你的料架超过几百种零件时,Excel 就不再是工具,而是风险:数量对不上、找不到货、采购靠聊天记录。这时你需要一套专门的系统。InvenTree 是一个开源库存管理系统,覆盖物料跟踪、条码管理、采购订单到库存盘点的完整链路,后端基于 Django,前端基于 React,免费可自托管。
🧭 选型:InvenTree 适合谁,不适合谁
先说清楚边界,避免装完才发现不对路。
适合的场景:中小企业、创客工作室、研发团队,SKU 在几百到几万之间,有仓库或多位置管理需求,多人协作但预算有限。它提供零件 BOM、采购订单、销售订单、生产订单、库存追踪这些"中间层"能力,且完全开放源码,你可以改。
不太适合的场景:如果你的公司已经有一套深度绑定财务和生产的重型 ERP,InvenTree 大概率只是重复建设;如果你只有二三十种物料,认真维护的 Excel 表格反而更省。
与 Excel 的分工:Excel 擅长临时计算和一次性分析,但没有操作审计、没有权限控制、多人同时编辑会互相覆盖。InvenTree 里每次库存变动都会生成一条追踪记录(谁、什么时候、从哪个位置、动了多少),这是电子表格给不了的。
与专业 ERP 的分工:ERP 强在财务总账和生产计划,但采购和库存模块的部署成本不低。常见做法是 InvenTree 先承担物料主数据、采购和库存这几块,跑顺了再通过 REST API 与 ERP 对账,而不是直接替换。
🔁 业务流程视角:从采购到出库,功能串讲一遍
把 InvenTree 的功能按真实业务流走一遍,比看功能清单更清楚它到底帮你做什么。
采购:先建供应商,再下采购单
第一步不是在下单界面找按钮,而是把数据基础建好。在 Purchasing 模块中维护供应商列表,再为零件挂上供应商部件(Supplier Part),记录不同数量档位的阶梯价格。这样下采购单时选的是带价格的供应商部件,而不是手填单价,比价和成本核算都在数据里。
采购订单支持复制历史订单(重复采购场景非常快)、设置收货计划日期、关联项目代码做成本归集。
入库:收货即建库存项,顺手打条码
采购单收货后,系统自动生成库存项(Stock Item)并挂到指定库位。这里有一个值得坚持的习惯:收货后立刻打印条码标签。InvenTree 支持 QR Code、Code 128 等常见格式,标签模板可以在系统内在线编辑。之后所有移动、消耗、盘点都以扫条码为准,手填库位和批号的机会降到最少。
在库:分类树、转移、盘点
分类体系建议按业务逻辑分两到三层,比如 Electronics → Connectors → Pin Headers,每级写一句简短描述。层级别贪多,超过四层之后没人记得住,检索效率反而下降。
在库日常操作集中在库存项表格的 Stock Options 下拉菜单里:转移(Move)、增减(Add/Remove)、盘点(Count)、合并(Merge)。转移操作支持一次勾选多个库存项,分别指定目标位置后批量提交,每个操作都留追踪事件。
盘点是库存系统最容易吃灰的功能,但 InvenTree 的 Count Stock 设计得比较省事:当前系统数量自动预填,你只改实盘数字,差异项用状态标签(OK / Attention Needed)一眼区分,盘点完还能在同一操作里顺带把货物移到新库位。有保质期的物料(胶水、电池、化学品)可以开启有效期管理,临期项会在列表中标出来。
出库:销售单与生产单驱动扣减
出库不是直接改数量,而是由单据驱动。销售订单或生产订单(Build Order)会先"分配"库存项,分配完成后才允许发货或生产;发货后库存自动扣减,未分配的缺口在订单页面上有明确提示。生产场景下还能直接为待分配的物料批量打印标签,配单、领料一次完成。
🐳 部署:Docker 与手动安装两条路线
Docker 一键部署
生产环境推荐 Docker。仓库的 contrib/container/ 目录下提供了现成的 compose 配方,包含五个容器:PostgreSQL(数据库)、gunicorn(Web 服务,默认监听 8000 端口)、django-q(后台任务)、Caddy(反代,对外 80/443)、Redis(缓存,可选)。
git clone https://gitcode.com/GitHub_Trending/in/InvenTree cd InvenTree/contrib/container编辑.env文件,至少要改三处:INVENTREE_EXT_VOLUME指向本机持久化目录,INVENTREE_DB_USER/INVENTREE_DB_PASSWORD换成你自己的强密码。然后初始化数据库、建管理员、启动:
docker compose run --rm inventree-server invoke update docker compose run inventree-server invoke superuser docker compose up -d默认在http://inventree.localhost打开登录页。所有持久化数据(数据库、上传文件、配置)都在INVENTREE_EXT_VOLUME这一个卷里,备份时拷走这个目录即可。
手动安装
需要完全控制运行环境时走手动路线,要求一台 Linux 机器、Python 3 和 PostgreSQL(或 MySQL)。流程是:装系统依赖 → 建独立用户 →git clone源码 → 建虚拟环境 →pip install数据库驱动 → 创建数据库 →invoke install装依赖 →invoke update建表 →invoke superuser建管理员。完整步骤见官方文档 docs/docs/start/install.md。这条路升级、排障都要你自己跟,但每一步都透明可控。
📋 上手清单:初始化配置 + 移动端连接
服务起来后,按这个顺序过一遍,大约一小时:
- 管理员与权限:
superuser建好的账号登录后,进 Admin 配置用户组与角色,按"仓管、采购、只读"划分权限,而不是人人超管。 - 基础设置:公司信息、默认货币、时区,这些在 Setting 模块里改;邮件服务器配置好之后,低库存提醒、订单状态变更通知才有出口。
- 配置文件:Docker 部署下配置在数据卷的
config.yaml;手动安装可参考模板 src/backend/InvenTree/config_template.yaml。改完重启容器生效。 - 移动端连接:手机安装 InvenTree App,新建服务器档案,填服务器地址(带端口)、用户名、密码,连接成功后档案旁显示绿色对勾。App 支持多服务器档案切换,扫码出入库、查看库存、跟踪订单都可以离线发起、联网同步。
🔌 进阶:插件、REST API 与前端定制
三条扩展路径,按需取用。
插件系统:仓库 plugins/ 目录内置了三十多个插件,覆盖条码扫描(Digi-Key、LCSC 等厂商条码解析)、货币汇率、标签打印、邮件与 Slack 通知、报表导出等。Docker 部署下装插件很简单:把插件放进数据卷的plugins/目录,或写进plugins.txt清单,重启容器即加载。想写自己的插件,文档在 docs/docs/plugins/,事件钩子和 Mixin 机制都比较完整。
REST API:后端基于 Django REST Framework,所有界面操作背后都是/api/...端点,浏览器直接访问根路径可以看交互式接口文档。与 ERP 对账、自建看板、定时拉库存快照,都走这条路。
前端定制:React 前端源码在 src/frontend/,主题、表格列、表单组件都是可插拔的,想贴合企业视觉风格或有特殊交互需求,从这里改比 hack 插件界面直接得多。
🧯 踩坑排查:五个高频故障场景
compose 直接拒绝启动,报变量未定义?.env里INVENTREE_DB_USER、INVENTREE_DB_PASSWORD、INVENTREE_DB_NAME、INVENTREE_EXT_VOLUME是必填项,缺一个 compose 就起不来。报错信息会写明缺哪个变量,照填即可。
容器反复重启,docker compose ps显示 unhealthy?依次看docker compose logs inventree-db、inventree-server。常见原因是数据卷目录权限不对(Linux 下用 root 建目录后 chown 给运行用户),或secret_key.txt与数据库不在同一个卷里,导致 server 与 worker 各用一套密钥,会话互相失效。
80/443 或 8000 端口被占用?改.env中的INVENTREE_HTTP_PORT、INVENTREE_HTTPS_PORT重新映射。注意 Automatic HTTPS(Caddy 自动签 Let's Encrypt 证书)依赖标准 80/443,换了端口就只能在外部反代层终止 SSL。
局域网其他设备打不开、App 连不上?多半是INVENTREE_SITE_URL还写的是inventree.localhost。把它改成局域网 IP 或域名,docker compose down && docker compose up -d重建后再试,并确认防火墙放行了映射端口。
Excel 导入失败,数据错行或整批拒绝?别直接导全量。先拿 10 行小文件走一遍导入会话,检查列映射(mapping)是否正确,确认成功后再批量导入。InvenTree 的导入器支持先预览、后提交,出错批次可以单独重导,不会污染已入库数据。
下一步
- 本周:按 Docker 路线把环境跑起来,导入你真实在用的 50 种零件和 3 家供应商,别用演示数据练手。
- 下周:给全部在库库存项打印条码标签,跑第一次 Count Stock 盘点,顺手校准账面数量。
- 第三周:挑一个对接需求(比如每日库存快照推给报表系统),用 REST API 写个最小脚本验证联通,再决定要不要上插件。
【免费下载链接】InvenTreeOpen Source Inventory Management System项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考