关键词:站群系统;PHP;MVC架构;GD库
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2024)25-0087-03
1 概述
随着信息化建设的不断推进,门户网站已成为高校展示自身形象的关键窗口,用户普遍将官方网站视为获取学校资讯的重要渠道。除学校层面外,校内各二级部门亦纷纷提出建设网站的需求。然而,传统的建站模式,即各部门自行建设与发布内容,已逐渐难以满足当前信息化管理的高标准要求[1]。其中,凸显的问题主要包括:
1) 受限于人员和资金,众多部门选择让在校生参与网站开发。然而,学生毕业后,网站的维护工作往往随之中断,后续出现的漏洞难以得到及时修复,从而埋下了重大的安全隐患[2]。
2) 独立建站模式要求单独采购服务器,并需配备专业人员负责服务器与程序的运维工作,这导致建站所需的人力与物力成本高昂,且易造成资源浪费。
3) 各部门根据自身需求建立的子网站,因部署于不同服务器,难以实现全校范围内的信息资源共享,进而在一定程度上加剧了信息孤岛现象[3]。
4) 网站后台分散于各个二级部门,部分部门可能未对发布内容进行严格审核即行发布,导致学校党政宣传部门难以及时掌握并审核各部门内容的合规性,增加了不当言论在网上扩散的风险。
针对上述网站建设现状,构建站群系统成为当前较为有效的解决方案。广州商学院针对本校网站建设存在的实际问题,经过长期探索,已自主研发了一套站群系统,实现了全校网站的统一管理。
2 技术架构
站群系统的高质量建设离不开平台的合理架构。通过全面调研校内外情况,对比建设差距,并综合考虑站群系统的建设初衷、项目建设成本及运维成本等因素,我们明确了站群系统的建设架构[4]。鉴于本项目预算有限,我们选择了大量免费开源的软件版本。本项目采用PHP作为动态语言。基于PHP的服务器架构主要有LAMP和LNMP两种,其中LAMP指的是Linux+Apache+MySQL+PHP,而LNMP 则是Linux+Nginx+MySQL+PHP[5]。鉴于PHP 和MySQL 均为免费开源的轻量级应用,它们常被中小型企业作为项目的首选组合。在Web服务器软件方面,Apache与Nginx 均为广泛使用的开源软件。Apache通常采用一个请求对应一个进程或线程的工作模式,而Nginx的一个工作进程则能处理成千上万的并发连接。因此,在轻量级应用中,Nginx能以更低的资源消耗应对更高的并发连接需求。基于上述原因,本项目选定了LNMP 作为站群系统的服务器架构。
3 网络部署架构
基于访问效率和网络安全考虑,本站群系统采用前后端物理分离的形式进行部署,其部署结构如图1 所示。
在站群系统的部署架构中,前端Web服务器、后台管理服务器及MySQL服务器均采用了双机集群模式,这一设置不仅提升了系统性能,还确保了任意主机宕机时系统仍能持续运行。
文章在后台管理服务器完成审核流程后,会生成静态文件,这些文件随后通过FTP协议传输至前端Web应用服务器集群,并最终发布到互联网上。此模式下,仅有前端Web服务器集群暴露于互联网,用户若需进行网站内容更新,则必须处于内网环境或通过VPN服务器连接到内网。前端Web服务器集群仅运行静态HTML,不进行PHP代码的动态解释,这一设计有效减少了网络暴露面,降低了入侵风险。
4 系统功能设计
站群系统主要功能模块包括站群管理模块、用户权限管理模块、内容管理模块、流程引擎等。
4.1 站群管理模块
站群管理模块主要负责管理整个站群系统中的各个站点,包括新建网站、绑定域名等功能。在新建网站后,需要为该网站创建独立的数据模型和数据字段。每个数据模型包含两个主要的数据表:一个用于存储文章标题、作者、摘要等短文本信息,另一个则专门用于存储文章的正文内容。值得注意的是,这里的数据字段并非直接对应于数据库的表字段,而是经过封装的功能模块,例如多图片上传字段,它可以加载一个多图片上传控件;富文本内容字段,则能直接调用所见即所得的富文本编辑器。创建好数据模型后,便可以进一步创建网站栏目,这些栏目既可以多个共用同一数据模型,也可以为每个栏目创建独立的数据模型。根据结构的不同,栏目可分为列表式、封面式和外链式三种。其中,封面式栏目下还可以继续创建子栏目;列表式栏目仅用于添加文章;外链式栏目则用于添加站外链接。无论是封面式还是列表式栏目,均支持调用不同的模板来生成多样化的网页展示效果。
4.2 用户权限管理模块
用户权限管理模块主要采用了RBAC(基于角色的权限控制)模型。在该模型中,权限被分配给角色,而用户则被赋予不同的角色,且一个用户可以属于多个角色。用户权限的分配分为纵向和横向两种:纵向权限主要涉及功能菜单的权限,如编辑站点、编辑文章等,而横向权限则关注站点资源的权限,例如为某用户分配某站点文章的编辑权限后,还可以进一步细化设置该权限所涵盖的具体栏目。通过这样的权限配置,单个用户可以轻松地管理多个站点,并且不同的站点可以拥有不同的管理权限。用户通过下拉菜单即可方便地切换站点。
4.3 内容管理模块
内容管理模块不仅包含了传统网站管理系统的文章添加、编辑、发布等基本功能,还实现了不同站点之间的资源共享。在某个站点上传的图片、附件等文件都会存入统一的附件资源库,所有站点的内容管理模块都可以调用该资源库内的资源。此外,该模块还支持一篇文章以链接形式或副本形式发布到多个站点。链接形式意味着多个站点的超链接将指向同一篇文章,而副本形式则是在将文章推送到其他站点时,生成一篇内容相同的新文章,允许进行二次加工。
4.4 流程引擎
流程引擎在站群系统中扮演着至关重要的角色,它主要负责文章内容发布的审核流程。根据学校相关的网站内容管理规范,所有发布到互联网的内容都必须经过严格的审核流程。流程引擎可以确保所有文章在完成审核流程后,才能生成静态文件并发布到前端Web服务器集群。此外,流程引擎还具备高度的灵活性,可以根据不同站点和栏目的需求,设定不同的审核流。
5 关键技术
5.1 MVC设计模式
MVC(Model-View-Controller) 是一种软件设计模式,用于将应用程序分解为三个相互协作的组件:模型(Model) 、视图(View) 和控制器(Controller) 。这种模式旨在促进应用程序的模块化设计,使得代码更易于管理和维护,同时也支持并行开发。
模型(Model) 组件负责管理应用程序的数据和业务逻辑。它是对应用程序状态的抽象表示,包括数据库记录的表示和与数据库交互的方法。模型文件全部存放于核心目录的Model文件夹内,每个文件代表对数据库中一个数据表的调用,敏感词数据表调用示例代码如图2所示。
其中,第二行代码load_sys_class(′model′, ′′, 0)表示加载系统公共类model,里面包含了数据表的增删改查等通用操作,而针对本数据表特殊业务的操作,以方法形式写在模型文件里。
视图(View) 组件即模板界面,负责数据前端展示,通过调用模型组件和逻辑处理语句生成输出数据。视图文件是标准HTML文件内嵌自定义标签组成最终的面向用户的可视界面,比如以下为某站点的新闻列表视图代码,通过标准的HTML 和自定义标签,输出静态的HTML代码:
控制器(Controller) 组件是一个处理HTTP请求的组件,负责接收用户的输入并调用模型和视图来进行相应的操作,在用户和系统之间起到中介的作用,根据请求的类型和参数来决定调用的模型方法和渲染的视图。控制器是MVC模型的核心,决定了数据和业务逻辑。如图4所示,为一个用户黑名单列表控制器,先对控制器进行命名,再在方法体内进行数据模型调用和逻辑处理,最后再通过include语句调用相应视图模板。
5.2 所见即所得富文本编辑器
站群系统内容管理模块面向的是各部门的通讯员,大部分通讯员都只有基本的办公软件操作技能,不可能通过编程的方式进行图文排版,因此在内容发布模块引入一个所见即所得富文本编辑器。本系统引入的是CKEditor 5富文本编辑器,它是一个在网页开发领域广泛使用并且免费开源的富文本编辑器,默认提供了很多常用的文字排版功能,如字体设置、段落设置、表格编辑等,使得用户可以在网页上用类似编辑Word文档的方式编辑网页内容,并且CKEditor 5 提供了丰富的二次开发接口,可以很便捷地根据自己需要的功能进行定制开发。
大部分通讯员都有从Word文档起草通讯稿的习惯,从Word文档中直接复制内容至富文本编辑器,会带上很多Word特有的冗余标签,与标准HTML标签不兼容,往往会导致文章排版变形,因此在CKEditor 中二次开发添加了一键去除Word标签的功能按钮。
图片上传是富文件编辑的重要功能,本系统通过CKEditor5的API接口与站群系统文件上传功能模块和附件资源库对接,用户可以在富文本编辑器点击上传按钮上传或者把文件拖拽到编辑器自动上传。富文本编辑器可以直接调用附件资源库,当一个图片或者文件需要在多个文章或者多个站点调用时,只需要在附件资源库清单中勾选插入即可,不用重复上传文件。
5.3 在线图片编辑
PHP在5.0版本以后提供了一个名为GD库的扩展库,用于图像加工处理。利用GD库,可以为站群系统提供一个在线的图形处理程序而不用在本地安装任何图形处理软件,为新闻通讯员进行文章图片处理带来极大便利。GD库支持jpeg、png、gif等常见网页支持图片格式,可实现一些常规的图片处理操作。例如需要进行一张图片裁剪,只需要获取图片的路径,指定裁切的坐标和尺寸,最后输出裁切图片即可,其核心语句只需要imagecopyresampled()函数即可实现,语法极为简洁。
6 结束语
站群系统已经在广州商学院内全面应用,成功把上百个网站迁移到站群系统,不仅很好地解决了二级部门网站数量庞大、难以维护、安全隐患大、信息无法共享等问题,而且降低了网站建设成本,提高了系统运维效率,保证了信息共享和安全,实现了信息资源的统一存储、统一分类、充分挖掘和利用,奠定了学校信息化建设的基础。这一实践在高校信息化建设中具有重要的参考价值和实际意义。