(php/mysql)部署到共享主机的最佳做法?

问题描述:

我曾在一家网站开发公司工作过,我们拥有本地机器,登台服务器和大量生产服务器。我们在perl中使用mac,并使用svn提交阶段,并将perl脚本加载到生产服务器。现在我正在开发自己的项目,并希望在使用共享虚拟主机时不要使用基于unix的环境(使用perl/bash脚本/ cron作业等所有功能)来寻找Web开发的良好实践。(php/mysql)部署到共享主机的最佳做法?

所以我的问题是给我的条件,它们分别是:

  • 我使用共享网络的单一标准从外部供应商托管(通过SSH访问)
  • 我有至少一个其他人的工作并打算使用SVN进行源代码管理
  • 我在Windows下开发php/mysql(但使用linux是可能的)

你建议测试,部署,代码/数据迁移的建议是什么?我在本地机器上安装了xampp服务器,但不确定哪些方法用于在Windows下迁移数据等。

我有一些PHP个人项目共享托管;这里有几个想法,从我正在做的其中一个(最活跃的一个,需要一些至少半自动化的同步方式)

有关我的设置:

  • 前段时间,我把所有东西都放在SVN上;现在,我正在使用bazaar;但这个想法是完全一样的(除了与商场,我有当地的历史和所有)
  • 我必须到生产服务器的SSH访问,像你这样
  • 我工作在Linux上exclusivly (所以,我做什么,可能无法与Windows一样容易)

现在,我是如何工作的:有

  • 一切TE是生产服务器(源代码,图像上,.. )将提交给SVN/bazarr /不管
  • 我在本地工作,与Apache/PHP/MySQL的(我用的是生产DB的转储,我在一段时间导入本地一次)
  • 只有我一个在这个项目上工作;对于2/3开发人员的小团队来说,这可能是可以的,但不会更多。

我所做之前:

  • 我有这样的检查SVN服务器之间进行一些修改PHP脚本“最后一次修订推到生产”和HEAD
    • 我猜这自制PHP脚本看起来像您当前使用的Perl脚本^^
  • 该脚本构建了要上传到生产的目录/文件列表
  • 并通过FTP上传这些访问
  • 这不是很令人满意(我的脚本中有错误,我从来没有花时间去纠正这些);并强迫我记得我最后一次推送到生产时间的版本号(当然,它会自动存储在由脚本文件,所以并不难^^)

我现在在做什么:

  • 当切换到商场,我不想重写剧本,这不我已经放弃了脚本完全
  • 当我有到生产服务器ssh访问工作得很好反正
  • ,我使用rsync进行同步从我的开发机到生产服务器,当我已在本地被认为是稳定/生产就绪。

有关的做的事情,这样对夫妇的注意事项:

  • 我没有中间服务器:我的本地设置是足够接近生产不是有一个
  • 临时服务器为一个或两个developpers
  • 如果我有一个临时服务器一个简单的项目好,我可能会一起去:
    • 当你想要做的STA上有一个“SVN更新” GE
    • ,如果是OK,启动从临时服务器的rsync命令(其将在最新的“稳定”修订BA,这样可以被推到生产)
  • 一个比较大的项目,更开发人员,我可能不会去那种设置;但我觉得这对一个(不太大)的人际项目来说确实很不错。


这里唯一的“特殊”,可能是“面向Linux”使用rsync;快速搜索似乎表明有一个可以在Windows上安装了rsync的可执行文件:http://www.itefix.no/i2/node/10650

我从来没有尝试过,但。


一点题外话,这里就是我的rsync命令看起来像:

rsync --checksum \ 
    --ignore-times \ 
    --human-readable \ 
    --progress \ 
    --itemize-changes \ 
    --archive \ 
    --recursive \ 
    --update \ 
    --verbose \ 
    --executability \ 
    --delay-updates \ 
    --compress --skip-compress=gz/zip/z/rpm/deb/iso/bz2/t[gb]z/7z/mp[34]/mov/avi/ogg/jpg/jpeg/png/gif \ 
    --exclude-from=/SOME_LOCAL_PATH/ignore-rsync.txt \ 
    /LOCAL_PATH/ \ 
    [email protected]:/REMOTE_PATH/ 

我使用私有/公共密钥mecanism,所以rsync的不要求输入密码,顺便说一句。

,当然,我一般在“干运行”模式下使用相同的命令第一,看什么将要synchorised,还可以选择“--dry-run

而且ignore-rsync.txt包含的列表我不希望文件推送到生产:

.svn 
cache/cbfeed/* 
cache/cbtpl/* 
cache/dcstaticcache/* 
cache/delicious.cache.html 
cache/versions/* 

在这里,我只是防止缓存目录被推到生产 - 似乎是合乎逻辑不发送这些,因为生产数据是不一样的发展数据。

(我只注意到有仍然是“.svn”在这个文件......我可以去掉它,因为我不使用SVN了该项目^^)


希望这有助于有点...

+1

非常感谢。有时候,像你这样的努力让我感到惊讶,并以这样的细节和清晰度给出答案。 – zenna 2009-08-15 14:17:30

+1

不客气:-)(我得到的一些答案和/或看到我感到惊讶;-)所以,当我可以帮助...嗯,这就是为什么! ) – 2009-08-15 14:25:41

关于SVN,我会建议你去一个专门的SVN主机像豆茎或使用同一台服务器运行一个SVN服务器,这样既可以开发工作过它。

在后一种情况下,你的部署脚本只会位移至暂存Web文件夹(通过beta.mysite.com访问),然后又部署脚本可以将其移至实时Web目录。直接部署到实况网站显然不是一个好主意。

如果你决定使用一个专用的主机或想从你的机器部署到服务器,使用rsync。这也是我目前的设置。 RSync做差异同步(通过SSH),所以它很快,它是为这种东西而建造的。

当你成长,你就可以开始使用建立单元测试和诸如此类的东西的工具。这只留下数据同步问题。

我只从远程 - >本地同步数据,并使用DOS批处理文件通过SSH使用mysqldump来完成此操作。 Cygwin对Windows机器很有用,但可以跳过它。 SQL导入脚本还运行单行查询来更新某些单元,例如用于本地部署的主机名和Web根。

一旦你有了这个设置,您可以只专注于编写代码和远程部署或本地同步和deployement成为一个点击过程。

+0

谢谢,我一直在使用SVN主机的组合,所以我不能真正在该服务器上执行脚本。 – zenna 2009-08-15 14:18:24

+0

由于代码在您的机器上同步,所以您可以将脚本从您自己的机器上运行(或者您的合作伙伴可以在他的机器上运行它们)。脚本也可以签入到软件仓库。 – aleemb 2009-08-15 22:47:22

一种选择是使用专用框架的任务。 Capistrano非常适合脚本语言,如php。它基于Ruby,但如果您执行搜索,则应该能够找到有关如何使用它来部署php应用程序的说明。