主题
安装指南
购买提示
多租户扩展是 CatchAdmin 的高级功能模块,需要单独购买。
安装前准备
当前租户数据库管理器使用 MySQL。安装前请确认中央数据库已经连接,并提交或备份以下目录中的自定义内容:
config/tenancy.phpdatabase/migrations/tenancydatabase/migrations/monitordatabase/seeders/TenancyMenusSeeder.phpweb/src/views/tenancy
安装命令会使用 --force 重新发布这些文件,已有同名文件会被覆盖。
安装扩展
shell
composer require catchadmin/tenancy
php artisan catch:tenant:installcatch:tenant:install 会依次完成:
- 强制发布配置到
config/tenancy.php。 - 强制发布租户迁移到
database/migrations/tenancy,并执行迁移。 - 强制发布队列、调度监控迁移到
database/migrations/monitor,并执行迁移。 - 强制发布菜单 Seeder,执行
TenancyMenusSeeder。 - 强制发布前端页面到固定目录
web/src/views/tenancy。 - 确保
web/.env和web/.env.production包含VITE_TENANCY_MODE=true;缺少这条完整配置时会追加。 - 在项目根目录
.env缺少TENANCY_QUEUE_MONITOR时追加TENANCY_QUEUE_MONITOR=true。
包配置中的队列监控默认值为 false。安装命令只在环境变量完全缺失时写入 true,已有的 true 或 false 都会保留。
数据库迁移
租户核心迁移创建以下中央库数据:
| 数据 | 用途 |
|---|---|
| 租户 | 租户资料、状态、套餐、有效期和数据库配置 |
| 域名 | domain 模式下的租户域名映射 |
| 套餐 | 套餐状态和权限范围 |
| 操作日志 | 创建、编辑、续期、变更套餐、停用和恢复记录 |
| 凭据加密 | 加密已有租户数据库凭据 |
监控迁移创建中央库的队列监控表和调度监控表。租户业务库的模块迁移在创建租户或执行 catch:tenant:migrate 时处理。
选择识别模式
同一套部署全局使用一种租户识别模式。默认值为 domain。
独立域名模式:
dotenv
# 项目根目录 .env
TENANCY_IDENTIFICATION_MODE=domain
TENANT_CENTRAL_DOMAIN=admin.example.com
# web/.env.production
VITE_TENANCY_IDENTIFICATION_MODE=domain共享域名模式:
dotenv
# 项目根目录 .env
TENANCY_IDENTIFICATION_MODE=shared_domain
TENANT_CENTRAL_DOMAIN=admin.example.com
# web/.env.production
VITE_TENANCY_IDENTIFICATION_MODE=shared_domain后端与前端识别模式必须保持一致。VITE_TENANCY_IDENTIFICATION_MODE 由部署人员写入对应的 web/.env* 文件。
共享域名入口为:
text
https://admin.example.com/#/login?tenant=<tenant-uuid>两种模式的请求协议和反向代理要求参见租户配置。
创建公开上传软链接
shell
php artisan storage:link确认软链接指向正确目录:
text
public/uploads -> storage/uploads租户初始化后,三个租户磁盘分别使用:
text
storage/uploads/tenant-{uuid}/...
storage/static/tenant-{uuid}/...
storage/certs/tenant-{uuid}/...uploads 存放可公开访问的业务上传。static 和 certs 保持私有,不提供浏览器直连地址。密钥、证书和需要鉴权的文件应放在私有磁盘。
公开上传接口返回类似以下相对路径:
text
uploads/tenant-{uuid}/2026-07-18/attachments/example.jpg页面使用以下地址访问:
text
/uploads/tenant-{uuid}/2026-07-18/attachments/example.jpg重新发布前端页面
升级包后只重新发布前端页面:
shell
php artisan catch:tenant:install --only-view该命令只强制发布 web/src/views/tenancy,不会发布配置、执行迁移、运行 Seeder 或写入环境变量。
VITE_TENANCY_MODE=true 负责让管理端 API 使用当前页面源站的 /api 地址。VITE_TENANCY_IDENTIFICATION_MODE 负责租户页面的识别模式。租户上下文、Header 和 Token 的处理方式参见租户配置。修改 Vite 环境变量后需要重新启动开发服务或重新构建前端。
安装验证
shell
php artisan migrate:status --path=database/migrations/tenancy
php artisan migrate:status --path=database/migrations/monitor
php artisan route:list --path=api/tenancy
php artisan route:list --name=stancl.tenancy.asset最后检查:
- 租户、套餐、队列监控和调度监控菜单可以访问。
web/src/views/tenancy已发布。VITE_TENANCY_IDENTIFICATION_MODE与TENANCY_IDENTIFICATION_MODE一致。public/uploads软链接有效。domain模式可通过租户域名登录,或shared_domain模式可通过带租户 UUID 的入口登录。