ZhyCMS 使用说明
ZhyCMS
v3.1.3 · 使用说明
使用说明

ZhyCMS 内容管理系统
安装部署与使用指南

基于 Flask + SQLAlchemy + Jinja2 的轻量级开源企业内容管理系统,以「插件优先、主题驱动」为架构理念。适合搭建企业官网、资讯门户、产品展示站,Apache 2.0 协议免费商用,支持 Docker 一键部署。

6+ 内置主题(含英文) 24 构建器组件 11 可用插件 3 数据库支持 v3.1.3 当前版本
多主题切换 可视化页面构建器 RBAC 权限 内容工作流 全文搜索 对象存储 Docker 一键部署
01

产品简介

ZhyCMS 是一套面向企业的轻量级开源内容管理系统:前台负责展示,后台负责管理,插件负责扩展。它用 Python 技术栈替代传统 PHP CMS,在保持「轻」的同时覆盖企业建站的核心需求。

1.1核心定位

企业建站

企业官网、资讯门户、产品展示站,开箱即用,后台可视化维护。

插件优先

轮播图、产品、表单、招聘、会员等能力全部插件化,零侵入扩展。

主题驱动

前台模板按主题组织,后台一键切换,栏目级模板选择,缺失自动兜底。

轻量运维

Docker 一键部署、Alembic 自动迁移、健康检查 /healthz、内置备份恢复。

1.2技术栈

层次技术选型说明
后端框架Flask + SQLAlchemy + Jinja2应用工厂模式,扩展即插即用
数据库SQLite(开发)/ MySQL 5.7+ / PostgreSQL 12+生产推荐 MySQL 或 PostgreSQL
缓存与会话Flask-Caching + Flask-Session配置 REDIS_URL 自动切 Redis,支撑多实例
全文搜索Whoosh + jieba(默认)/ Meilisearch(可选)按语言分索引,SQL LIKE 兜底
国际化Flask-Babel + 内容级翻译表界面中英文 + 内容多语言
迁移Flask-Migrate(Alembic)启动自动执行增量迁移
部署gunicorn + gevent / Docker官方镜像支持 MySQL、PostgreSQL

1.3典型使用场景

  • 企业官网:公司介绍、新闻动态、产品展示、在线留言表单、招聘信息一站管理;
  • 资讯门户 / 行业站:栏目体系 + 文章工作流 + 全文搜索 + SEO 伪静态;
  • 多语言站点:内置英文主题与内容级多语言,适合外向型企业与涉外业务;
  • Headless / 小程序后端:通过 /api/v1/ 只读 REST API 输出内容。
开源协议项目基于 Apache License 2.0 开源,可免费商用、自由修改。Copyright 2026 泰州姜堰钟毓信息技术有限公司。
02

核心功能总览

ZhyCMS 的能力按「前台展示、后台管理、扩展生态」三块组织,底层由统一的数据与基础设施支撑。

ZhyCMS 功能地图(示意)
访问层 浏览器 · 网站前台 浏览器 · 管理后台 /admin 小程序 / 第三方 · REST API 前台 · 展示与检索 多主题模板系统(6+ 套,含英文) 栏目级模板选择 · 缺失自动兜底 伪静态 URL · sitemap · robots 全文搜索(分词 + 高亮 + 分页) 内容级多语言 · 英文主题 前台会员体系(社区插件) 后台 · 内容与权限 栏目 / 文章 / 碎片内容管理 RBAC 角色 · 菜单/按钮级权限 内容工作流(审核 + 版本快照) 审计日志 · 全量留痕 备份恢复 · 系统设置(SEO/缓存) 表单收集 · 邮件/企微通知(插件) 扩展 · 插件与能力 插件机制(11 个官方/社区插件) 可视化页面构建器(24 组件) REST API · Token 鉴权 + CORS 对象存储(OSS / COS / Kodo) 一键翻译(百度/有道/Google/DeepSeek) 数据库迁移插件(默认不启用) 数据与基础设施 SQLite(开发) MySQL 5.7+ PostgreSQL 12+ Redis(可选缓存/会话) Whoosh / Meilisearch 索引 对象存储(云端)
示意:三大能力块 + 底层数据与基础设施

2.1能力清单

