这里是 CAT 文档中心,有任何使用问题都可参考本份文档。

前世今生

本项目是 celaraze/chemex 重构版。原项目 chemex 名称弃用,需要老版本即 chemex IT
资产管理系统的,请访问:https://github.com/celaraze/chemex.git

与 chemex 对比,CAT 有什么不同:

1,CAT 采用全新架构设计,大量提升使用体验的细节,及紧跟最新版本潮流。

2,CAT 大部分会还原 chemex 的基础功能,但部分设计可能由于实际业务需求将被弃用。

3,重做了数据导出、导入功能,现在将提供一个更加人性化的方式。

4,简化了部署需求。

5,增加各类资产编号自动生成规则。

版本策略

版本示例 说明 维护难度
1.0.x 小型功能特性,漏洞修复、BUG 修复、安全更新等。 低,无破坏性变更。
1.x.0 模块的新特性、新功能发布,上游依赖较大变动。 较低,无或者较少的破坏性变更。
x.0.0 新模块、新功能实装,整体架构变动。 中,可能包含适当数量的破坏性变更。

部署

1,执行 docker pull celaraze/cat

2,执行 docker volume create cat_database 使数据库持久化。

3,执行 docker volume create cat_storage 使存储路径持久化,用于保存上传的文件、图片、以及应用产生的日志文件。

4,执行以下命令启动容器:

1
2
3
4
5
# 第一次启动容器,用于构建本地使用环境,包括生成配置文件。
docker run -itd -p 8000:8000 \
-v cat_database:/var/www/database/data \
-v cat_storage:/var/www/storage \
--name cat celaraze/cat

5,执行 docker cp cat:/var/www/.env /path/to/your/local/ 将应用的配置文件从容器中复制出来,配置文件应该存放在宿主机上。

6,停止该容器,并删除,重新执行以下命令启动容器:

1
2
3
4
5
6
# 增加了 .env 配置文件持久化。
docker run -itd -p 8000:8000 \
-v cat_database:/var/www/database/data \
-v cat_storage:/var/www/storage/app/public \
-v /your/path/local/.env:/var/www/.env \
--name cat celaraze/cat

7,访问 http://localhost:8000,使用账户密码 admin@localhost.com / admin 登陆使用。

1,执行 git clone https://github.com/celaraze/cat

2,执行 cd cat && docker-compose up -d

3,同 Docker 部署步骤,需要启动一次容器后并将 .env 文件复制到宿主机上重新挂载启动容器,即可实现配置文件的持久化。

1,执行 git clone https://github.com/celaraze/cat

2,执行 cd cat && docker build -t celaraze/cat . --no-cache

使用二进制模式运行

CAT 尽可能的简化了安装步骤,用户无需额外安装 Web 服务器和数据库,使用 SQLite 实现,请确认服务器已安装 SQLite 3.8.8+
版本,可以使用 sqlite3 version 确认当前版本。
该方案为兼顾高性能 Web 服务和灵活的数据存储模式。

1,执行 git clone https://github.com/celaraze/cat && cd cat

2,复制 .env.example.env,并修改 .env 中的数据存储路径,不用担心,即使不存在 database.sqlite
文件,程序会自动创建它,只需要确认数据库文件的存放路径即可。执行 php artisan cat:install
安装程序,默认账户密码为 admin@localhost.com / admin

3,执行 php artisan serve --host=0.0.0.0 即可通过 https://localhost:8000 访问,此项使用 PHP 内建 Web 服务器,性能一般但稳定可靠。

4,若要在生产环境下使用,执行 wget https://github.com/dunglas/frankenphp/releases/download/v1.0.0/frankenphp-linux-x86_64 -O cat
下载基于 Go 构建的高性能 Web 服务器。 然后执行 chmod +x cat 赋予权限,最后执行 ./cat run 即可通过 http://localhost
访问。值得注意的是,目前 frankenphp 高性能 Web 服务器目前可能存在内存泄露问题,请戳请使用。若问题频发可使用 Nginx 自行部署。

使用宝塔面板

1,从应用商店安装 PHP 8.1 运行环境,同时安装以下扩展:fileinfo opcache intl igbinary

2,从应用商店安装 Nginx 1.24 运行环境。

3,从应用商店安装 MySQL 8.0 运行环境。

4,左侧菜单 网站添加站点 来创建一个网站。域名自行填写,如果没有域名,也可以使用 127.0.0.1 作为域名。FTP
不创建,数据库 创建,自行填写数据库账户密码,PHP 版本选择刚刚安装的 PHP 8.2,最后 提交 来创建站点。

5,左侧菜单 网站,点击刚刚创建的站点根目录后进入文件管理模式。将该目录下所有文件删除,然后点击上方 终端
进入命令行,执行 git clone https://github.com/celaraze/cat.git . 来拉取代码到本地目录。如果提示无法找到 git
命令,执行 sudo apt install git 或者 sudo dnf install git

6,拉取完代码后,仍然在该目录中,复制 .env.example 并粘贴为一个新文件,重命名为 .env。双击 .env
文件,根据文件中提示修改数据库配置及应用相关配置。

