什么是最好的Drupal部署策略?

时间:2009-04-08 13:56:40

标签: deployment drupal vps

我正在MacBook上的XAMPP上开展我的第一个Drupal项目。这是一个原型,并得到了我的客户的积极反馈。

我将在两周后在Linux VPS上部署该项目。有没有比从头开始重新处理服务器上的所有内容更好的方法?

  • 安装Drupal
  • 下载模块(CCK,视图,日期,日历)
  • 创建内容
  • ...

由于

9 个答案:

答案 0 :(得分:53)

一些提示:

  • 对文件使用源代码管理,而不是FTP /等。你使用什么并不重要;我们倾向于为每个客户启动一个Unfuddle.com subversion帐户,这样他们就可以记录错误,但关键的第一步是将站点的完整源代码树转换为版本控制。在测试服务器或登台服务器上进行更改时,您会看到它们是否正常工作,您是否提交,然后在实时服务器上进行更新。回滚和部署得到了很多,更简单。对于多个Webhead的集群,您可以重复该过程,或从单个“规范”服务器重新进行rsync。

  • 但是,如果您使用SVN,您还可以使用Drupal和其他模块/主题的CVS签出,并且SVN / CVS元数据将能够愉快地生活在彼此旁边。

  • 对于像文件目录这样的大文件夹,请使用“正确”位置的符号链接指向webroot之外的服务器端目录。这使得源代码控制repo包含所有代码和符号链接,而不是所有代码和用户上传的所有文件。

  • 数据库比较棘手;清理开发/暂存数据库并将其推送到最初是最容易的,但如果实时站点上的用户也在生成内容,那么在进行增量数据库更新时会有一些问题。

去年我在Drupal deployment best practices做了一个演讲。随意检查幻灯片。

答案 1 :(得分:21)

Features。模块是一个非常强大的工具,用于管理Drupal配置更改。

内容类型,CCK设置,视图,Drupal变量,上下文,图像缓存预设,菜单,分类和权限都可以转换为功能,可以将其检入版本控制。从那里,使用功能UI或Drush可以轻松管理部署新站点或将更改推送到现有站点。

确保安装Strongarm.module以导出存储在Variables表中的drupal配置。您还可以通过安装uuid_features.module将静态内容/节点(即:about us,faqs等)添加到Features中。

请注意,这是与同一站点上的其他开发人员合作的最佳方式,并将您的站点从开发转移到测试再到分段和生产。

答案 2 :(得分:16)

我们在我的工作场所对此进行了广泛的讨论,我们最终确定的方式是将代码更新(包括模块和主题)从开发推广到生产。我们正在使用Subversion,到目前为止它运行良好。

特别重要的是,您可以自动化从生产中推送数据库的过程,以便您的开发人员可以尽可能地保持数据库副本尽可能接近生产。在任务关键型环境中,您希望绝对确定模块更新不会影响您的数据库。我们使用的流程如下:

  1. 在开发服务器上安装模块。
  2. 记下必要的更改和更新。如果有任何故障,请恢复并再次执行,直到您有一个稳定,无错误的过程。
  3. 测试您的更改!以普通登录用户身份重复测试过程,并再次以匿名用户身份重复测试过程。
  4. 如果更新过程涉及运行update.php以外的任何内容,则编写一个脚本来执行此操作。
  5. 将生产数据库复制到登台服务器,并立即执行相同的步骤。如果失败,请诊断故障并返回步骤1.否则,继续。
  6. 测试您的更改!
  7. 备份您的生产数据库并记录您已从SVN检查过的修订。
  8. 将生产Drupal置于维护模式,在生产树上运行“svn update”,然后完成更新过程。
  9. 将Drupal退出维护模式并测试所有内容(以管理员,普通用户和匿名方式)
  10. 就是这样。对于像Drupal这样的社区框架,你永远不能期望的一件事是能够在你上线后将你的数据库从测试转移到生产。从那时起,所有数据库移动都从生产到测试,这使得部署过程有些复杂化。小心! :)

答案 3 :(得分:5)

我很惊讶没有人提到Deployment模块。以下是项目页面的摘录:

  

...旨在让用户轻松地将内容从一个Drupal站点转移到另一个站点。 Deploy自动管理实体之间的依赖关系(如节点引用)。它设计为具有丰富的API,可以轻松扩展以用于各种内容分段情况。

答案 4 :(得分:5)

我们广泛使用功能模块来捕获功能,然后在生产现场轻松安装。

答案 5 :(得分:2)

我不和Drupal合作,但我和Joomla合作很多。我通过归档web根目录中的所有文件进行部署(在我的情况下是tar和gzip,但你可以使用zip),然后在生产服务器上上传和扩展该归档。然后我接受一个SQL转储(mysqldump -u user -h host -p databasename> dump.sql),上传它,并使用reverse命令插入数据(mysql -u produser -h prodDBserver -p prodDatabase< dump .SQL)。如果您没有shell访问权限,则可以一次上传一个文件并编写PHP脚本以导入dump.sql。

答案 6 :(得分:2)

任何版本控制系统(GIT,SVN)+ Features模块,用于部署Drupal代码+自定义设置(内容类型,自定义字段,模块依赖关系,视图等)。

由于Deploy模块仍处于开发模式,因此您可能希望在Drupal 7中使用Node export模块来部署您的内容/节点。

答案 7 :(得分:0)

如果您不熟悉部署(和Drupal),那么请确保一次性完成所有工作。 一旦有用户在您处理另一个副本时影响内容,您必须非常小心。

可以保留与实际内容,分类,用户等相关的表而不是其结构。然后推送与配置相关的那些。但是,这增加了一个数量级的复杂性。

道歉,如果部署对你来说太老了,那么这就是模糊的侮辱。

答案 8 :(得分:0)

我发现并且正在实施的一个好策略是使用部署模块的组合来迁移我的内容,然后与dbscripts一起钻取以合并和更新核心和模块。即使您有实时内容,安全性和模块更新,它也会处理数据库合并,而且我目前已将我的设置与svn配合使用。