能力说明引入版本
多主题模板系统前台模板按主题组织,后台一键切换;内置 6 套主题(含 2 套英文主题)v1.0
主题管理上传 / 启用 / 删除 / 打包下载主题压缩包,缺失模板自动兜底v2.2
插件机制plugins/<slug>/ 零侵入扩展,启停即时生效、无需重启v2.2
国际化(i18n)Flask-Babel 界面文案 + 内容级多语言翻译表,默认关闭、开启即时生效v2.3 / v2.5
Redis 缓存环境变量自动检测,RedisCache + 服务端 Session,支撑多实例负载均衡v2.5
数据库迁移Flask-Migrate(Alembic)管理 schema 版本,支持回滚与插件迁移v2.4
全文搜索默认 Whoosh + jieba 中文分词,可选 Meilisearch;多语言检索、SQL 兜底v2.4
对象存储 OSS阿里云 OSS / 腾讯云 COS / 七牛云 Kodo,一键迁移本地文件上云v2.4
Docker 部署官方镜像已发布,MySQL / PostgreSQL 一键启动,支持本地构建v2.4
REST API/api/v1/ 只读端点,Token 鉴权 + CORS,适合小程序 / Headlessv2.2
RBAC 权限角色 / 权限点两级模型,菜单与按钮级授权,栏目级内容粒度v2.0
内容工作流草稿 → 待审核 → 已发布 / 已驳回,版本快照与对比还原v2.0
审计日志登录、配置变更、内容 CRUD 等全量留痕,支持多维度检索v2.0
SEO 优化伪静态、sitemap、robots.txt、页面缓存、图片默认 ALTv2.0
表单收集可视化表单设计,提交后邮件 / 企业微信实时通知v2.0
备份恢复MySQL / PostgreSQL / JSON 三种方式,一键备份与恢复v2.0
前台会员体系注册 / 登录 / 微信 / QQ / 短信登录、找回密码、栏目会员可见性(社区插件)v2.6.4
插件依赖治理manifest.json 支持 requires / extends / min_core_version,启用强校验v2.6.4
可视化页面构建器24 个内置组件、四页面类型、草稿 / 发布 / 修订回滚、中英双语、三端预览v3.0.0
数据库迁移插件内置插件 db_migrator:一键把 SQLite 开发库迁到 MySQL / PostgreSQLv3.1.0
03

系统架构

ZhyCMS 采用经典的分层架构:访问端 → Web 服务 → Flask 应用 → 数据与基础设施。配置 REDIS_URL 后可平滑扩展为多实例部署。

部署架构示意
访问端 网站前台(浏览器) 管理后台(浏览器) 小程序 / Headless API Nginx(可选) 负载均衡 · TLS 终结 · 伪静态规则转发 · 静态资源 Gunicorn · gevent worker(多进程) WSGI 入口 wsgi.py / run.py(开发) Flask 应用(应用工厂 + SQLAlchemy ORM + Jinja2) 前台模块主题渲染 · 搜索 · 多语言 后台模块内容 · 权限 · 审计 · 备份 页面构建器组件注册表 · 服务端渲染 插件运行时启停门控 · 钩子扩展 横切扩展 Flask-Babel 国际化 · Flask-Caching 页面缓存 · Flask-Session 会话 · Flask-Migrate 迁移 · 存储抽象层 · 安全(CSRF / CSP / 上传校验) 数据与基础设施 SQLAlchemy → MySQL / PostgreSQL / SQLite Redis(缓存 + Session) Whoosh / Meili 索引 OSS / COS / Kodo
示意:访问端 → Nginx → Gunicorn → Flask 应用 → 数据与基础设施

3.1关键设计

  • 应用工厂:app/__init__.py 统一装配扩展,插件与主题通过运行时门控加载;
  • 存储抽象层:所有上传走 app/utils/storage.py 同一入口,本地 / 云存储可无缝切换;
  • 双轨渲染:页面构建器(已发布布局)与手写模板(themes/)双轨并存,老站升级零行为变化;
  • 健康检查:/healthz 返回 200 即应用存活,Docker HEALTHCHECK 同此。
04

快速开始

从零到可访问的站点,通常只需三条路径:本地开发、Docker 部署、生产部署。首次启动会自动进入初始化向导。

4.1环境要求

Python

3.9 及以上版本(开发与部署均需要)。

数据库

生产推荐 MySQL 5.7+ 或 PostgreSQL 12+;SQLite 仅用于开发 / 测试(不支持并发写入)。

可选组件

Redis(多实例缓存与会话)、对象存储、Meilisearch(大型站点搜索)。

Docker

一键部署需 Docker 20.10+ 与 Docker Compose v2。

4.2本地开发安装

代码在 Gitee / GitCode / GitHub 三平台镜像同步,国内推荐 Gitee:

# 1. 克隆代码
git clone https://gitee.com/pollybird/zhycms
# git clone https://gitcode.com/pollybird/ZhyCMS
# git clone https://github.com/pollybird/zhycms
cd zhycms

# 2. 创建虚拟环境
python -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate

# 3. 安装依赖(国内建议用镜像源)
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# 4. 启动开发服务器
python run.py

浏览器访问 http://127.0.0.1:5000,首次访问自动跳转到 /admin/setup 初始化向导。

4.3Docker 部署

官方镜像已发布到 Docker Hub(pollybird/zhycms)、GitHub GHCR(ghcr.io/pollybird/zhycms)和阿里云 ACR,当前版本 v3.1.3,开箱即用:

# 1. 配置环境变量
cp docker/.env.example .env
# 编辑 .env,修改 SECRET_KEY 和数据库密码

# 2. 启动(MySQL 8.4,镜像 pollybird/zhycms:mysql)
docker compose -f docker-compose.mysql.yml up -d
# 或启动(PostgreSQL 16,镜像 pollybird/zhycms:postgresql)
docker compose -f docker-compose.postgresql.yml up -d

# 3. 访问 http://localhost:5000 完成初始化
镜像说明三个 tag(mysql / postgresql / latest)指向同一镜像,内置 MySQL / PostgreSQL 驱动,通过 ZHYCMS_DB_URI 切换数据库。也可直接拉取:docker pull pollybird/zhycms:v3.1.3(国内可用阿里云 ACR 地址)。容器启动时自动执行数据库迁移、编译 i18n 翻译并启动 gunicorn;instance/ 和上传目录通过 volume 持久化。

如需本地构建或使用 MariaDB 方案,用通用编排文件:

docker compose --profile mysql up -d      # 本地构建 + MySQL
docker compose --profile mariadb up -d    # 本地构建 + MariaDB 11.4
docker compose --profile postgres up -d   # 本地构建 + PostgreSQL

4.4生产部署

# 方式一:直接运行
ZHYCMS_ENV=production ZHYCMS_SECRET_KEY=your-secret python run.py

# 方式二:gunicorn(推荐)
gunicorn -w 4 -b 0.0.0.0:5000 "run:app"

# 方式三:Docker(见 4.3)
生产注意事项生产环境务必使用 MySQL / PostgreSQL,并设置强密钥(ZHYCMS_SECRET_KEY)。多 worker 部署时 SECRET_KEY 必须固定,勿每次随机。

4.5部署方式对比

对比项本地开发Docker 部署生产部署
适用场景开发调试、快速体验测试 / 中小站点上线正式站点、多实例
数据库SQLite(默认)MySQL 8.4 / PostgreSQL 16 / MariaDB 11.4MySQL 5.7+ / PostgreSQL 12+
启动方式python run.pydocker compose ... up -dgunicorn -w 4 "run:app"
特性自动迁移 + 调试模式镜像开箱即用、数据卷持久化多 worker、建议 Nginx 反代 + Redis

4.6初始化向导

首次访问任意页面时,系统自动跳转到 /admin/setup,按向导完成三步即可开始使用:

  1. 创建管理员账号

    设置后台超级管理员用户名与强密码,同时可配置站点名称、站点描述等基础信息。

  2. 配置数据库与密钥

    确认数据库连接(开发默认 SQLite)与 SECRET_KEY;Docker 场景对应 .env 中的 ZHYCMS_DB_URI。

  3. 完成初始化

    系统自动建表、写入种子数据(含搜索设置、对象存储设置)并 stamp Alembic 基线,进入后台首页。

迁移自动执行全新安装自动 create_all 建表并 stamp 基线;v2.3.0 及更早旧库首次启动自动 stamp 后仅执行增量迁移;正常升级直接 upgrade head,均无需手工操作。
初始化向导
图 4-1 初始化向导:创建管理员账号、选择演示数据与启用插件
后台登录页
图 4-2 后台登录页:账号密码 + 图形验证码

4.7目录结构

zhycms/
├── app/
│   ├── admin/              # 后台模块(栏目、文章、用户、角色、审计、备份、设置等)
│   ├── frontend/           # 前台模块(含 themes/ 主题目录)
│   ├── models/             # 数据模型(用户、RBAC、审计、工作流、备份、上传等)
│   ├── translations/       # 国际化翻译文件
│   ├── utils/              # 工具模块(上传、通知、备份、存储、主题等)
│   ├── builder/            # 页面构建器(组件注册表 / Schema / 渲染器)
│   ├── plugin_system.py    # 插件运行时
│   └── plugin_api.py       # PluginBase 基类
├── plugins/                # 插件目录(banner / product / recruit / member …)
├── migrations/             # Alembic 数据库迁移脚本
├── docker/                 # Docker 部署辅助文件(.env.example 等)
├── instance/               # 实例数据(数据库、配置、备份、搜索索引、上传等)
├── Dockerfile              # 多阶段构建镜像
├── docker-compose*.yml     # 编排文件(通用 / MySQL / PostgreSQL)
├── wsgi.py                 # 生产 WSGI 入口
├── run.py                  # 开发启动入口
└── requirements*.txt       # 依赖清单(核心 / 生产)
05

后台使用指南

后台默认地址为 /admin(可在系统设置中自定义前缀)。本节按后台菜单顺序,介绍每个功能模块的使用方法。

截图说明本章全部界面截图来自本机实际安装的 ZhyCMS v3.1.3(初始化时选择制造业演示数据「瑞景精工有限公司」)——所见即实测。

