Skip to content

Repository files navigation

库存系统 V2

轻量、可离线部署的库存查询与录入系统,可登记设备、物品或其他资产。V2 采用 Vue 3 前端与 PHP 8.2 / MySQL 8 API,前端构建产物随服务一起部署,运行时不依赖第三方 CDN。

功能概览

  • 公开库存查询与登录后受限信息查看;移动端可调用相机扫描新旧库存二维码。
  • 登录后通过库存管理列表搜索、录入、修改和删除库存,自动生成不可预测的库存编号。
  • 每位用户拥有个人仓库;管理员可创建组织仓库并授予查看、录入或管理权限,库存可在有权限的仓库之间移动。
  • 普通用户只能查看自己的个人仓库及获授权的组织仓库;管理员默认查看自己的范围,也可切换到全部用户并筛选。
  • 首位初始化用户为不可降级、不可删除的超级管理员;管理员可修改用户名、调整其他用户角色、重设密码和删除用户。个人仓库未清空时禁止删除。
  • 首次通过网页完成管理员初始化;初始化完成后接口自动锁定。
  • Argon2id 密码哈希、服务端会话、CSRF 校验、会话超时与登录限流。
  • 可选 GitHub OAuth 登录:用户先在帐号页绑定现有帐号,系统不自动注册,也不保存 GitHub access token。
  • 同一 IP / 账号在默认 15 分钟内连续失败 10 次会被临时封禁;记录使用升级后的 Error_login 表。
  • 兼容 V1 数据库和已打印二维码,例如 Read.php?key=m72W5F
  • 支持根目录 / 与二级目录 /I_sys/

二维码识别功能随前端一起构建,不请求第三方 CDN,也不会上传照片。HTTPS 或 localhost 下支持实时相机扫码;普通 HTTP 局域网访问可使用“拍照识别”。生产部署仍建议配置 HTTPS。

界面预览

查询首页

查询首页

库存录入

库存录入

库存详情

库存详情

快速开始:Docker

Docker 镜像内已包含 PHP-FPM、Nginx 与构建后的 Vue 前端。首次访问页面时输入 SETUP_KEY,在网页中创建首位管理员;新管理员密码必须为 12–128 个字符。服务端登录会话保存在 inventory_php_sessions 命名卷中,普通的容器重启或重建不会要求重新登录。

外置 MySQL(生产)

cp .env.example .env
# 编辑 .env:填写 MySQL 连接信息和至少 32 位的 SETUP_KEY
docker compose --env-file .env up -d --build

默认访问地址为 http://服务器地址:8080/,可在 .env 中通过 APP_PORT 修改映射端口。若使用已发布镜像而不是服务器本地构建,请在 .env 中设置 IMAGE_NAMEIMAGE_TAG,然后执行:

docker compose --env-file .env pull
docker compose --env-file .env up -d

生产环境应在反向代理处终止 HTTPS,并保留 SESSION_COOKIE_SECURE=true。数据库首次升级需要 CREATEALTERDROP 权限;完成升级后可收紧为日常运行权限。

内置 MySQL(开发或可信局域网)

cp .env.local.example .env.local
# 将所有 CHANGE_ME 替换为本地强密码
docker compose -f docker-compose.yml -f docker-compose.local.yml --env-file .env.local up -d --build

该方式使用命名数据卷保存 MySQL 数据,适合体验与开发,不应替代生产备份或高可用方案。完整配置说明见 Docker 部署文档

更新现有 Docker 部署

从源码构建的生产部署更新后,继续使用原 .env

docker compose --env-file .env up -d --build
docker compose --env-file .env ps

内置 MySQL 环境继续同时指定两个 Compose 文件:

docker compose -f docker-compose.yml -f docker-compose.local.yml --env-file .env.local up -d --build
docker compose -f docker-compose.yml -f docker-compose.local.yml --env-file .env.local ps

无需先执行 down。普通 docker compose down 会保留命名卷;不要在正常更新时使用 down -v,该命令会删除 Compose 管理的 MySQL 数据卷和 PHP Session 卷。首次部署 Session 持久化改动后需要重新登录一次,此后的应用容器重启或重建会保留服务端登录会话;主动退出以及配置的空闲/绝对会话超时仍会使登录失效。

从 V1 升级

保留原数据库并部署 V2 代码即可;首次 API 请求会在迁移锁保护下创建所需结构。V1 用户成功登录后会将旧哈希原子升级为 Argon2id。若 Error_login 不为空,迁移会安全停止,避免覆盖已有记录;请先人工确认其用途。

旧二维码不需要重印:普通访问会跳转至新前端详情页;Read.php?key=...&type=json 仍返回兼容的 JSON。

非 Docker 部署与开发

  1. 复制 Config.new/.Config.php 为根目录 .Config.php,填写数据库、APP_BASE_PATHSETUP_KEY
  2. frontend/ 执行 npm ci && npm run build
  3. 使用 PHP 8.2-FPM 和 Nginx 部署,参考 Nginx 配置说明
  4. 确保 PHP 的 session.save_path 指向 PHP-FPM 可写、且服务重启或版本更新时不会被替换的持久目录;否则服务端登录会话仍可能丢失。

本地构建与检查:

cd frontend && npm ci && npm run build
find . -name '*.php' -not -path './.git/*' -exec php -l {} \;

可选 GitHub 登录

创建 GitHub OAuth App,将回调地址设为:

https://你的域名/部署目录/api/v2.php?route=auth/github/callback

完成系统初始化后,由超级管理员登录前端,进入“GitHub 设置”,填写 Client ID、Client Secret 和不含部署目录的公开访问地址,再启用 GitHub 登录。配置不再从环境变量或 .Config.php 读取;Client Secret 存放于数据库 App_settings,查询接口不会回显原值,普通管理员和普通用户也无权读取或修改。请限制数据库和备份文件的访问权限。

localhost 和本机回环开发外,公开访问地址必须使用 HTTPS;部署目录仍由 APP_BASE_PATH 单独指定。现有本地用户需先在帐号页绑定 GitHub,系统不会通过 GitHub 自动注册新用户,也不会保存 GitHub access token。

发布镜像

推送完整语义化标签会由 GitHub Actions 发布多架构 GHCR 镜像:

git tag v2.0.0
git push origin v2.0.0

镜像发布为 ghcr.io/<owner>/<repository>2.0.02.0latest 标签,支持 amd64 与 arm64。详见 镜像发布说明

About

库存系统 基于 FKUN 的 数字化资产管理

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages