回答

收藏

设置一个PHP Web项目,基础设施

技术问答 技术问答 208 人阅读 | 0 人回复 | 2023-09-14

如何最好地设置我的PHP(LAMP)开发拥有开发、登台和生产服务器,开发环境。一键部署到任何一个,一键回滚到任何修改版本。回滚还应将数据库模式和数据回滚到当前源代码的状态。
2 i! c0 L- j& [+ C/ }现在,我已经用过了Shell脚本为一个应用程序完成所有这些操作(数据库回滚功能除外)。我很好奇如何设置他人的环境,以及是否有任何一般的工具或最佳的布局实践。
# R1 o7 }; x& K+ ?3 ~那么,你是怎么做到的呢?您使用了哪些现有工具?: a" ~: h/ F4 U$ _  I
谢谢!0 Q8 D8 q+ m: B
更新:请澄清,因为我感兴趣的内容有点混乱。
1 {2 U+ Y4 c) n' e$ Z我真的希望人们能了解他们的环境设置。
, \$ q( I" V5 C) f假如你操作一个PHP你应该如何控制项目和你的数据库架构?你用什么工具?他们能在公司内部还是我们能在网上找到?9 J. V2 [- x: H9 e2 n) R
假如你操作一个PHP您将如何进行项目和提交(和/或每晚)的自动化测试?您使用什么源版本的控制系统?你用过吗?SVN并在提交后的挂钩中进行测试?8 l6 G7 s5 _( d# K8 ]0 J$ Z
如果您运行多个开发服务器、登台服务器和生产服务器PHP如何组织和部署项目?" Y- P1 R6 R8 i3 l% y* N( `! T0 v
希望从中得到启发的是一个好主意,那就是别人如何把一切都粘在一起。
* _; ?+ @: ~/ O; l. e  F  C. x                                                                , c6 m3 h( T5 L; U% Y: f0 c
    解决方案:                                                                $ @4 j2 |$ G6 Z" M, H. D% K# x) D
                                                                我们的生产环境包括以下内容:3 D, |' W' U- ^/ G! F  K1 {) T/ \
三个前端为我们的网站提供服务" N7 P; d0 y) Q1 ?( x" Q$ Z& N4 v
2个数据库后端(主从,复制)
5 d1 i( o" G* u7 d2 @6 o) A; c/ D1混合运行httpd广告数据库
我们的开发环境是同时运行数据库和httpd在配置方面,我们为每个安装程序提供了不同的工作区域VC是Subversion。过渡也很简单-
8 h/ {/ W) G7 n+ |8 r( ^! B它在前端之一上运行。. w6 R9 d% y9 J3 d+ e0 _
数据库变更6 d: o. x! {$ d$ t: T8 k
起初,我们在数据库设计上花了很多时间,似乎真的收获了。在过去的五个月里,我们没有做出任何重大改变。我们部署的大部分变化都在前端。到目前为止,我们手动更改了数据库,我总是写一个小脚本来恢复。
* X: g* i6 [, g. w! f% B如果我有更多这些,我可以在这里使用理论和迁移。事实上,我从来没有机会在生产中使用它们,但我已经广泛使用它们,它们似乎非常强大。
+ _' k& L5 L3 O4 t9 _3 V部署方式
2 Z) d$ x/ w- e9 c因此,每当我们部署新版本时,我们都会创建一个代码标签,以便在登台时签字,然后通过一系列检查和其他操作将代码部署到生产前端。为了完成所有的部署,我在那里Capistrano设置了几个任务。
1 \- j& f5 k* @" B# ~, U* N& F看看这个样本capfile:( _1 }# K) P+ x% T* X& u! ?0 Y
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"endCapistrano在不定义任务的情况下,允许您操作任何其他命令:
' c& E  M7 b- F; ~0 K; Ncap invoke COMMAND="uptime" ROLES=web(需要设置 角色    “ web.见上述示例。( ~& ]/ v( W. D: {; y; _$ |) s
编码样式和文档$ a& e8 u$ p. s6 b! z/ B1 Y2 ?
我们几乎遵守PEAR我们使用编码标准PHP_CodeSniffer(phpcs)检查。当我说很多话时,我的意思是我分叉了提供的嗅探,并添加了一些我自己的困惑例外。
* K. h9 K4 @& T8 Q; n0 ]$ V6 k( Y; T" P除编码风格外,phpcs还检查内联文档。该文档最后由phpDocumentor创建。
% L& E. u8 M4 Z% h0 z4 ^CI8 ^; z7 d$ P/ Z. l8 _) ^6 s
我有这些工具同时安装在我们身上。CI服务器(连续的集成
  p# k* |4 K: U9 |6 [- G),这是phpUnderControl使用上述和CruiseControl的,PHPUnit的,Xdebug(一对夫妇代码测量......)等。2 X" a* W; b& U3 V
单元测试是我们目前所缺乏的。但我们现在要做的是在分析引擎中发现每一个错误(将文本分析为某些格式)后,我们会编写测试,以确保它不会再次出现。我还编写了一些基本的测试来检查URL路由和内部XMLRPC
$ a2 P% S6 e# ^( m! }: p  i) OAPI,但这确实需要改进。我们同时采用了phpUnit风格测试和phpt。0 q8 u# o1 |! Q' j: E
在CI服务器 构建    一个新版本,每天生成几次图表、文档和各种报表。4 I1 q9 k5 Q. f# B9 r" {
除上述所有工具外,我们还使用它们Google Apps(主要用于电子邮件),并保留所有其他文件Google Sites
5 V) Y1 K5 f' I2 F) IWiki。例如,部署过程、质量检验测试列表等。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则