5.1登录与仪表盘

访问 /admin 输入管理员账号密码登录。登录环节内置多项安全防护:

  • 连续失败锁定:多次密码错误将临时锁定账号,防止暴力破解;
  • 图形验证码:登录页提供图形验证码;
  • 异地 IP 提醒:检测到非常用 IP 登录时给出提示。

登录后进入仪表盘:展示站点内容概览(文章 / 栏目数量、审核待办等),并提供常用入口。后台首页同时显示当前版本号,提交 issue 求助时请带上该版本号。

仪表盘
图 5-1 仪表盘:栏目 / 文章统计、待办与运行状态一览

5.2栏目管理

栏目是内容组织的骨架,支持层级结构(父栏目 → 子栏目)。每个栏目可独立设置:

  • 列表页 / 内容页 / 单页模板:栏目级模板选择,可让不同栏目呈现不同版式;
  • 伪静态别名(slug):决定前台访问路径,如 /news.html;
  • 会员可见性:设置 member_only 后,未登录访客无法访问该栏目内容(配合前台会员插件);
  • SEO 配置:sitemap 更新频率 / 优先级、栏目描述等。
栏目管理
图 5-2 栏目管理:父子栏目层级、状态开关与批量操作

5.3文章管理与内容工作流

文章编辑页支持富文本(CKEditor5)、封面图、摘要、自定义字段与多语言版本 Tab。保存时自动生成版本快照,可在历史版本中对比差异、一键还原。

文章状态按内容工作流流转,实现「谁写、谁审、谁发」的权限分离:

内容工作流状态机(示意)
草稿 作者编辑中 每次保存生成快照 待审核 提交后进入审核队列 无发布权限的作者 已发布 前台可见 可撤回再编辑 已驳回 审核不通过 重新编辑后再次提交 提交审核 审核通过 · 发布 驳回 重新编辑 → 回到草稿
示意:草稿 → 待审核 → 已发布 / 已驳回,全程保留版本快照

文章列表支持批量操作:发布、撤回、删除、归档、移动栏目、提交审核,批量操作会逐篇同步更新搜索索引。

文章列表
图 5-3 文章列表:状态标签、批量操作与搜索
文章编辑器
图 5-4 文章编辑:富文本正文、发布设置与 SEO 面板

5.4碎片管理

内容碎片(Fragment)用于维护站点中的零散内容块——页脚版权、联系方式、公告栏等。碎片支持多语言版本,在模板中通过全局函数按语言取用,一处修改、全站生效。

碎片管理
图 5-5 碎片管理:维护页脚版权、联系方式等零散内容块

5.5主题管理

  • 一键切换:后台主题列表展示已安装主题,启用即时生效(缓存自动刷新);
  • 上传主题:支持 .zip / .tar.gz / .tgz 压缩包,经 8 步安全校验(格式 → 完整性 → 路径穿越 → symlink → manifest 与 slug → 必备模板 → 形态归一 → 禁覆盖)后解压;
  • 打包下载:可将当前主题打包导出,跨站复用;
  • 安全兜底:启用主题缺失必备模板时自动回退 default 主题,杜绝白屏;
  • 资源隔离:每套主题独立拥有 css / js / images / fonts 子目录。
主题管理
图 5-6 主题管理:6 套内置主题一键切换、上传与启用
危险操作需验证码删除插件 / 主题等危险操作需要输入独立一次性验证码(端点 /captcha/delete-confirm,不区分大小写);内置或启用中的对象拒绝删除,需先禁用。

5.6页面构建器(可视化建页)

v3.0.0 起内置自研轻量拖拽构建器,无需任何前端构建链,在后台「页面构建」中即可搭建页面:

  • 四种页面类型:首页、单页、列表页、文章详情页,覆盖企业站全部页面形态;
  • 24 个内置组件:布局(section / grid)、基础(标题 / 文本 / 富文本 / 图片 / 按钮)、数据(文章列表 / 轮播 / 友情链接 / 联系卡)三组;
  • 草稿 / 发布 / 修订回滚:匿名访客只见已发布版本,修订可随时回滚;
  • 中英双语与可见性:组件文案中英 Tab,支持节点语言白名单与会员限定;
  • 三端预览:桌面 / 平板 / 手机预览与全屏预览,iframe 内服务端真实渲染;
  • 插件开箱即用:轮播图、产品、招聘、教程插件启用后自动贡献组件与首页默认布局片段。
页面构建器列表
图 5-7 页面构建器:首页 / 单页 / 列表页 / 详情页四类页面
构建器编辑器
图 5-8 可视化编辑器:左侧组件库、中间画布、右侧属性样式面板
双轨兜底「构建器为主、手写模板永久兜底」:只有已发布布局的页面才走构建器渲染,其余页面仍走手写模板,老站升级零行为变化。默认布局按「当前启用主题 fixture → 核心回退 → 已启用插件贡献片段」三层合并。

