【问题标题】:Git: Deploying to Environments with Different Web Root Directory NamesGit:部署到具有不同 Web 根目录名称的环境
【发布时间】:2013-01-17 06:07:48
【问题描述】:

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

我有几个位于 web 根目录之上的目录,因此 web 根目录本身位于 git repo 中,如下所示:

  • .git
  • 系统
  • 第三方
  • 模板
  • public_html(网络根目录)
    • 资产
      • CSS
      • js
      • img
    • 主题
    • index.php

现在,我的开发和生产环境拥有 2 个独立的托管服务提供商,并且它们的网络根名称彼此不同。例如,开发被命名为public_html,而生产被命名为content

当 web 根目录具有不同的名称时,我如何部署到这两个环境中?

【问题讨论】:

  • Git 是版本控制。它与部署无关。你用什么来部署?
  • 我使用 Beanstalk 进行部署。

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


【解决方案1】:

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

  • .git
  • 系统
  • 第三方
  • 模板
  • web_root
    • 资产
      • CSS
      • js
      • img
    • 主题
    • index.php
    • admin.php

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

ln -s clientsite.com/web_root public_html

然后在生产服务器上,您将创建一个名为 content 的指向 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 服务器配置以设置站点名称:

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;
}

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

【讨论】:

    【解决方案2】:

    研究使用符号链接来创建虚假的 webroots

    我有以下设置:

    生产

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

    分期

    • 暂存站点
      • 公共(webroot)
      • 系统(ee系统)
      • 模板
    • staging_html(指向上述公用文件夹的符号链接)

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

    【讨论】:

    • 你能给我更多的信息来帮助我开始吗?
    猜你喜欢
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2018-12-03
    • 2012-04-12
    • 2012-08-03
    • 2012-07-18
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多