如何进行CMS升级?

时间:2011-09-25 11:16:35

标签: php codeigniter content-management-system

我已经构建了一个CMS(使用Codeigniter PHP框架),我们将其用于所有客户端。我一直在调整它,很难跟踪哪个客户端有哪个版本。我们真的希望每个人都拥有最新版本。

我的编写方式是为了更新和升级通常只涉及通过FTP上传新版本,并删除旧版本 - 我只是不要触及/uploads/themes目录(特定于站点的所有内容都在那里或在数据库中)。一切都是一个模块,每个模块都有自己的版本号(以及核心CMS),以及每个版本的安装和卸载脚本,但我必须首先手动FTP文件,然后运行模块的安装脚本从控制面板。我写了并将继续亲自编写所有内容,因此我可以完全控制代码。

我想要的是能够从CMS本身的控制面板升级核心CMS和各个模块。这是一个“傻瓜CMS”,所以要求人们FTP或远程技术做任何事都是不可能的。我想象的是登录时弹出的消息,或者已安装的模块列表,如“可用的新版本”。

我相信,一旦我做到这一点,我可以理清大部分技术细节,但我不确定要采取哪个方向。我可以想办法用cURL(从我们服务器上的某个地方验证和提取源文件)和PHP的本地文件系统函数(如unlink()file_put_contents()等)来尝试这样做,以预先形成对文件的实际更新或者将“旧”CMS填入备份目录并设置新的CMS,但即使我正在写这篇文章 - 这听起来像是灾难的秘诀。

我不使用git / github或其他任何东西,但我觉得这样的东西会有所帮助吗?我该如何(或不应该)接近这个?

4 个答案:

答案 0 :(得分:4)

Theres有很多方法可以做到这一点,但最简单的只是让Git安装在您的客户端服务器上并设置一个cron作业,不时地运行git pull origin master。如果您的应用程序使用迁移,那么应该很容易。

您可以这样做,因为它听起来像您完全控制您的客户。对于像PyroCMS或PancakeApp这样的东西,因为任何人都可以在任何服务器上使用它而无法工作,我们必须更聪明一些。我们只需下载一个ZIP,其中包含所有已更改的文件和已删除文件的列表,这意味着文件系统可以很好地更新。

我们有一个安装列表,我们可以使用HTTP请求ping,以便系统知道运行下载,或者点击可以在登录时点击“升级”。

答案 1 :(得分:1)

您可以在CMS中使用Git:Glip。 cron将是您自己系统上的URL,无需安装Git。

答案 2 :(得分:1)

@Obsidian DNS中毒攻击不会影响此线程中提到的大多数方法吗?

此外,SSH也可能受到中间人攻击的影响。

虽然在处理安全问题时总妄想是一件好事,但如果发生此类攻击,Wordpress作为GPL代码库可以很容易地检测到代码中未经授权的代码更改,因此解析很容易。

SSH和Git听起来像是一个很好的解决方案,但目标受众是什么?

答案 3 :(得分:0)

你看过WordPress是怎么做到的吗? 这似乎做你想要的。 请查看此页面以获取有关其工作原理的说明。 http://tech.ipstenu.org/2011/how-the-wordpress-upgrade-works/