5.7插件管理

插件是 ZhyCMS 扩展能力的主要方式。后台「插件管理」页可查看全部插件,启停即时生效、无需重启:

  • 启用 / 禁用:以 site_settings.enabled_plugins 门控,禁用即隐身、不删数据;
  • 依赖强校验:manifest.json 中的 min_core_version → requires → extends 依次校验,禁用被依赖插件会被拦截并提示先禁用哪些插件;
  • 加载失败提示:插件 import 出错会在启动日志标红并继续加载其余插件,后台显示「加载失败」及原因;
  • 删除保护:内置插件不可卸载,删除需一次性验证码,启用中的插件需先禁用。
插件管理
图 5-9 插件管理:启停即时生效、上传安装与依赖校验

5.8用户与角色(RBAC)

后台「用户管理」维护管理员账号,「角色管理」维护权限体系:

  • 两级权限模型:角色(编辑、审核、运营等)→ 权限点(菜单权限、按钮权限);
  • 栏目级内容粒度:可为角色授权到具体栏目,实现「只管理自己负责的栏目」;
  • 工作流配合:无发布权限的作者提交后进入审核队列,编辑审核后发布,实现内容审核闭环。
用户管理
图 5-10 用户管理:后台管理员账号维护
角色权限
图 5-11 角色管理:RBAC 角色与权限点配置
账号管理提示新增账号时请完整填写角色绑定与启用状态;重置密码时两次输入需一致,否则校验失败。

5.9表单收集

「自定义表单」插件提供可视化表单设计器:拖拽字段搭建表单(联系表单、在线留言、报名登记等),嵌入前台页面。访客提交后:

  • 数据入库,后台可查看、导出提交记录;
  • 实时通知:提交触发邮件或企业微信消息,第一时间收到线索。

5.10系统设置

「系统设置」聚合站点运行的关键开关,分页签管理:

设置项说明
站点基础站点名称、描述、统计代码(analytics 插件)、维护模式等
SEO伪静态开关(/{slug}.html、/{slug}-{page}.html、/article-{id}.html)、sitemap 生成、robots.txt 可视化编辑(支持追加自定义规则)
搜索搜索引擎切换(Whoosh / Meilisearch)、「重建索引」按钮(存量内容纳入检索;索引异常时可随时全量重建,无数据风险)
国际化开启多语言、配置默认语言与可用语种;前台语言解析链:URL 参数 → Session → Cookie → Accept-Language → 默认语种
缓存页面缓存 TTL(首页 / 栏目 / 文章独立)、Redis 运行状态展示;配置 REDIS_URL 后自动切换 RedisCache + 服务端 Session
安全自定义后台路由前缀(即时生效)、上传大小限制等
系统设置-站点
图 5-13 系统设置:站点基础信息与运行开关

5.11审计日志

系统对关键操作全量留痕:登录 / 登出、配置变更、内容增删改、备份恢复、权限调整、插件与主题操作等。支持按模块、操作类型、操作人、时间范围多维度检索;详情人性化展示——键名中文翻译、状态语义化、变更对照(旧值 → 新值)、ID 自动显示名称。

审计日志
图 5-12 审计日志:关键操作全量留痕、多维检索

5.12备份与恢复

后台「备份与恢复」一键操作,产物存 instance/backups/(含数据库 + 上传目录):

  • 三种备份方式:MySQL / PostgreSQL 原生导出、JSON 全量导出;
  • 恢复:选择备份文件一键还原;恢复到旧版本库后启动新代码会自动 upgrade head 补齐迁移;
  • 建议:每季度做一次恢复演练;生产环境另可用 mysqldump / pg_dump 兜底。
备份与恢复
图 5-14 备份与恢复:立即备份、定时备份与上传恢复

5.13REST API

ZhyCMS 提供 /api/v1/ 只读端点,适合小程序、Headless 前端与第三方系统读取内容:

  • Token 鉴权:后台生成 API Token,请求携带令牌访问;
  • CORS 支持:允许跨域调用;
  • 覆盖栏目与文章等核心内容的读取,插件可通过扩展机制贡献自有 API 端点。
06

前台与访客体验

前台体验由「主题 × 搜索 × 多语言 × 会员」四件事构成。默认情况下,前台访问无需任何配置即可浏览已发布内容。

6.1多主题切换

系统内置 6 套主题(含 default_en、manufacturing_en 两套英文主题)。管理员在后台「主题管理」启用某套主题后,前台全局即时切换;不同栏目还可通过「栏目级模板」呈现不同版式。每套主题自带独立的 css / js / images / fonts 资源目录,互不干扰。

前台首页
图 6-1 前台首页:制造业主题 Banner + 产品橱窗

