织梦CMS是一个传统LAMP/LEMP架构的应用,它依赖于文件系统来存储网站数据、附件、上传的图片等,而Serverless架构(如阿里云ACE)的文件系统是临时和易失的,这意味着:

(图片来源网络,侵删)
- 数据不持久化: 每次函数调用结束后,文件系统上的修改都会丢失,你上传的图片、生成的静态HTML文件、修改的配置文件等,在下一次请求时都会恢复到初始状态。
- 目录权限问题: ACE的文件系统通常只读,或者对写入操作有严格限制,而织梦CMS需要写入
data、uploads、html等目录。
不能像在传统虚拟机或ECS上那样直接安装织梦CMS,我们必须采用一种“变通”的方法,将织梦CMS的核心逻辑与需要持久化的数据分离开来。
核心思路:前后端分离 + 对象存储
我们将整个网站拆分成两部分:
- 动态逻辑层(后端): 部署织梦CMS的核心PHP文件,但不包含数据目录,这部分部署在阿里云ACE的函数计算中。
- 静态资源层(前端):
- 网站数据(数据库): 使用阿里云RDS或云数据库PolarDB来存储织梦CMS的所有内容数据。
- 附件/图片/静态文件: 使用阿里云对象存储OSS来存储所有用户上传的文件、生成的静态HTML文件、网站样式和脚本等。
这种架构下,ACE上的PHP函数只负责处理动态请求(如从数据库读取文章、处理表单提交),然后将所有生成的静态内容和上传的文件都写入到OSS中。
详细安装步骤
第1步:准备工作(购买和配置云服务)
-
购买并配置阿里云ACE服务:
(图片来源网络,侵删)- 登录阿里云控制台,找到并进入“Serverless App Engine”(应用引擎)服务。
- 创建一个应用,选择“PHP”运行时,推荐选择较新的稳定版本(如PHP 7.4或8.0+)。
- 创建应用后,你会获得一个临时的Git仓库地址和一个部署密钥。
-
购买并配置数据库:
- 购买一个云数据库RDS MySQL实例(或PolarDB),推荐选择高可用版,确保数据安全。
- 在RDS实例的“白名单”设置中,将你的本地IP和ACE的IP地址段添加进去,以允许访问,你可以暂时设置为
0.0.0/0(不安全,仅用于测试),测试成功后再修改为更严格的规则。 - 记录下RDS的内网地址、端口、数据库名、用户名和密码。
-
购买并配置对象存储OSS:
- 购买一个对象存储OSS存储空间。
- 创建一个Bucket(存储桶),并选择一个与你的域名匹配的名称。
- 在Bucket的“权限设置”中,找到“防盗链”并设置为“允许空Referer”,或者在“读写权限”中暂时设置为“公共读”(仅用于测试,生产环境请配置更精细的权限策略)。
- 记录下Bucket的Endpoint(地域节点)和名称。
- 创建一个AccessKey ID和AccessKey Secret(请妥善保管,不要泄露)。
第2步:修改织梦CMS源码
这是最关键的一步,你需要下载织梦CMS的源码,并修改其核心配置和文件处理逻辑,使其将数据写入数据库和OSS,而不是本地文件系统。
-
下载织梦CMS: 从织梦CMS官网下载最新版本的源码(
DedeCMS-V57-UTF8-SP2.zip)。
(图片来源网络,侵删) -
修改
data/common.inc.php:- 这个文件是织梦的核心配置文件,你需要修改数据库连接信息,使其指向你的RDS实例。
- 找到
$cfg_dbhost,$cfg_dbuser,$cfg_dbpwd,$cfg_dbname,$cfg_dbprefix等配置项,填入你的RDS信息。 - 注意: 在部署到ACE时,这个文件最好通过环境变量来注入,而不是硬编码,ACE支持在函数计算中设置环境变量。
-
修改文件上传和目录写入逻辑:
- 这是最复杂的部分,你需要织梦CMS的代码,找到所有涉及
file_put_contents,is_writable,mkdir,move_uploaded_file等文件系统操作的函数。 - 上传文件处理:
- 将原本写入
uploads/目录的逻辑,改为使用阿里云PHP SDK将文件上传到OSS。 - 修改织梦的配置,将附件保存路径从本地路径改为OSS的URL,将
/uploads/image/2025/10/xx.jpg改为https://your-bucket.oss-cn-hangzhou.aliyuncs.com/uploads/image/2025/10/xx.jpg。
- 将原本写入
- 生成静态文件处理:
- 织梦默认生成
.html文件到html/目录,你需要修改这个逻辑,让织梦在生成静态文件后,不保存到本地,而是同样上传到OSS的一个特定目录(static/)。 - 你需要修改织梦的URL重写规则(伪静态),让它能正确地从OSS获取这些静态HTML文件,这通常需要配置OSS的静态网站托管功能。
- 织梦默认生成
- 使用OSS Bucket作为根目录:
- 一个更彻底的方案是,将整个网站根目录挂载到OSS上,但这在ACE中比较复杂,可能需要使用NAS文件存储作为中间层,成本较高,对于大多数场景,只分离动态数据和静态资源即可。
- 这是最复杂的部分,你需要织梦CMS的代码,找到所有涉及
-
引入阿里云PHP SDK:
- 下载阿里云PHP SDK。
- 将SDK的核心库(如
aliyuncs/oss-sdk-php)放入你的织梦项目目录中,并在PHP代码中引入。
-
处理缓存目录:
- 织梦的缓存目录(
data/cache/)也需要修改,可以将缓存数据存储在RDS的一个专门表中,或者使用Redis(如阿里云Redis)来提升性能。
- 织梦的缓存目录(
第3步:部署到阿里云ACE
-
初始化Git仓库:
- 在你修改好的织梦CMS项目根目录下,执行
git init。 - 将所有文件添加到Git:
git add . - 提交代码:
git commit -m "Initial commit: DedeCMS for ACE"
- 在你修改好的织梦CMS项目根目录下,执行
-
关联远程仓库并推送:
git remote add ace [你在ACE创建的应用Git仓库地址]git push -u ace main(或master,取决于你的默认分支)
-
配置ACE应用:
- 在ACE控制台中,找到你的应用,进入“函数计算”配置。
- 环境变量: 添加你在第2步中提到的数据库信息、OSS AccessKey、Bucket名称等作为环境变量,这是最佳实践,避免敏感信息泄露。
- 触发器: 配置一个HTTP触发器,将HTTP请求转发到你的PHP函数。
- 内存和超时: 根据你的网站流量,适当调整函数的内存大小和执行超时时间,织梦CMS在处理复杂模板或大量数据时可能会比较耗时。
第4步:配置域名和HTTPS
-
绑定域名:
在你的域名解析服务商(如阿里云云解析DNS)中,添加一条CNAME记录,将你的域名解析到你的ACE应用提供的公网域名。
-
配置HTTPS:
- 在ACE应用配置中,开启HTTPS功能。
- 你可以申请阿里云免费SSL证书,并将其部署到你的ACE应用上,实现全站HTTPS加密。
重要注意事项和替代方案
- 复杂性高: 这个方案需要对织梦CMS有深入的了解,并且需要编写或修改大量PHP代码,开发成本和维护成本都很高。
- 性能考量: 每次动态请求都需要调用函数计算,可能会有一定的冷启动延迟,将大部分内容静态化到OSS可以有效缓解这个问题。
- 成本: ACE函数计算、RDS、OSS、CDN(推荐使用,加速静态资源访问)都会产生费用,请根据实际流量评估成本。
- 插件兼容性: 修改后的织梦CMS可能与一些第三方插件不兼容,因为这些插件可能也依赖本地文件系统进行读写。
替代方案:使用ECS或云市场镜像
如果你觉得上述过程过于复杂,强烈推荐使用传统的阿里云ECS(云服务器)。
- 购买ECS实例: 选择一个适合的配置(如1核2G入门级)。
- 使用云市场镜像: 在ECS创建页面,选择“镜像” -> “云市场”,搜索“织梦CMS”或“DedeCMS”,你会发现有大量已经配置好环境的镜像,一键即可安装完成。
- 部署: 创建ECS实例时选择这个镜像,几分钟内就能得到一个可用的织梦CMS网站。
- 后续维护: 你可以像管理任何一台传统服务器一样管理它,安装插件、备份数据等都十分方便。
| 特性 | 阿里云ACE (Serverless) | 阿里云ECS (传统服务器) |
|---|---|---|
| 适用场景 | 高弹性、低峰期流量极低、无状态应用 | 稳定流量、需要文件系统、有状态应用 |
| 安装织梦CMS | 复杂,需要大量代码改造,将数据分离到RDS和OSS | 简单,一键云市场镜像,开箱即用 |
| 成本 | 按量付费,无闲置成本,但高峰期可能较贵 | 固定月费,流量包,成本可预测 |
| 维护难度 | 高,需要处理Serverless特有的文件系统问题 | 低,与传统服务器运维一致 |
| 推荐度 | 不推荐用于织梦CMS这类传统应用 | 强烈推荐,是部署织梦CMS最简单、最稳定的方式 |
除非你有非常特殊的需求(网站访问量极不规律,每天只有几次访问,且希望成本最低),否则不要在阿里云ACE上安装织梦CMS,选择阿里云ECS + 云市场镜像是更经济、更稳定、更省心的方案。
