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