|
如何最好地设置我的PHP(LAMP)开发拥有开发、登台和生产服务器,开发环境。一键部署到任何一个,一键回滚到任何修改版本。回滚还应将数据库模式和数据回滚到当前源代码的状态。
. f+ K: J' J8 s' s现在,我已经用过了Shell脚本为一个应用程序完成所有这些操作(数据库回滚功能除外)。我很好奇如何设置他人的环境,以及是否有任何一般的工具或最佳的布局实践。$ e6 K: ^, c+ m7 j. t6 J( S
那么,你是怎么做到的呢?您使用了哪些现有工具?. |5 v8 r2 o2 H( _
谢谢!' H/ D* ?9 n9 Q% r+ [! L! i; E
更新:请澄清,因为我感兴趣的内容有点混乱。) s+ m! v/ L/ ?' N1 w( U* I/ Y
我真的希望人们能了解他们的环境设置。
- }7 k: \( Z6 |) M# A; G- F! {假如你操作一个PHP你应该如何控制项目和你的数据库架构?你用什么工具?他们能在公司内部还是我们能在网上找到?( N" I U! j. U
假如你操作一个PHP您将如何进行项目和提交(和/或每晚)的自动化测试?您使用什么源版本的控制系统?你用过吗?SVN并在提交后的挂钩中进行测试?7 O. g7 I, C4 G) P+ a' _
如果您运行多个开发服务器、登台服务器和生产服务器PHP如何组织和部署项目?5 {$ o1 i" p* m5 j: a
希望从中得到启发的是一个好主意,那就是别人如何把一切都粘在一起。
; f3 D* ^! c* l5 q; [2 P: j
7 `$ a+ q& n$ q- d+ Z8 j 解决方案: , z% z2 b, y% T' Y
我们的生产环境包括以下内容:) K7 E0 N6 o! c
三个前端为我们的网站提供服务
7 @& q' Q! @* X) C! [7 F9 e% ?% C# X2个数据库后端(主从,复制), |6 B# Q3 _# b( ^ X! K# q+ e
1混合运行httpd广告数据库我们的开发环境是同时运行数据库和httpd在配置方面,我们为每个安装程序提供了不同的工作区域VC是Subversion。过渡也很简单-
" N7 D" e+ a- J8 X* |9 Q! I, Y4 O6 m它在前端之一上运行。3 {6 }# J+ o: f# \1 B
数据库变更
3 x ~4 `) g8 w. ~起初,我们在数据库设计上花了很多时间,似乎真的收获了。在过去的五个月里,我们没有做出任何重大改变。我们部署的大部分变化都在前端。到目前为止,我们手动更改了数据库,我总是写一个小脚本来恢复。1 p5 ^% P W3 V
如果我有更多这些,我可以在这里使用理论和迁移。事实上,我从来没有机会在生产中使用它们,但我已经广泛使用它们,它们似乎非常强大。1 \2 K7 @. L4 @: T2 r7 I5 h
部署方式
. F1 O3 X, q" I. a w" y因此,每当我们部署新版本时,我们都会创建一个代码标签,以便在登台时签字,然后通过一系列检查和其他操作将代码部署到生产前端。为了完成所有的部署,我在那里Capistrano设置了几个任务。
' }6 O+ M1 [* h2 \9 X看看这个样本capfile:
7 P- A; `4 w e0 t Rrole :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在不定义任务的情况下,允许您操作任何其他命令:. k& q3 b) e: C, t- Z
cap invoke COMMAND="uptime" ROLES=web(需要设置 角色 “ web.见上述示例。
2 E+ y6 L$ w/ }* B, D% V/ t编码样式和文档0 m* G1 a0 U0 W( P3 D
我们几乎遵守PEAR我们使用编码标准PHP_CodeSniffer(phpcs)检查。当我说很多话时,我的意思是我分叉了提供的嗅探,并添加了一些我自己的困惑例外。
+ {' \8 W( Y: h& D, E# N+ t! {4 O除编码风格外,phpcs还检查内联文档。该文档最后由phpDocumentor创建。
/ `+ ?# o$ n: _: FCI. W4 N) \1 Z" v; _" }9 R0 q# F6 m6 |
我有这些工具同时安装在我们身上。CI服务器(连续的集成
1 O; Q* @& c3 O: S3 `1 I }),这是phpUnderControl使用上述和CruiseControl的,PHPUnit的,Xdebug(一对夫妇代码测量......)等。& a: ]0 r" x9 Q' X2 t
单元测试是我们目前所缺乏的。但我们现在要做的是在分析引擎中发现每一个错误(将文本分析为某些格式)后,我们会编写测试,以确保它不会再次出现。我还编写了一些基本的测试来检查URL路由和内部XMLRPC
! w% l) c7 y0 A8 \API,但这确实需要改进。我们同时采用了phpUnit风格测试和phpt。: d. t; I8 S9 h
在CI服务器 构建 一个新版本,每天生成几次图表、文档和各种报表。3 Z [0 ?1 l, W
除上述所有工具外,我们还使用它们Google Apps(主要用于电子邮件),并保留所有其他文件Google Sites
9 K$ `! d5 [! k7 n% u, b2 Y, x0 XWiki。例如,部署过程、质量检验测试列表等。 |
|