6.2全文搜索

前台搜索框支持中文分词检索,命中关键词高亮显示并分页。索引范围包括:文章(标题 + 正文去 HTML + 摘要 + 栏目名)、产品(含规格参数)、招聘岗位(含部门 / 地点 / 薪资)。

全文搜索工作流(示意)
内容保存 / 删除 文章 · 产品 · 岗位 批量操作逐篇同步 索引更新 Whoosh + jieba / Meilisearch 按语言分索引 前台检索 关键词高亮 · 分页 随当前语言返回内容 故障回退:索引异常 / 零命中 自动降级为 SQL LIKE 查询(同步覆盖插件内容),搜索不中断 后台可随时「重建索引」
示意:内容变更实时入索引,异常自动 SQL 兜底
站内搜索
图 6-5 全文搜索:关键词命中、高亮与分页(共 7 条结果)
栏目列表页
图 6-2 栏目列表页:资讯列表与分页
产品页
图 6-3 产品页:产品分类列表展示
文章详情页
图 6-4 文章详情页:正文排版与相关栏目

6.3多语言(国际化)

  • 界面文案:前台 + 后台界面支持中英文切换(Flask-Babel),默认关闭,开启后即时生效;
  • 内容级多语言:文章、栏目、碎片、产品、表单、岗位、友情链接支持多语言翻译表,前台模板通过全局 t(obj, field) 按当前语言取翻译,无翻译时回退默认语言;
  • 结构化字段:产品「规格参数」(JSON)、岗位「部门 / 工作地点 / 薪资待遇」支持按语言维护,翻译留空回退默认语言;
  • 一键翻译:编辑页多语言 Tab 可一键调用百度 / 有道 / Google / DeepSeek 翻译回填(需启用并配置 auto_translate 插件)。

6.4前台会员(社区插件)

启用 member 插件后,前台支持完整的会员体系:注册 / 登录 / 资料维护 / 修改密码 / 找回密码,微信 / QQ 一键登录、短信验证码登录,注册协议确认;配合栏目的「会员可见性」,可构建仅会员可访问的内容专区。

07

插件生态

ZhyCMS 的扩展能力全部通过插件提供:官方内置插件 8 个(不可卸载),社区插件 3 个(随包分发、可卸载)。

7.1内置与社区插件一览

插件类型功能说明
轮播图 banner官方内置首页 / 页面轮播图管理,多图切换默认可用
产品展示 product官方内置产品分类、列表、详情,规格参数多语言接入搜索与构建器
友情链接 friend_link官方内置友链管理与展示默认可用
自定义表单 form官方内置可视化表单设计、提交入库、邮件 / 企业微信通知v2.3 起并入插件体系
统计代码 analytics官方内置前台注入第三方统计代码默认可用
对象存储 oss_storage官方内置阿里云 OSS / 腾讯云 COS / 七牛 Kodo不配置凭证不产生云端调用
一键翻译 auto_translate官方内置编辑页一键调用百度 / 有道 / Google / DeepSeek 翻译回填需配置服务商密钥
数据库迁移 db_migrator官方内置SQLite 开发库一键迁移到 MySQL / PostgreSQL默认不启用
前台用户中心 member社区插件注册 / 登录 / 微信 / QQ / 短信登录、找回密码、栏目会员可见性可卸载
招聘管理 recruit社区插件招聘岗位管理(部门 / 地点 / 薪资多语言)、列表详情接入搜索与构建器
教程中心 tutorial社区插件教程 / 文档内容组织与展示接入搜索与构建器

7.2插件开发机制

开发新插件只需在 plugins/<slug>/ 目录放置 manifest.json 与插件类文件,遵循 PluginBase 基类约定:

插件结构(示意)
plugins/<slug>/ ├── manifest.json name / version / min_core_version requires / extends 依赖声明 ├── plugin.py class XxxPlugin(PluginBase) ├── models.py / routes.py ├── templates/ · static/ └── translations/(独立翻译域) 能力扩展点 后台页面 / 前台路由与模板函数 自有数据表(含迁移脚本) REST API · sitemap 聚合 SearchProvider 搜索接入 审计模块 · 演示数据钩子 get_builder_widgets() 构建器组件 get_builder_layouts() 布局片段 运行门控 site_settings.enabled_plugins 启用强校验: min_core_version → requires → extends 禁用反向依赖校验 启停即时生效 · 不删数据
示意:零侵入目录结构 → 能力扩展点 → 运行时门控

插件详细开发规范见仓库 docs/PLUGIN_DEV.md(含可直接复制的最小示例插件)。

08

对象存储

ZhyCMS 内置存储抽象层:所有上传走同一入口,本地存储与云存储可无缝切换,历史文件支持一键迁移上云。

8.1支持的厂商

阿里云 OSS

配置 AccessKey、Bucket、Endpoint 即可启用;SDK 可选安装、懒加载。

