# IMAIWORK-SAAS **Repository Path**: jicky168/imaisaas ## Basic Information - **Project Name**: IMAIWORK-SAAS - **Description**: IMAIWORK-SAAS - **Primary Language**: PHP - **License**: AGPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-09-11 - **Last Updated**: 2026-09-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IMAI_CENTER 多端应用引擎(Laravel 13 + Octane / FrankenPHP + MySQL 8)。 代码与设计规范统一维护在 [AGENTS.md](AGENTS.md),包含公共组件、搜索筛选、交互与验证要求。 ## 部署 给站长部署一套:见 [docs/deploy.md](docs/deploy.md)。一条命令: ```bash bash install.sh --url https://你的域名 --admin laoban ``` 不想用 Docker(自己装 PHP + MySQL + nginx,或者用宝塔面板): 见 [docs/deploy-native.md](docs/deploy-native.md)。 ## 本地开发 容器: | 容器 | 用途 | 端口 | |---|---|---| | `imai-center-app` | 应用(FrankenPHP + Octane) | 8300 | | `mysql-imai-center` | MySQL 8 | 内网 3306 | ```bash docker exec imai-center-app php artisan migrate --seed ``` 默认账号 `admin` / `imaicenter123`(创始人)。访问 http://localhost:8300 。 改动 PHP 代码后 Octane 常驻进程不会自动加载新路由/中间件,需要: ```bash docker restart imai-center-app ``` ## 测试 测试跑在**真实 MySQL** 上(库名 `imai_center_test`),不用 SQLite —— 因为项目里有 `information_schema` 查询、`date()` 分组等 MySQL 方言,SQLite 会把这类问题掩盖掉。 首次需要建库并授权: ```bash docker exec mysql-imai-center sh -c 'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "CREATE DATABASE IF NOT EXISTS imai_center_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON imai_center_test.* TO \"mengine\"@\"%\"; FLUSH PRIVILEGES;"' ``` 然后: ```bash docker exec imai-center-app php artisan test ``` ## 依赖管理 镜像里默认没有 composer 与 unzip。需要装包时先补上: ```bash docker exec imai-center-app sh -c 'apt-get update -qq && apt-get install -y -qq unzip && cd /tmp && php -r "copy(\"https://getcomposer.org/installer\", \"ci.php\");" && php ci.php --install-dir=/usr/local/bin --filename=composer --quiet' ``` 后台「站点设置 → 依赖审计」不依赖 composer 二进制 —— 它直接读 `composer.lock` 再查 Packagist 的安全公告接口(`composer audit` 用的同一个源), 并用 `composer/semver` 按实际安装版本过滤,避免把早已修复的历史公告也报出来。 ## 后台调度 定时群发、粉丝日快照、日志清理由调度器驱动,需常驻: ```bash docker exec -d imai-center-app php artisan schedule:work ``` 任务的启停与周期在后台「站点设置 → 后台任务」中调整,改动会即时反映到 `schedule:list`。 ## 部署时要单独同步的东西 `storage/app/.gitignore` 是 `*`,所以**上传的素材、生成的备份都不进仓库**—— 这是刻意的:备份里有全部租户的会员手机号与后台密码哈希,不该躺在代码仓库里。 代价是新机器 clone 下来 `storage/app` 是空的,需要另行同步: | 路径 | 内容 | 丢了会怎样 | |---|---|---| | `storage/app/public/materials/` | 各平台上传的素材原文件 | 素材库里图还在、点开 404 | | `storage/app/backups/` | 数据库备份 | 没有退路 | | `.env` 里的 `APP_KEY` | **凭据与备份的解密钥匙** | 所有租户的 AppSecret / 私钥、以及全部备份,永久打不开 | `APP_KEY` 尤其要单独存到数据库备份**之外**的地方(密码管理器 / 密钥托管)。 后台「站点设置 → 系统自检」里有一项专门盯这件事。 首次部署还要建软链,否则素材的公开 URL 打不开: ```bash docker exec imai-center-app php artisan storage:link ``` ## 目录约定 - `app/Support/ConsoleMenu.php` —— 控制台导航的单一数据源(一级维度 + 二级分组) - `app/Modules/ModuleBase.php` —— 应用模块基类;模块放在 `modules//` - `app/Services/` —— 微信网关、统计、模块管理、备份、环境检测 ## 写一个模块 平台的能力主要靠模块扩展。先生成一个能跑的骨架: ```bash php artisan imai-center:make-module coupon --title=优惠券 ``` 生成出来的东西可以直接安装并打开。写法见 [docs/module-development.md](docs/module-development.md)。 写好之后先自检,再打成 zip,在后台「应用管理 → 上传安装」装进去(只有创始人可见): ```bash php artisan imai-center:check-module modules/coupon ``` 自检跑的是和上传时同一套校验器,本地过了线上就一定过;`--json` 给 CI 用。 这条路需要 PHP 的 `zip` 扩展,镜像里要有: ```dockerfile RUN apt-get update && apt-get install -y libzip-dev \ && docker-php-ext-install zip RUN printf "upload_max_filesize=32M\npost_max_size=40M\n" \ > /usr/local/etc/php/conf.d/zz-uploads.ini ``` 出厂的 `upload_max_filesize` 是 2M,不调大的话像样的应用包都传不上去。 ## 许可证 [AGPL-3.0-or-later](LICENSE)。 Copyright (C) 2026 imai 这意味着:自己用、改、二次分发都可以,但**只要你把改过的版本作为网络服务 对外提供**(AGPL 第 13 条),就必须把你那份源码一并公开。想在闭源产品里 使用、或者不愿公开改动,请联系我们谈商业授权。