# 开源CMS框架系统 **Repository Path**: tanw/tanzcms ## Basic Information - **Project Name**: 开源CMS框架系统 - **Description**: Tanzcms开源CMS系统 - **Primary Language**: PHP - **License**: MIT - **Default Branch**: master - **Homepage**: https://www.tanz.cn - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-09-27 - **Last Updated**: 2026-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: PHPCMS, Laravel, tanzcms, 免费开源 ## README # TanzCMS 安装与使用说明 TanzCMS 是一套基于 Laravel 13 与 PHP 8.4 的模块化内容管理系统,适用于企业官网、内容门户、资料下载站、会员投稿平台、自定义表单收集、简单订单支付以及需要二次开发的行业 CMS 项目。 本项目面向正式网站部署设计,核心能力包括内容模型、栏目、单页面、主题模板、自定义字段、自定义表单、会员、订单、支付、模块、插件、缓存、搜索索引和后台权限管理。后台 UI 基于 Layui 2.13.x 构建,适合传统 CMS 管理后台的表格、表单、弹窗和权限操作场景。 ## 系统截图预览 ### 后台控制台 ![后台控制台](screenshots/admin-dashboard.jpeg) ### 内容字段管理 ![内容字段管理](screenshots/content-fields.jpeg) ### 站点基础设置 ![站点基础设置](screenshots/site-settings.jpeg) ### 会员注册设置 ![会员注册设置](screenshots/member-register.jpeg) ### 菜单权限管理 ![菜单权限管理](screenshots/admin-menu.jpeg) ### 模块管理 ![模块管理](screenshots/modules.jpeg) ## 一、环境要求 推荐运行环境: | 项目 | 要求 | | --- | --- | | PHP | 8.4 或更高版本 | | Composer | 2.x | | 数据库 | MySQL 8.x 或兼容数据库 | | Web 服务 | Nginx / Apache | | 缓存 | 文件缓存可运行,生产高并发建议 Redis | | 队列 | 数据库队列可运行,生产高并发建议独立队列进程 | PHP 扩展建议开启: - `mbstring` - `pdo_mysql` - `openssl` - `fileinfo` - `gd` - `curl` - `zip` - `xml` - `redis`,生产环境推荐 生产环境建议同时开启: - PHP OPcache - HTTPS - Redis 缓存 - 队列进程 - 定时任务 - Web 服务静态资源缓存 ## 二、目录部署 将项目代码上传到服务器后,Web 站点根目录必须指向项目的 `public/` 目录。 示例: ```text /www/wwwroot/tanzcms/ 项目根目录 /www/wwwroot/tanzcms/public/ Web 访问目录 ``` 请不要把 Web 根目录直接指向项目根目录,否则 `.env`、`storage`、`vendor` 等目录可能被外部访问。 以下目录需要 PHP 进程具备写入权限: ```text storage/ bootstrap/cache/ public/uploads/ ``` ## 三、伪静态配置 TanzCMS 入口文件为 `public/index.php`。无论使用 Nginx、Apache 还是 IIS,站点根目录都应指向 `public/`,伪静态规则负责把不存在的文件和目录转发给 `index.php`。 ### Nginx 示例配置: ```nginx server { listen 80; server_name example.com; root /www/wwwroot/tanzcms/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } location ~* \.(?:css|js|jpg|jpeg|gif|png|webp|svg|ico|woff|woff2|ttf|eot)$ { expires 30d; access_log off; try_files $uri =404; } } ``` 如果使用面板环境,只需要在站点伪静态中保留核心规则: ```nginx location / { try_files $uri $uri/ /index.php?$query_string; } ``` ### Apache Apache 需要开启 `mod_rewrite`,并允许站点目录读取 `.htaccess`。 如果 Web 根目录已指向 `public/`,可使用: ```apache RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] ``` ### IIS IIS 需要安装 URL Rewrite 模块。站点根目录指向 `public/` 后,可在 `public/web.config` 中使用: ```xml ``` 伪静态配置完成后,首页、栏目页、内容页、搜索页、表单页等前台地址都应能由系统路由正常解析。 ## 四、安装步骤 ### 1. 安装依赖 进入项目根目录: ```bash cd /www/wwwroot/tanzcms composer install --no-dev --optimize-autoloader ``` 如果是本地开发环境,可以安装开发依赖: ```bash composer install ``` ### 2. 创建环境配置 复制环境配置文件: ```bash cp .env.example .env php artisan key:generate ``` `.env.example` 已按生产环境默认值提供安全配置,例如: ```env APP_ENV=production APP_DEBUG=false SESSION_ENCRYPT=true DB_TABLE_PREFIX=tz_ ``` 新安装站点建议保留默认表前缀 `tz_`。 ### 3. 配置数据库 在 `.env` 中配置数据库连接: ```env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=tanzcms DB_USERNAME=tanzcms DB_PASSWORD=your_password DB_TABLE_PREFIX=tz_ ``` 请提前创建数据库,并确保数据库账号拥有建表、改表、索引和写入权限。 ### 4. 执行 Web 安装 配置 Web 服务后访问: ```text http://你的域名/install ``` 安装页面会检查环境,并要求填写: - 站点名称 - 站点地址 - 后台入口 - 默认模板 - 数据库连接信息 - 管理员账号和密码 安装完成后,系统会生成安装锁文件: ```text storage/app/installed.lock ``` 已安装状态下再次访问 `/install` 会进入锁定页面。 ### 5. 命令行安装方式 如果不使用 Web 安装,也可以手动执行: ```bash php artisan migrate --force php artisan db:seed --force php artisan tanzcms:publish-theme-assets php artisan optimize:clear ``` 首次安装仍建议使用 `/install`,因为它会同时写入站点配置、后台入口、管理员账号和安装锁。 ## 五、安装后检查 安装完成后建议执行: ```bash php artisan tanzcms:health-check php artisan tanzcms:template-status php artisan tanzcms:modules list ``` 生产发布前建议执行: ```bash php artisan tanzcms:release-check ``` 如果修改了配置、路由或模板,可执行: ```bash php artisan optimize:clear php artisan config:cache php artisan route:cache php artisan tanzcms:template-clear php artisan tanzcms:template-compile default php artisan tanzcms:publish-theme-assets ``` ## 六、定时任务与队列 生产环境建议配置 Laravel 定时任务: ```bash * * * * * cd /www/wwwroot/tanzcms && php artisan schedule:run >> /dev/null 2>&1 ``` 系统内置的定时任务包括: - 日志清理 - 浏览量缓冲写回 - 定时发布内容 如启用队列,请配置队列进程,例如: ```bash php artisan queue:work --tries=3 --timeout=90 ``` 高并发站点建议将邮件、通知、搜索索引同步、批量导入导出等耗时任务放入队列处理。 ## 七、系统主要能力 ### 内容管理 - 内容模型管理。 - 栏目管理。 - 单页面管理。 - 文章内容管理。 - 详情页、列表页、搜索页。 - 内容投稿与审核。 - 浏览量统计与缓冲。 - SEO 标题、关键词、描述。 - 伪静态和短链 URL 规则。 - 自定义字段和字段索引。 自定义字段支持常见字段类型: - 单行文本 - 多行文本 - 富文本 - 单选 - 多选 - 下拉 - 图片 - 文件 - 日期 - 评分 - 规格 - 关联内容 - 关联栏目 - 关联会员 - 联动菜单 ### 自定义表单 系统内置自定义表单功能,适合留言、报名、预约、需求收集、售前咨询等场景。 后台可配置: - 表单名称和标识。 - 字段类型。 - 必填规则。 - 选项值。 - 提示文案。 - 提交限制。 - 提交数据处理状态。 表单可以独立访问,也可以生成引用代码放到单页面、内容页或主题模板中。 简单引用: ```html {custom_form code="contact"} ``` 自定义表单结构: ```html
{custom_form_token code='contact'}
``` ### 会员系统 - 会员注册。 - 会员登录。 - 找回密码。 - 会员资料。 - 会员组。 - 会员状态。 - 会员中心菜单。 - 会员投稿。 - 收藏、订单、资产等扩展入口。 会员登录、注册、找回密码、会员中心、投稿、订单等身份相关页面不会进入匿名整页缓存,避免用户身份数据泄露。 ### 订单与支付 - 会员订单。 - 充值与提现边界。 - 支付回调。 - 支付模块扩展。 - 支付宝、微信支付等通道适配边界。 支付 SDK 被封装在模块适配层,方便后续替换或扩展支付方式。 ### 模块与插件 TanzCMS 使用“核心 + 模块 + 插件”的扩展方式: - 核心代码提供内容、模板、权限、缓存、路由等基础能力。 - 模块承载内容、会员、订单、支付等业务能力。 - 插件适合扩展菜单、路由、模板标签、回调和独立业务功能。 模块和插件支持按前台能力按需启动,避免启用后参与所有请求,减少公开页面的运行负担。 常用命令: ```bash php artisan tanzcms:modules list php artisan tanzcms:modules sync php artisan tanzcms:modules install content ``` ## 八、模板引擎说明 TanzCMS 前台、会员中心和主题页面使用自研 `.html` 模板语法,不使用 Blade 作为主题模板语言。 主题模板一般位于: ```text themes/default/ ``` 主题静态资源一般发布到: ```text public/themes/ ``` 栏目可在后台分别配置: - 列表页模板 - 详情页模板 - 单页面模板 前台渲染会优先尊重后台模板设置。 ### 基础语法 模板引用: ```html {template "header.html"} {template "footer.html"} ``` 变量输出: ```html {$title} {$category.name} {$content.created_at} ``` `{$value}` 默认会进行转义输出,适合标题、名称、摘要等普通文本。 可信 HTML 输出: ```html {html $content} ``` `{html $value}` 只应输出可信富文本,例如后台编辑器保存的正文内容。 条件判断: ```html {if $category.description}