腾讯云 COS

支持 SecretId / SecretKey 与地域节点配置。

七牛云 Kodo

支持 AK / SK 与存储空间(Bucket)配置。

8.2配置与迁移

  1. 启用插件并配置凭证

    后台「插件管理」启用 oss_storage,在对象存储设置页填写厂商凭证。未配置凭证时行为与本地存储完全一致,零侵入、不产生云端调用。

  2. 新上传文件自动上云

    启用后新上传的图片与附件自动写入云端,正文 / 封面等链接使用云域名。

  3. 一键迁移历史文件

    在设置页触发「迁移本地文件」:批量上传本地历史文件,自动改写文章正文、封面等链接为云域名,完成平滑上云。

安全设计上传失败显式报错;禁用插件自动回退本地存储;备份文件强制保留本地,不依赖云端。
09

安全体系

ZhyCMS 从访问控制、登录、上传、输入、运维五个层面构建纵深防御。

层面措施
访问控制自定义后台路由前缀(即时生效)、RBAC 权限、栏目级内容授权
登录安全连续失败锁定、图形验证码、异地 IP 登录提醒
上传安全后缀白名单 + MIME 双重校验、SHA-256 内容去重、图片自动压缩
输入安全路径穿越拦截、审计日志详情 HTML 转义防 XSS、CSRF 同源校验、纯文本字段 XSS 防御
运维安全审计日志全量留痕、备份恢复前自动释放连接池、健康检查端点
其他加固建议生产环境设置强 SECRET_KEY、启用 Redis 多实例共享 Session、后台路由前缀不使用保留字(如 form)、上传大文件时调大 Nginx client_max_body_size。
10

运维 FAQ

以下内容整理自官方运维文档 docs/OPERATIONS_FAQ.md,适用 ZhyCMS ≥ 2.6.4。排查问题先做「三板斧」:看日志、查健康检查、核对系统设置。

启动报 ModuleNotFoundError / ImportError

虚拟环境未激活或依赖不完整,执行:pip install -r requirements.txt -r requirements-prod.txt(生产需要 gunicorn / gevent)。升级后新增依赖未安装时对照 UPGRADE.md 对应章节。插件导入报错会在启动日志标红该插件并继续加载其余插件。

端口 5000 被占用(Address already in use)

lsof -i:5000 找到占用进程;或修改启动命令端口。生产建议 Nginx 反代 + gunicorn。

启动日志出现「Alembic bootstrap 跳过(非致命)」

bootstrap 异常不阻断启动,但需尽快手工修复,否则后续版本字段缺失。手工执行迁移:

cd 项目根
python - <<'PY'
from app import create_app
from flask_migrate import upgrade
app = create_app()
with app.app_context():
    upgrade(directory='migrations')
PY

常见原因:alembic_version 指向已删除的历史版本(stamp 到正确版本)、表已存在 / 字段已手工加过(跳过对应迁移)、大表加索引锁等待(低峰执行)。

日志提示 Redis 连接失败,回退 SimpleCache

