53

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

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

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

谢谢

4

9 回答 9

54

几个提示:

  • 对文件使用源代码控制,而不是 FTP/等。你用什么都没关系;我们倾向于为每个客户创建一个 Unfuddle.com 颠覆帐户,以便他们也有记录错误的地方,但关键的第一步是将您网站的完整源代码树纳入版本控制。在测试服务器或登台服务器上进行更改时,您会查看它们是否有效,然后提交,然后在实时服务器上进行更新。回滚和部署变得非常简单。对于多个 webhead 的集群,您可以重复该过程,或从单个“规范”服务器 rsync。

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

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

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

去年我做了一个关于Drupal 部署最佳实践的演讲。随意检查幻灯片。

于 2009-04-08T16:03:18.020 回答
21

特性.module 是一个非常强大的工具,用于管理 Drupal 配置更改。

内容类型、CCK 设置、视图、Drupal 变量、上下文、图像缓存预设、​​菜单、分类法和权限都可以整合到一个功能中,这些功能可以检查到版本控制中。从那里开始,部署新站点或将更改推送到现有站点,可以通过功能 UI 或 Drush 轻松管理。

确保安装 Strongarm.module 以导出存储在变量表中的 drupal 配置。您还可以通过安装 uuid_features.module 将静态内容/节点(即:关于我们、常见问题解答等)放入功能中。

毫无疑问,这是与同一站点上的其他开发人员合作以及将您的站点从开发转移到测试再到登台和生产的最佳方式。

于 2011-01-29T21:43:45.740 回答
16

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

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

  1. 在开发服务器上安装一个模块。
  2. 记下任何必要的更改和更新。如果有任何问题,请恢复并再次执行,直到您有一个可靠、无错误的过程。
  3. 测试您的更改!以普通登录用户和匿名用户身份重复您的测试过程。
  4. 如果更新过程涉及运行 update.php 以外的任何内容,则编写一个脚本来执行此操作。
  5. 将生产数据库复制到您的登台服务器,并立即执行相同的步骤。如果失败,则诊断失败并返回步骤 1。否则,继续。
  6. 测试您的更改!
  7. 备份您的生产数据库并记下您从 SVN 签出的版本。
  8. 将您的生产 Drupal 置于维护模式,在生产树上运行“svn update”,然后完成更新过程。
  9. 将 Drupal 退出维护模式并测试所有内容(以管理员、普通用户和匿名用户身份)

就是这样。对于像 Drupal 这样的社区框架,您永远无法真正期望的一件事是能够在您上线后将您的数据库从测试转移到生产。从那时起,所有的数据库移动都是从生产到测试,这使部署过程有些复杂。当心!:)

于 2009-05-20T15:57:33.567 回答
5

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

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

于 2010-01-15T07:31:01.923 回答
5

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

于 2010-01-15T09:34:39.383 回答
2

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

于 2009-04-08T14:07:54.130 回答
2

任何版本控制系统(GIT、SVN)+部署 Drupal 代码的功能模块 + 自定义设置(内容类型、自定义字段、模块依赖项、视图等)。

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

于 2013-01-21T07:53:02.620 回答
0

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

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

抱歉,如果部署对您来说是旧帽子,因此这含糊其辞。

于 2009-04-23T07:04:49.157 回答
0

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

于 2010-03-11T18:26:46.723 回答