Git:部署到具有不同Web根目录名称的环境

时间:2013-02-01 20:39:27

标签: git deployment development-environment expressionengine production-environment

我在多个环境中使用Git设置了ExpressionEngine站点:本地,开发和生产。

我有一些高于web root的目录,所以web根目录本身就在git repo中,如下所示:

  • 的.git
  • 系统
  • THIRD_PARTY
  • 模板
  • public_html(网络根目录)
    • 资产
      • CSS
      • JS​​
      • IMG
    • 主题
    • 的index.php

现在,我的开发和生产环境有两个独立的托管服务提供商,他们的网络根目录彼此不同。例如,开发名为public_html,但生产名称为content

当Web根目录具有不同的名称时,如何部署到这两种环境?

2 个答案:

答案 0 :(得分:4)

使用服务器上的符号链接将Web根指向适当的目录是一项历史悠久的技术。让我们假设你给你的Git Repo一个明显的名字:clientsite.com,所以你在那个文件夹里面:

  • 的.git
  • 系统
  • THIRD_PARTY
  • 模板
  • WEB_ROOT
    • 资产
      • CSS
      • JS​​
      • IMG
    • 主题
    • 的index.php
    • admin.php的

该文件夹上传到您的登台/生产服务器。然后,在登台服务器上,您将创建一个名为public_html的web_root的符号链接:

ln -s clientsite.com/web_root public_html

然后在生产服务器上,您将创建一个名为web_root的符号链接:

ln -s clientsite.com/web_root content


现在,关于这一点的好处是,如果你非常聪明并且正在使用MSM,你可以创建config.php和index.php文件,这些文件允许你在该EE安装中使用web_root用于所有域,并且只需创建符号每个站点的链接。例如:

ln -s clientsite.com/web_root siteone_html

ln -s clientsite.com/web_root sitetwo_html

然后在index.php中,查看HTTP_HOST服务器配置以设置site_name:

switch ( $_SERVER['HTTP_HOST'] ) {

    case 'siteone.com' :
    case 'dev.siteone.com' :
        $assign_to_config['site_name']  = 'siteone';
    break;
    case 'sitetwo.com' :
    case 'dev.sitetwo.com' :
        $assign_to_config['site_name']  = 'site two';
    break;
}

最后,你的config.php可以做一些非常相似的事情:

$config['site_index']   = "";
$config['site_url']     = "http://".$_SERVER['HTTP_HOST'];
$config['server_path']  = $_SERVER['DOCUMENT_ROOT'];
$config['cp_url']       = $config['site_url']."/".$config['system_folder'].'/index.php';

....stuff here...

switch ( $_SERVER['HTTP_HOST'] ) {

    // production
    case 'siteone.com' :
        $config['cookie_domain'] = ".siteone.com";
        $db['expressionengine']['hostname'] = "111.222.111.22";
        $db['expressionengine']['username'] = "siteone";
        $db['expressionengine']['password'] = "passone";
        $db['expressionengine']['database'] = "database_live";
        $db['expressionengine']['db_debug'] = FALSE; 
    break;

    // staging
    case 'dev.siteone.com' :
        $config['cookie_domain'] = "dev.siteone.com";
        $db['expressionengine']['hostname'] = "333.444.555.22";
        $db['expressionengine']['username'] = "siteone";
        $db['expressionengine']['password'] = "passone";
        $db['expressionengine']['database'] = "database_dev";
        $db['expressionengine']['db_debug'] = FALSE; 
    break;
}

通过这种方式,您可以拥有全局配置选项,也可以使用特定于站点的选项。

答案 1 :(得分:1)

考虑使用符号链接来创建虚假的webroots

我有以下设置:

<强>生产

  • public_site(实际git repo)
    • public(webroot)
    • system(ee system)
    • 模板
  • public_html(指向上述公共文件夹的符号链接)

<强>分段

  • staging_site
    • public(webroot)
    • system(ee system)
    • 模板
  • staging_html(指向上述公共文件夹的符号链接)

然后将服务器设置为将适当的主机指向相应的_html目录。