什么是版本控制包含MediaWiki和WordPress安装的网站开发项目的好方法?

Men*_* Lu 1 svn version-control mercurial

我试图找出包含MediaWiki和WordPress安装的网站的版本控制程序.我刚开始考虑这些问题,我可能会问太快和模糊的问题.

说网站的根目录是

~/public_html
Run Code Online (Sandbox Code Playgroud)

有各种静态HTML页面

~/public_html/page1.html
~/public_html/dir/page2.html
...
Run Code Online (Sandbox Code Playgroud)

还有MediaWiki的安装

~/public_html/wiki/
Run Code Online (Sandbox Code Playgroud)

和WordPress

~/public_html/blog/
Run Code Online (Sandbox Code Playgroud)

以及可能具有数据库后端的其他webapp.

还有一些问题我不清楚

  • 如果我使用Subversion,我的第一步是什么?由于我已经在我的Web服务器计算机上运行了/ public_html,我是否需要首先将完整的/ public_html下载到我的本地开发计算机,然后将其作为项目提交到我的svn服务器(单独)?我有其他软件项目使用subversion进行版本控制.

  • 如果我使用Subversion,当我部署时,我只是检查一下,即服务器使用的网站是否是存储库的工作副本?MediaWiki和WordPress会被正确版本化吗?还有.svn目录呢?这不会暴露吗?

  • 除了版本控制/ public_html中的文件如何以与public_html中的文件精简的方式备份数据库?

  • 如果我使用Mercurial,我可以使用public_html作为存储库,并不一定需要克隆存储库?

dan*_*elv 8

我正在使用源代码控制,脚本和部署过程来管理一些Web应用程序项目,如wordpress,phpbb和自定义Web应用程序.多年来,我对这些进行了改进,现在我有了一个很好的框架,似乎对我有用,所以它可能适合其他面临类似挑战的人.

以下是有关整体策略的一般要点:

  • 我从未在生产服务器上安装SCM和源文件.我没有看到任何理由将其放在那里,通常我不希望在服务器泄露的情况下暴露存储库.生产服务器上的应用程序只有最新的稳定版本.没有项目文件,文档,单元测试等.任何不需要的东西都不存在.从安全性和应用程序稳定性的角度来看,我发现这非常重要.
  • 不要把它变成SCM辩论,但我发现,就我的目的而言,mercurial(和git)在任何方面都优于SVN.您不需要任何"服务器",并且存储库更易于维护.
  • 我为每个项目保留单独的存储库 Mercurial存储库既便宜又轻巧.将每个项目保存在自己的存储库中都具有很大的灵活性 所以没有一个"public_html"的大型存储库.
  • 我在开发机器上使用本地mercurial存储库.一切都按原样备份(使用任何备份策略 - 附加计算机,外部驱动器,云备份).共享代码就像给出项目目录一样简单.有时我会在dropbox上保存存储库,因此我可以从任何地方访问它们.
  • 部署由部署脚本自动完成(稍后将详细介绍).其中导出所需的修订版本,对其进行编辑并将其上载到服务器.
  • 数据库转储不存储在SCM中.对任何真实项目都不实用.我在SCM中存储数据库结构的转储,并在结构更改时更新它(我使用mysql dump或phpmyadmin).有时,在SCM中存储骨架数据的转储以及结构(具有默认值,查找值等的表)是有意义的.
  • 数据库备份由在生产服务器上运行的自动脚本(automysqlbackup运行良好)完成.转储数据库,存档并旋转文件(每月,每周,每天).还有一个脚本每天将备份转储文件下载到场外位置.这适用于具有相对中小数据大小的项目.显然,这需要改变大型数据库.
  • 我通常会为开发和制作保留单独的数据库实例.尽可能少地使用生产数据库.当我需要测试/调试某些内容时,我会使用实时数据的副本更新我的开发数据库.
  • 有时我在生产服务器上有我的应用程序的第二个副本用于分段/单元测试,但这在这里描述太多了.
  • 所有部署都通过SSH进行隧道传输,这是服务器上唯一允许的连接(当然,http/s除外).我在开发机器上保留了SSH密钥文件.或者,您可以使用VPN作为隧道.
  • 我正在假设linux/BSD生产服务器.所有这些在Windows服务器上将完全不同(通常更难).我在Windows,Mac和Linux开发机器上使用了这些程序,所有工具都可用.

所以,为了回答你的一些问题,我会反过来做.从开发机器上的工作环境开始(包括Web服务器和数据库).让您的应用程序在那里工作和测试.根据需要提交对本地存储库的更改.应用程序准备好部署后,运行部署脚本以自动更新生产站点.

我的部署脚本执行以下操作:

  • 将所需的修订导出到本地临时部署目录(mercurial,git,SVN都具有从存储库创建工作目录的导出命令)
  • 修改已部署的目录,使其适合实时部署.这包括修改配置文件,更改数据库名称,路径,日志设置,调试级别等.使用脚本,sed,awk,grep或任何所需的命令行工具.
  • 如果需要,从SCM修订数据生成version.txt(或任何名称)文件,部署日期等.这将上传到服务器.
  • 将我的SSH密钥添加到SSH代理(以避免每次使用密码).
  • 使用rsync,通过SSH隧道将所有内容同步到服务器.需要将服务器正确配置为rsync目标.使用rsync排除/包含过滤器来排除不需要的所有内容(通常是.*除了.htaccess).
  • 如果需要,使用SSH远程执行功能在服务器上运行命令,以执行设置特殊权限(例如,对Wordpress上载目录的写权限)等任务.
  • 给我一个很好的"部署成功"消息:)

就是这样,一旦脚本到位,部署就变得很有趣.运行一个脚本,进入实时服务器,看看一切正常,完成.

希望这可以帮助.