【问题标题】:Development and production environment in PHPPHP中的开发和生产环境
【发布时间】:2010-09-29 03:19:37
【问题描述】:

我想为我用 PHP 编写的新网站设置两个环境。一 - 开发新版本并对其进行测试。第二个产品将提供我的实际稳定版本的网站。

PHP 中的网站将包含许多 PHP 和其他文件(JS、图像等)。所以我想如何以最好的方式准备这个环境,以便于进行源代码控制,快速将网站从开发环境复制到生产环境,并使开发版本可供网络上的人们使用,以便他们能够看到实际的工作进度并提出更改建议或报告错误。

您能否给我一些建议,从这个起点到哪里去?是否有关于这方面的书籍(从实践的角度来看?)或者您有经验或提示需要注意什么以及什么是重要的,以使这个过程对我和参与开发新项目的其他人有益?

【问题讨论】:

    标签: php web testing environment


    【解决方案1】:

    对于初学者,请使用以下三个:

    1. SVN - 这将为您提供源代码控制并允许您跟踪更改。您可能希望在此基础上获得 GUI(Tortoise 是一种流行的图形)以简化学习曲线。

    2. RSYNC - 这将允许您使用单个命令简化本地和远程站点之间的同步。 RSYNC 使用差异引擎进行同步,这意味着增量同步会在几秒钟内发生。在紧张的编程过程中,我有时会在一小时内同步 4-5 次,因为我可以很容易地快速推出小改动。

    3. MySQLDump - 这将允许您从生产站点导入/导出数据。我通常每周执行一次以在本地服务器上获取生产数据,这不仅为我提供了本地备份,还让我可以在本地测试环境中处理生产数据。

    从长远来看,仅这三个就可以为您节省大量时间并让您扩大规模。稍后您可以研究自动化构建工具、单元测试框架、xml 文档框架等来构建一些重要的产品。

    【讨论】:

    • 如果可以从服务器上的 SVN 签出当前版本,为什么要 rsync?
    • 您如何跟踪数据库更改?我尝试将更改作为 sql 添加到单独的目录 /sql 中,但有时我会忘记这样做;这给我留下了一个“破碎”的承诺。
    • @bouke - 请参阅此帖子中链接的五个部分系列codinghorror.com/blog/archives/001050.html
    • @christian,rsync 具有差分同步(更快/更高效),允许反向同步,不强制签入同步,可管理的包含/排除列表,不同步 .svn 文件夹,并非所有站点都同步整个源代码并且通常具有构建系统。但大多数情况下,它更快且高度可配置。
    【解决方案2】:

    我使用这样的设置,所以我可以给你一些关于如何做到这一点的提示。我已经这样做了一段时间,在这里和那里解决问题,我觉得这是一个我可以诚实地说非常高效的设置。

    小记:我在 OSX 上工作,所以如果你是 linux/windows 用户,使用的特定应用程序可能会与你有点不同。

    我在我的 Mac 上运行一个生产“服务器”,使用 MAMP (www.mamp.info) 轻松地为我提供一个带有 PHP 和 MySQL 的 Apache 服务器。您可以使用类似的工具(例如 XAMPP)或手动安装所有内容,这完全取决于您。

    然后我有我的实时服务器,我的网站和客户网站都在其中托管。对于每个新的网站项目(我们以 abc.com 为例),我都会创建一个名为 staging.abc.com 的子域,并在其上进行测试。在实际上线之前在完全相同的硬件和软件上进行测试总是一件好事。

    我使用 Subversion(或简称 SVN)来满足我的版本控制需求,此外,每当我将新更新的版本发送到 SVN 服务器时,我可以轻松添加“挂钩”来自动更新我的在线生产服务器。 SVN 还允许您在同一个项目中轻松地与多个人一起工作。有关 SVN 以及如何使用它的更多信息,我建议在这里找到一本很棒的(免费的)在线书籍:http://svnbook.red-bean.com/

    简而言之:我在本地使用 MAMP 为我提供本地“工作”服务器。之后,我在 staging.abc.com 位置进行在线测试,看看是否一切正常,并且可能允许其他人看到该项目(如果您希望您的客户看到正在发生的事情,例如),然后我将项目实际发布到实际域中。

    还有很多事情可以用来优化您的工作流程,但这应该可以帮助您入门。

    希望这会有所帮助!

    -戴夫

    【讨论】:

      【解决方案3】:

      如果可能的话,我更喜欢在开发人员本地机器上进行开发。如果涉及到其他开发人员,您可能希望设置您的版本控制,以便数据库架构、javascript、css 和 php 代码都可以很容易地在开发人员的个人框中检出和设置(假设他们有正确的 LAMP/ WAMP 设置)

      我还看到人们在进行积极开发的服务器上维护一个测试网站。对于主动开发,我会避免这种情况,但将其用于对最新签入代码(最新版本)的黑盒测试。

      一旦您的测试网站签出,只需将代码从您的版本控制导出到实时网站所在的位置。使用 svn,您实际上可以只更新实时代码,使用 svn update 指定指示当前实时版本的修订版或标签。

      我进一步建议将一些设置(例如 db access/username/pass)保存在不受版本控制的单独包含文件中。将其保留在其他地方,让开发人员在他们的 PC 上插入对本地数据库的访问权限。在您的服务器上,插入访问数据库所需的一切。这应该是非常微不足道的代码(定义一些变量),因此不对其进行版本控制应该没什么大不了的。如果您愿意,您可以对模板版本进行版本控制,但我不会将真实的数据库信息放入版本控制中。

      【讨论】:

        【解决方案4】:

        如果您想使用 MAMP 或 WAMP 在本地开发,然后将其推送到 github,然后从 github 更新您的实时站点,这里是一个很好的起点: http://www.mybringback.com/bringers/14509/git-local-and-shared-server-development-environment-with-ssh-setup/

        希望对您有所帮助。

        【讨论】:

          猜你喜欢
          • 2018-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-27
          • 2011-06-19
          • 2013-07-14
          • 2012-05-21
          相关资源
          最近更新 更多