用于部署到我们服务器的 PHP 代码组织

Posted

技术标签:

【中文标题】用于部署到我们服务器的 PHP 代码组织【英文标题】:PHP code organization for deployment to our servers 【发布时间】:2012-01-30 22:30:56 【问题描述】:

我们刚刚为我们的新系统安装了新服务器,我想知道我应该怎么做才能使我的新代码尽可能高效,以及如何组织它。

我想要一个好的解决方案,这样我就不必在一年后重新组织它(例如),我想要最佳实践和技术来确保我的代码能够存活足够长的时间以避免以后重新设计它。 此处不使用框架

这是我的新环境:

8 个网络服务器 LAMP(Apache 2、php 5.3.5、CentOS 5)-(XeonE5645、32 GB RAM、RAID 10 1 TB 15k RPM)-一个负载均衡器来管理它们 12 个数据库 mysql 5.5 服务器(同上),带复制功能(四主八从) 一个SVN 服务器(我们使用的旧服务器)

我的想法是镜像它们(Web 服务器),然后将代码从 SVN 推送到所有服务器。这样好吗?

【问题讨论】:

svn 服务器和 web 服务器在同一个网络上吗?或者您将 svn 托管在不属于您的单独域上? svn 服务器在同一个 ip 范围内,所以是在与服务器相同的网络上,但不能从外部访问 【参考方案1】:

您可以将您的代码集中在一个公共文件夹中(或者创建一个将所有代码复制到八台服务器的脚本,或者使用NFS)。

此集中式代码可以在您的 SVN 安装中的一个或多个存储库中。所以当你推送的时候,你只推送你需要推送的东西。

例如,您可以为自己的 PHP 库(数据库类、XML、IMAP 等)创建一个存储库。在一个简单的结构中,当您调用这些文件时,您只需执行以下操作:

require('/web/lib/DatabaseMySQL.class.php');

这样,您可以在同一个地方了解所有需要的文件,并且非常易于维护。特别是如果您的代码需要需要文件的所需文件。

您可以根据需要创建任意数量的存储库,如果您不想混淆文件 - 例如第三方(Smarty、PHPMailer)与您创建的代码,请重复此操作。

另一件事是,不要重新发明***。那里有很多好的代码可能会做你已经需要做的事情。就像发送电子邮件(PHPMailer 或任何其他)或模板系统(Smarty 或任何其他)。这样,您的开发时间和更新时间相同,如果有更新,您只需下载、复制(如果您在存储库中有,则提交)并推送。

脚本 VS NFS.

创建一个脚本以将您的所有代码推送到八个 Web 服务器中很容易。这样做的缺点是您需要确保每台服务器上的所有文件夹和所有文件都相同,以避免错误。

此外,如果您的网络出现延迟或在推送期间连接中断,则某些服务器将不会有相同的代码。再次,更多的错误。与NFS 解决方案相比,这运行起来要快一些。

创建NFS 可以解决上述问题,因为您只使用一个位置,但如果该位置丢失,您的所有服务器都将无法正常运行。因此,当您推送代码时,您只推送到一个地方,所有其他服务器都会自动拥有新代码。您还需要知道:这会比代码直接在硬盘驱动器上要慢一些。

这是您可以使用的示例脚本:

您可以创建一个 .sh 脚本,将代码从您的存储库(例如,您从存储库签出的代码)复制到所有服务器,如下所示:

// file: pushcode.sh
#!/bin/bash
/usr/bin/rsync -avz --exclude='.svn' -e ssh /path/to/code/checkedout/ user@server1:/path/to/code
/usr/bin/rsync -avz --exclude='.svn' -e ssh /path/to/code/checkedout/ user@server2:/path/to/code

使这个脚本可执行并运行它:

./pushcode.sh

为了确保代码复制正确而不每次都提示密码,您必须bypass the SSH login。

这是一个你可能会喜欢的好消息:https://serverfault.com/questions/195035/linux-nfs-performance-vs-other-file-systems

【讨论】:

谢谢你,非常有用。我认为从脚本开始,一开始似乎更容易,关于脚本有什么建议吗?我该怎么做?

以上是关于用于部署到我们服务器的 PHP 代码组织的主要内容,如果未能解决你的问题,请参考以下文章

基于php-fpm方式部署LAMP

php网站部署两套代码在两台服务器上面,如何做到上传文件同步

php怎么把程序部署到nginx服务器

将 JAVA 战争部署到动态网站性能问题

用于CI和CD部署的BlackDuck扫描集成

PHP web项目(数据库)上线部署到服务器