我租了一个 VPS (Linux - Fedora),它被用作 Web 服务器,用于开发和生产同一个 Web 应用程序。
我有 yum 安装的 apache、subversion 和运行 PHP 所需的所有软件包。
在 apache 中,我创建了两个虚拟主机:
dev.mydomain.com (for ongoing development, /var/domains/dev.mydomain.com/public_html )
www.mydomain.com (for production, /var/domains/www.mydomain.com/public_html )
将只有一名开发人员,他将使用 Netbeans 作为 Windows XP 上的 IDE。
我可以想象他要做的第一件事就是从 SVN 存储库中签出一份副本到他在 Netbeans 中的计算机上。我要做的是在这些文件夹上设置两个 SVN 存储库。
/var/domains/dev.mydomain.com/public_html
/var/domains/www.mydomain.com/public_html
因此,当他对本地副本进行一些更改并提交更改时,他可以在浏览器上访问dev.mydomain.com以查看页面并进行代码调试。
后来当他认为dev.mydomain.com中的代码可以用于生产时,他可以使用 Netbeans 将更改提交到www.mydomain.com。
上面的场景有什么问题吗?这是应该如何设置这样的网络服务器吗?
假设您正在做纯 HTML/图形设计,这应该没问题。如果父亲是动态的,特别是如果它正在做任何复杂/有趣/棘手的事情,我不会将我的生产箱设置为我的开发箱。
您想要一个尽可能像您的生产环境的开发环境,并且使用同一个盒子确实可以做到这一点,但存在一些问题。最重要的是,您可以降低您的生产箱测试您的新开发。无限循环、没有正确退出的函数、数据库混乱……所有这些(以及更多)都会对您的生产环境产生负面影响。
如果您不进行内部开发,我的第一个倾向是租第二个盒子。我的第二个倾向是买一个便宜的搅拌器盒,你可以在上面复制环境。硬件的匹配程度不如软件重要。例如,在我的上一份工作中,我们在一个托管地安装了高端小型企业独立服务器来处理我们的生产环境。我们的测试环境是一对 eMachines。
回顾一下:如果您正在进行任何动态 Web 开发,我不会使用生产来测试它。获得第二个托管环境,或购买一个打浆机并进行相同的设置。
我认为存储库信息存储在工作副本中,因此它不会提交到指定的任何位置。此外,信息以数据库格式存储,而不是存储在为客户端存储的熟悉的目录/目录/目录/file.html 文件夹结构中。
你想要的是rsync。开发人员将像您概述的那样从 subversion repo 进行正常的 svn 签出,但是当他准备好推送到生产环境时,您或他将通过 ssh 登录服务器并执行
rsync -av --cvs-exclude /var/domains/dev.mydomain.com/public_html /var/domains/www.mydomain.com/public_html
. 这列出了所有已更新并同时复制到生产环境的内容,.svn 目录除外至少对于小型项目来说,能够自动提交和发布是很方便的,但是真正的部署脚本(例如,使用 rsync 正如@Kevin M 建议的那样)可以更好地控制和隔离生产环境。例如,一些框架依赖于特定的目录设置(对于缓存,tmp 目录),保留在颠覆中是没有意义的。部署脚本可以确保这些目录存在具有适当的权限等。
如果要自动发布提交,则需要做几件事:
此外,如果您依赖已安装的软件(php、python 等)。在将软件推向生产之前,您需要制定一个如何执行升级并在开发中测试它们的计划。这在单个盒子上更难做到。