Redis 不可达时的自动降级,站点仍可用(本地内存缓存 + Cookie Session)。多 worker 部署建议修复:检查 Redis 是否启动、密码、REDIS_URL 格式(redis://:密码@host:6379/0)。

改了内容 / 设置,前台不生效(缓存未刷新)

后台保存内容与设置时会自动清缓存;直改数据库不会。手工清空:重启应用(SimpleCache 即清),或 Redis 场景 redis-cli FLUSHDB。多 worker 下登录态丢失多为 Session 依赖 Redis 掉线,且 SECRET_KEY 需固定。

主题上传被拒绝

对照 8 步校验定位失败环节:格式白名单(zip / tar.gz / tgz)→ 压缩包完整性 → 路径穿越 → symlink → manifest 合法性与 slug 正则 → 7 个必备模板齐全 → 形态 A/B 归一化 → 内置主题禁覆盖。报错信息会指明第几步失败。

插件启用失败:提示版本 / 依赖

强校验顺序为 min_core_version → requires → extends,按提示先升级核心或启用依赖插件;禁用被依赖插件被拦截时,提示会列出需先禁用的插件。

开启伪静态后列表第 2 页 404

Nginx 需把 /(slug).html、/(slug)-N.html 一并转发到应用(try_files $uri $uri/ @app; + @app 到 gunicorn)。直接访问动态形式 /column/<slug>?page=2 返回 200 即说明是 Web 服务器转发问题。

上传大文件 413 或中文文件名异常

413 需调大 Nginx client_max_body_size 并核对后台上传大小限制与 MAX_CONTENT_LENGTH。中文文件名上传后扩展名丢失多为绕过了核心 save_upload_file() 自行处理所致。

搜不到刚发布的内容

保存时会实时索引;索引异常自动回退 SQL LIKE 兜底。连兜底都无结果时检查文章 status=published、is_deleted=0、栏目启用。仍异常可在后台「重建索引」,或删除 instance/search_index/ 下对应语言目录再重建。

Docker 容器反复重启:database not reachable after 60s

entrypoint 等待数据库 60 秒超时。检查 db 服务健康状态与 ZHYCMS_DB_URI;首次启动 MySQL / PG 初始化慢时耐心等待。若提示「数据卷由旧密码初始化」,说明改了 .env 密码但卷未重建:按旧密码重装,或 docker compose --profile <mysql|mariadb|postgres> down -v 清卷重装(会清空数据)。

备份与恢复要点

内置备份产物存 instance/backups/(含数据库 + uploads);手动兜底用 mysqldump / pg_dump + app/static/uploads/ + instance/。恢复到旧版本库后启动新代码会自动 upgrade head。建议每季度一次恢复演练。ZhyCMS 不承诺自动降级,安全降级 = 恢复升级前备份。

快速诊断命令速查
# 应用存活
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:5000/healthz

# 查看当前迁移版本
python -c "
from app import create_app
from sqlalchemy import text
app = create_app()
with app.app_context():
    from app.extensions import db
    print(db.session.execute(text('SELECT version_num FROM alembic_version')).all())
"

# 缩略图缓存可安全清空重建
rm -rf instance/image_cache/*

# Docker 常用
docker compose --profile mysql logs -f app
docker compose --profile mysql ps
docker compose --profile mysql down -v   # 注意:清空数据卷

提交 issue 求助时请附:版本号(后台首页可见)、启动日志最后 50 行、复现步骤。

11

版本演进与升级

ZhyCMS 自 2026 年 8 月发布以来快速迭代,从内容管理核心走向「插件生态 + 可视化建站」的完整平台。

v1.1
初始版本
主题模板、栏目 / 文章管理的 CMS 核心。
v2.0
企业级能力集中落地
RBAC 权限、审计日志、内容工作流、备份恢复、登录 / 上传安全加固、SEO 高级设置。
v2.2
插件优先架构
插件机制 + 主题管理 + 轮播图 / 产品 / 友情链接插件 + REST API。
v2.3
国际化起步
Flask-Babel 界面国际化、统计代码插件、英文主题模板、表单插件化。
v2.4
工程化与存储升级
Alembic 数据库迁移、Whoosh 全文搜索、Docker 容器化、对象存储 OSS 插件。
v2.5
多语言与缓存
内容级多语言、搜索按语言分索引、Redis 缓存 + 服务端 Session、一键翻译、插件内容接入搜索。
v2.6
会员与依赖治理
前台会员体系(member 插件)、插件依赖强校验、工程化(CI / 异常处理 / 常量治理)。
v3.0
可视化页面构建器
原生拖拽 + 24 组件 + 四页面类型 + 草稿 / 发布 / 回滚 + 插件贡献组件与布局。
v3.1
数据库迁移插件与性能治理
SQLite → MySQL / PostgreSQL 一键迁移热切换;Setting 请求级缓存、浏览量缓存合并、首页 N+1 治理等并发健壮性优化。当前版本 v3.1.3。

11.1升级原则

  • 一般升级:覆盖代码 + pip install -r requirements.txt + 重启应用即可,首次启动自动执行 Alembic 增量迁移;
  • 数据库结构变更:迁移涉及建表、补列、数据回填,仅启动程序即可完成(v1.1 → v2.0+ 除外,需备份后执行 scripts/upgrade_v2.py 专用脚本);
  • 升级前必做:备份站点目录与数据库;v2.3.0 及更早旧库覆盖代码后首次启动自动 stamp 基线,仅执行增量迁移;
  • 行为兼容:v2.6.x → v3.0.0 升级后所有页面默认仍走手写模板,行为与旧版完全一致;到「页面构建」创建并发布布局后,对应页面才切换为构建器渲染。

完整升级对照表与注意事项见仓库 UPGRADE.md 与 CHANGELOG.md。

12

参与贡献与许可

报告问题 / 提交 PR

欢迎在 GitHub / Gitee / GitCode 仓库提交 Issue 与 Pull Request,先阅读 CONTRIBUTING.md(环境搭建 / 开发规范 / 提交规范)。

漏洞报告

安全漏洞请勿使用公开 Issue,按 SECURITY.md 指引私密报告。

文档与测试

pytest 测试脚手架 + GitHub Actions CI(34 项测试,3 Python 矩阵);文档见仓库 docs/ 与单页版 wiki.html。

开源协议

Apache License 2.0,免费商用。Copyright 2026 泰州姜堰钟毓信息技术有限公司。

仓库镜像:GitHub pollybird/zhycms · Gitee pollybird/zhycms · GitCode pollybird/ZhyCMS,三平台同步更新。