小编典典

设置一个PHP Web项目,基础架构

sql

如何最好地设置我的PHP(LAMP)开发环境,以便拥有开发,登台和生产服务器。一键式部署到任何一个,以及一键式回滚到任何修订版。回滚还应将数据库模式和数据回滚到该源代码为当前源时的状态。

现在,我已经使用Shell脚本为一个应用程序完成了所有这些操作(数据库回滚功能除外)。我很好奇要知道如何设置其他人的环境,以及是否有任何通用工具或最佳实践可用于布局方面。

那么,你如何做到这一点?您使用哪些现有工具?

谢谢!

更新:请澄清一下,因为我感兴趣的内容有些混乱。

我真的希望人们对他们的环境设置有所了解。

如果您运行一个PHP项目并且您的数据库架构处于版本控制中,您该如何做?您使用什么工具?它们在公司内部还是我们都可以在网上找到它们?

如果您运行一个PHP项目并且对提交(和/或每晚)进行自动化测试,您将如何做?您使用什么源版本控制系统?您是否使用SVN并在提交后的挂钩中运行测试?

如果您运行具有多个开发服务器,登台服务器和生产服务器的PHP项目,则如何组织它们以及如何进行部署?

我希望从中得到启发的是一个很好的主意,即其他人如何将所有东西粘合在一起。


阅读 150

收藏
2021-04-15

共1个答案

小编典典

我们的生产环境包括以下内容:

  • 为我们的网站提供服务的3个前端
  • 2个数据库后端(主从,复制)
  • 1混合运行httpd和数据库进行广告

我们的开发环境是一台同时运行数据库和httpd的服务器,在配置方面,我们为每个安装程序提供了不同的工作区,并且VC是Subversion。过渡也很简单-
它在前端之一上运行。

数据库变更

最初,我们在数据库设计上花费了很多时间,而且似乎确实收获了。五个月以来,我们没有进行任何重大更改。我们部署的大多数更改都在前端。现在,到目前为止,我们手动对数据库进行了所有更改,并且我始终编写了一个小的脚本来还原。

如果我有更多这些,可以在这里使用“学说”和“迁移”。实际上,我从来没有机会在生产中使用它们,但是我已经广泛使用了它们,它们似乎非常强大。

部署方式

因此,每当我们部署新版本时,我们都会创建一个代码标签,以便在登台时签出,然后通过一系列检查等操作,然后将代码部署到生产前端。为了完成所有部署,我在Capistrano中设置了几个任务。

看看这个样本capfile

role :www, "web01", "web02", "web03"
role :web, "web01", "web02", "web03", "web04"
role :db, "db01", "db02"

desc "Deploy sites"
task :deploy, :roles => :www do
    run "cd /usr/www/website && sudo svn --username=deploy --password=foo update"
end

Capistrano还允许您运行任何其他命令而无需定义任务:

cap invoke COMMAND="uptime" ROLES=web

(需要设置 角色 “ web”。请参见上面的示例。)

编码样式和文档

我们几乎遵守PEAR编码标准,我们使用PHP_CodeSniffer(phpcs)进行检查。当我说很多话时,我的意思是我分叉了所提供的嗅探,并添加了一些我自己的迷惑性例外。

除了编码风格之外,phpcs还检查内联文档。该文档最后由phpDocumentor创建。

CI

我同时拥有这些工具安装在我们的CI服务器(的 连续的集成
),这是phpUnderControl使用上述和CruiseControl的,PHPUnit的Xdebug的(一对夫妇代码度量......)等。

单元测试是我们目前缺乏的东西。但是我们现在要做的是,在解析引擎中发现每个错误(将文本解析为某些格式)后,我们都会编写测试以确保它不会再次出现。我还编写了一些基本测试来检查URL路由和内部XMLRPC
API,但这确实有待改进。我们同时采用了phpUnit风格的测试和phpt

在CI服务器 构建 一个新的版本,每天几次,生成图表,文档和各种报表。

除了上述提到的所有工具之外,我们还使用Google Apps(主要用于电子邮件),并保留带有所有其他文档的Google Sites
Wiki。例如,部署过程,质量检查测试列表等。

2021-04-15