{$category.description}

{else}

暂无栏目介绍

{/if} ``` 循环: ```html {loop $items $item} {$item.title} {/loop} ``` ### 常用数据标签 内容列表: ```html {content category="news" num=10} {$t.title} {empty}

暂无内容

{/content} ``` 栏目列表: ```html {category parent="0" num=20} {$t.name} {/category} ``` 搜索结果: ```html {search keyword=$keyword num=10} {$t.title} {empty}

没有找到相关内容

{/search} ``` 表格数据: ```html {table name="links" num=10} {$t.title} {/table} ``` 自定义表单: ```html {custom_form code="contact"} ``` ### 常用资源标签 主题资源: ```html {theme_asset "css/style.css"} {theme_asset "js/app.js"} ``` 公共资源: ```html {public_asset "assets/app.css"} ``` 上传文件地址: ```html {upload_url $image} ``` 缩略图: ```html {thumb_img $thumb} ``` ### 模板安全规则 - 普通变量使用 `{$value}`。 - 可信富文本才使用 `{html $value}`。 - 不要把用户提交的原始 HTML 直接输出。 - 表单提交必须包含系统生成的表单令牌。 - 模块和插件新增模板标签时,应优先返回结构化数据,让主题自行控制 HTML。 ## 九、缓存与负载能力 TanzCMS 内置多层缓存能力: - 前台匿名页面缓存。 - 模板编译缓存。 - 模板标签渲染缓存。 - 元数据缓存。 - 搜索索引缓存。 - 浏览量缓冲。 - 首页静态生成。 - 模块和插件按需启动。 公开页面会根据页面上下文判断是否允许匿名整页缓存。首页、栏目页、详情页、单页等公开页面适合缓存;登录、注册、会员中心、订单、投稿等身份相关页面不会进入匿名整页缓存。 首页静态生成命令: ```bash php artisan tanzcms:static-home build php artisan tanzcms:static-home status ``` ### 生产负载建议 小型站点可以使用文件缓存和数据库队列运行。 中高访问站点建议: - 使用 Redis 作为缓存。 - 开启 OPcache。 - 配置队列进程处理异步任务。 - 配置定时任务写回浏览量和发布定时内容。 - 开启 Web 服务静态资源缓存。 - 对首页、栏目页、详情页启用页面缓存。 - 对高频首页启用首页静态生成。 - 定期重建搜索索引和字段索引。 百万级内容站点建议: - 使用 MySQL 8.x。 - 保留默认表前缀 `tz_` 或规划统一表前缀。 - 使用内容搜索索引表。 - 为搜索、栏目、状态、发布时间等字段建立有效索引。 - 避免后台深分页长期直接查询大表。 - 导出、批量处理、索引重建走队列或命令行任务。 - 根据业务规模预留 Meilisearch / Elasticsearch 等搜索引擎接入。 实际承载能力与服务器 CPU、内存、磁盘、PHP-FPM 配置、数据库配置、Redis 配置、模板复杂度、插件数量和访问模型有关。上线前建议按首页、栏目页、详情页、搜索页、会员中心和后台列表分别压测。 性能相关命令: ```bash php artisan tanzcms:performance-baseline php artisan tanzcms:performance-assert php artisan tanzcms:frontend-hotpath-probe php artisan tanzcms:admin-hotpath-probe php artisan tanzcms:query-plan-explain "select * from tz_contents where status = 'published' limit 10" ``` 搜索和索引命令: ```bash php artisan tanzcms:search-rebuild php artisan tanzcms:search-index-audit php artisan tanzcms:field-index-rebuild ``` ## 十、后台管理能力 后台提供: - 管理员管理。 - 角色管理。 - 权限管理。 - 后台菜单管理。 - 系统设置。 - 上传设置。 - 缓存设置。 - 搜索设置。 - 内容模型管理。 - 栏目管理。 - 内容管理。 - 自定义字段管理。 - 自定义表单管理。 - 会员管理。 - 会员组管理。 - 投稿审核。 - 订单管理。 - 支付管理。 - 模块管理。 - 插件管理。 - 应用市场入口。 - 健康检查。 - 首页静态管理。 - 发布前检查。 后台 UI 基于 Layui 2.13.x,主要面向内容录入、列表筛选、批量操作、权限控制和系统配置等高频管理场景。 后台入口由 `.env` 中的 `TANZCMS_ADMIN_ENTRANCE` 控制,安装时可以自定义。 ## 十一、常用维护命令 清理缓存: ```bash php artisan optimize:clear ``` 生成 Laravel 配置缓存: ```bash php artisan config:cache php artisan route:cache ``` 清理模板缓存: ```bash php artisan tanzcms:template-clear ``` 编译默认主题模板: ```bash php artisan tanzcms:template-compile default ``` 查看模板状态: ```bash php artisan tanzcms:template-status ``` 发布主题资源: ```bash php artisan tanzcms:publish-theme-assets ``` 清理元数据缓存: ```bash php artisan tanzcms:meta-clear ``` 写回浏览量: ```bash php artisan tanzcms:flush-views ``` 健康检查: ```bash php artisan tanzcms:health-check ``` 发布前检查: ```bash php artisan tanzcms:release-check ``` ## 十二、安全建议 - `.env` 不应提交到公开仓库。 - Web 根目录必须指向 `public/`。 - 生产环境必须关闭 `APP_DEBUG`。 - 生产环境建议开启 `SESSION_ENCRYPT=true`。 - 后台入口不要使用容易猜测的路径。 - 管理员密码必须使用高强度密码。 - 上传文件应限制扩展名、MIME、大小和图片内容。 - 支付、短信、对象存储等密钥必须由服务器环境单独配置。 - 插件和模块应通过服务层访问核心数据,避免绕过业务边界。 - 安装完成后不要删除 `storage/app/installed.lock`,除非明确需要重新安装。 ## 十三、目录结构 ```text app/ 核心应用代码 app/Cms/ CMS 核心能力 app/Core/ 模块、包、运行时等底层能力 app/Plugins/ 插件运行、市场、回调等能力 modules/ 官方模块 themes/default/ 默认前台主题模板 public/ Web 访问目录 public/themes/ 前台主题静态资源 resources/views/ 后台页面和系统视图 routes/ 路由定义 database/migrations/ 数据库迁移 config/ 系统配置 storage/ 运行时缓存、日志、安装锁和中间数据 ``` ## 十四、适用场景 TanzCMS 适合: - 企业官网。 - 产品展示站。 - 资料下载站。 - 内容门户。 - 会员投稿平台。 - 留言、预约、报名类表单站点。 - 简单订单和支付场景。 - 需要二次开发的行业 CMS。 - 需要模块化、插件化扩展的内容系统。 ## 十五、许可证 本项目使用 MIT License。实际发布版本中如包含第三方 SDK、模块或插件,请同时遵守对应组件的许可协议。