我有一个在多个环境中使用 Git 设置的 ExpressionEngine 站点:本地、开发和生产。
我有几个位于 web 根目录之上的目录,因此 web 根目录本身位于 git 存储库中,如下所示:
- .git
- 系统
- third_party
- 模板
- public_html(网络根目录)
- 资产
- .css
- .js
- 图像
- 主题
- 索引.php
- 资产
现在,我的开发和生产环境由 2 个独立的托管服务提供商使用,它们的 Web 根目录彼此具有不同的名称。例如,开发被命名为 public_html
,但生产被命名为 content
。
当 Web 根目录具有不同的名称时,如何部署到这两个环境?
在服务器上使用符号链接将 Web 根目录指向相应的目录是一种历史悠久的技术。 假设你给你的 Git Repo 起了一个明显的名字:clientsite.com,所以在该文件夹中你有:
- .git
- 系统
- third_party
- 模板
- web_root
- 资产
- .css
- .js
- 图像
- 主题
- 索引.php
- 管理员.php
- 资产
该文件夹将上载到暂存/生产服务器。 然后,在暂存服务器上,您将创建一个指向名为 public_html web_root的符号链接:
ln -s clientsite.com/web_root public_html
然后在生产服务器上,您将创建一个符号链接,指向web_root称为内容:
ln -s clientsite.com/web_root content
现在,这样做
的精彩之处在于,如果您非常聪明并且正在使用MSM,则可以创建配置.php和索引.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;
}
最后,你的配置.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;
}
通过这种方式,您可以拥有全局配置选项,然后也可以拥有特定于站点的选项。
研究使用符号链接创建虚假的网络根目录
我有以下设置:
生产
- public_site(实际的 git 存储库)
- 公共(网络根) 系统
- (EE系统)
- 模板
- public_html(指向上述公用文件夹的符号链接)
分期
- staging_site
- 公共(网络根) 系统
- (EE系统)
- 模板
- staging_html(指向上述公用文件夹的符号链接)
然后,将服务器设置为将相应的主机指向相应的_html目录。