什么是最好的Drupal部署策略?
我正在使用MacBook上的XAMPP上的第一个Drupal项目。 这是一个原型,并得到我的客户的积极反馈。
我将在两周后在Linux VPS上部署这个项目。 有没有更好的办法,而不是从零开始重新做服务器上的一切?
- 安装Drupal
- 下载模块(CCK,视图,date,日历)
- 创build内容
- …
谢谢
一些技巧:
-
使用源代码控制,而不是FTP /等,为文件。 不要紧,你用什么; 我们倾向于为每个客户端创build一个Unfuddle.com颠覆帐户,这样他们就有了一个logging错误的地方,但关键的第一步是将您站点的完整源代码树引入到版本控制中。 在testing服务器或登台服务器上进行更改时,您会看到它们是否正常工作,是否提交,然后在实时服务器上进行更新。 回滚和部署变得非常简单。 对于多个Webheads的集群,您可以重复这个过程,或从一个“规范”的服务器重新启动rsync。
-
不过,如果你使用SVN,你也可以使用CVS签出Drupal和其他模块/主题,SVN / CVS元数据将能够愉快地生活在旁边。
-
对于大文件夹(如文件目录),请在“正确”位置使用符号链接指向webroot之外的服务器端目录。 这可以让你的源码控制回购包括所有的代码和符号链接,而不是所有的代码和用户上传的所有文件。
-
数据库更棘手。 清理开发/临时数据库并将其推向活动对于初始部署来说是最简单的,但是如果活动站点上的用户也正在生成内容,则在增量数据库更新时会出现一些皱折。
去年,我做了关于Drupal部署最佳实践的介绍。 随意检查幻灯片。
function .module是pipe理Drupalconfiguration更改的一个非常强大的工具。
内容types,CCK设置,视图,Drupal的variables,上下文,Imagecache预设,菜单,分类和权限都可以卷成一个function,可以检查到版本控制。 从那里开始,部署一个新的网站,或者将更改推送到现有的网站,可以通过functionUI或Drush轻松pipe理。
确保你安装了Strongarm.module来导出存储在你的Variables表中的drupalconfiguration文件。 您还可以通过安装uuid_features.module将内容/节点(即:关于我们,常见问题解答等)静态化为function。
放手,这是与同一网站上的其他开发人员一起工作的最佳方式,并将您的网站从开发转移到testing到分期制作。
在我的工作场所,我们已经进行了广泛的讨论,而我们最终决定的方式是将代码更新(包括模块和主题)从开发到升级到生产。 我们正在使用Subversion,迄今为止运行良好。
尤其重要的是,您可以自动执行将数据库从生产环境中推回的过程,以便开发人员可以尽可能保持其数据库副本尽可能接近生产。 在关键任务环境中,您希望确保模块更新不会影响您的数据库。 我们使用的过程如下:
- 在开发服务器上安装模块。
- 记下任何变化和更新是必要的。 如果有任何故障,则恢复并再次执行,直到您有一个稳定,无差错的过程。
- testing你的改变! 重复您的testing过程作为一个正常的,login的用户,并再次作为匿名用户。
- 如果更新过程涉及除了运行update.php以外的任何其他内容,则编写一个脚本来执行此操作。
- 将生产数据库复制到登台服务器,并立即执行相同的步骤。 如果失败,则诊断故障并返回步骤1.否则,继续。
- testing你的改变!
- 备份您的生产数据库,并记下您已从SVN签出的版本。
- 把你的生产Drupal置于维护模式,在你的生产树上运行“svn update”,然后通过你的更新过程。
- 把Drupal退出维护模式并testing一切(如pipe理员,普通用户和匿名)
就是这样。 有一件事情你永远不会期望像Drupal这样的社区框架能够在你上线后将你的数据库从testing转移到生产。 从那时起,所有的数据库移动都从生产到testing,这在一定程度上使部署过程变得复杂。 小心! 🙂
我们广泛使用function模块捕捉function,然后在生产现场轻松安装。
我很惊讶,没有人提到部署模块。 以下是项目页面的摘录:
…旨在让用户轻松地将内容从一个Drupal站点转移到另一个站点。 部署会自动pipe理实体之间的依赖关系(如节点引用)。 它被devise成具有丰富的API,可以很容易地扩展用于各种内容分段情况。
我不用Drupal工作,但我很多工作与Joomla。 我通过归档web根目录中的所有文件(在我的情况下是tar和gzip,但是可以使用zip)来部署,然后在生产服务器上上传和扩展该归档。 然后我拿一个SQL转储(mysqldump -u用户-h主机-p数据库名> dump.sql),上传那个,并使用reverse命令来插入数据(mysql -u produser -h prodDBserver -p prodDatabase <dump.sql )。 如果您没有shell访问权限,则可以一次上传一个文件,然后编写一个PHP脚本来导入dump.sql。
任何版本控制系统(GIT,SVN)+ function模块来部署Drupal代码+自定义设置(内容types,自定义字段,模块依赖关系,视图等)。
由于Deploy模块仍处于开发模式,因此您可能希望在Drupal 7中使用Node导出模块来部署您的内容/节点。
如果你是新手部署(和/或Drupal),那么一定要做的一切。 一旦有用户在处理另一个副本时执行内容,则必须非常小心。
可以留下与实际内容,分类,用户等有关的表格而不是其结构。 然后推动与configuration有关的。 但是,这增加了一个复杂的数量级。
道歉,如果部署是你的老东西,这是含糊的侮辱。
我已经find并且正在实施的一个好的策略是使用部署模块的组合来迁移我的内容,然后与dbscripts一起合并和更新核心和模块。 即使你有实时的内容,安全和模块更新,它会照顾数据库合并,我目前已经设置了与svn一起工作。