7,左侧菜单 网站,点击刚刚创建的网站,在最下方选择 其它设置,选择 composer,先点击右侧升级版本至最新,然后执行 install
命令,镜像源选择 官方,执行身份一定要选择 root 执行,否则将提示扩展缺失。

8,点击上方目录路径中的 wwwroot 进入上一级目录,选择刚刚创建的站点,最右侧点击 权限,保证 755 权限,所有者为 www
,勾选 应用到子目录 后确定保存。

9,左侧菜单 网站,点击刚刚创建的网站,选择 网站目录,选择 /public 保存。

10,左侧菜单 网站,点击刚刚创建的网站,选择 伪静态,选择 laravel5 保存。

11,左侧菜单 网站,点击刚刚创建的网站,选择 配置文件,做以下修改并保存:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 找到下面代码块
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
error_log /dev/null;
access_log /dev/null;
}

location ~ .*\.(js|css)?$
{
expires 12h;
error_log /dev/null;
access_log /dev/null;
}

# 修改为下面代码块
location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
try_files $uri /index.php?$query_string;
access_log off;
log_not_found off;
expires 14d;
}

12,最后,再次进入到网站根目录,执行 php artisan cat:install 根据提示进行安装,重启 PHP-fpmNginx 服务后即可使用
CAT。

手动部署

CAT 是个标准的 Laravel应用程序,也适用于所有的 LNMP/WNMP/DNMP 环境。这里不再赘述。

先决条件如下。

git:用于管理版本,部署和升级必要工具。

PHP:仅支持 PHP8.1 以上版本。

composer:PHP 的包管理工具,用于安装必要的依赖包。

MySQL:数据库引擎,建议 MySQL 8 以上版本,理论上 MariaDB 10.11 以上版本兼容支持。

ext-intl:扩展。

ext-zip:扩展。

ext-pdo:扩展。

ext-mysqli:扩展。

ext-xml:扩展。

ext-sockets:扩展。

ext-curl:扩展。

ext-fileinfo:扩展。

ext-gd:扩展。

ext-opcache:扩展,很重要,可以大幅提升站点性能。

以上扩展安装过程注意版本必须与 PHP 版本一致。

无论何种安装方式,更新都是通过同样的操作原理实现,即使用 GIT 版本控制同步官方代码仓库。

在进行更新前,请务必做好数据库备份。

数据库备份

如果使用了 SQLite 作为数据库(Docker 及一把梭模式默认数据库),那只需要在整个更新过程中不覆盖 .sqlite 文件即可。

如果使用了 MySQL
作为数据库,尽可能的在更新前使用虚拟机快照、宝塔面板数据库备份等工具快速备份,如无条件也可使用 phpmyadmin
或者 mysql dump 将数据库导出至 .sql 文件。

Docker

1,先停止容器并删除容器,不用担心,你的数据库保存在 docker volume 中,执行 docker pull celaraze/cat:latest 拉取最新镜像。

2,执行以下命令启动容器:

1
2
3
4
5
docker run -itd -p 8000:8000 \
-v cat_database:/var/www/database/data \
-v cat_storage:/var/www/storage/app/public \
-v /your/path/local/.env:/var/www/.env \
--name cat celaraze/cat

3,执行 docker exec -it cat /bin/bash 进入容器终端。

4,在容器中执行 php artisan cat:update,确认是否在 /var/www 目录中,默认于此。

二进制模式及手动部署

1,进入网站根目录,执行 git reset --hard && git pull --force 拉取最新代码。

2,仍然在网站根目录,执行 composer update 更新依赖。

3,仍然在网站根目录,执行 php artisan cat:update 更新数据库结构。

移动端

配套移动端应用代码仓库:CAT Uniapp

接口

接口请求 cURL 范文在项目目录的 /cat/apis 中。

接口概述:

接口 请求方法 URL 说明
认证 POST http://localhost:8000/api/auth/login 用户鉴权,使用 Laravel Sanctum 实现,提交用户邮箱和密码后交换获得 token。
获取所有盘点任务 GET http://localhost:8000/api/inventory 携带 token 请求后可获取全部盘点任务。
盘点操作 POST http://localhost:8000/api/inventory/check 携带 token 请求后可执行盘点操作。
获取资产信息 GET http://localhost:8000/api/assets/DEVICE-20231214-00002 携带 token 请求后可通过传入的资产编号查询返回资产信息。

翻译

CAT 通过 Laravel 的 __() 方法实现多国语言翻译,例如 __('cat/device.action.name') 即为设备资产的名称字段翻译。

格式中使用 . 分隔类,使用 _ 分隔词组。

具体格式如下(从上往下即为翻译字符串中从左往右顺序):

字符 必须 说明 可用值
cat 区分 CAT 翻译文件空间 固定值
device 模型名 其它所有模型如 part software 等
action 组件名 action form
name 字段名 其它所有字段如 creator_id description 等
status 状态名 一般用 success failure 等表示状态结果
other 杂项 例如文本提示