(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了该项目^^)
希望这有助于有点...
关于SVN,我会建议你去一个专门的SVN主机像豆茎或使用同一台服务器运行一个SVN服务器,这样既可以开发工作过它。
在后一种情况下,你的部署脚本只会位移至暂存Web文件夹(通过beta.mysite.com访问),然后又部署脚本可以将其移至实时Web目录。直接部署到实况网站显然不是一个好主意。
如果你决定使用一个专用的主机或想从你的机器部署到服务器,使用rsync。这也是我目前的设置。 RSync做差异同步(通过SSH),所以它很快,它是为这种东西而建造的。
当你成长,你就可以开始使用建立单元测试和诸如此类的东西的工具。这只留下数据同步问题。
我只从远程 - >本地同步数据,并使用DOS批处理文件通过SSH使用mysqldump来完成此操作。 Cygwin对Windows机器很有用,但可以跳过它。 SQL导入脚本还运行单行查询来更新某些单元,例如用于本地部署的主机名和Web根。
一旦你有了这个设置,您可以只专注于编写代码和远程部署或本地同步和deployement成为一个点击过程。
非常感谢。有时候,像你这样的努力让我感到惊讶,并以这样的细节和清晰度给出答案。 – zenna 2009-08-15 14:17:30
不客气:-)(我得到的一些答案和/或看到我感到惊讶;-)所以,当我可以帮助...嗯,这就是为什么! ) – 2009-08-15 14:25:41