我有两个开发环境:办公室的 PC(环境 1),家里的笔记本电脑(环境 2)。两台机器都运行 Ubuntu 15.10 和 Apache 2.4.12。完成后,项目将部署到公共 Web 服务器(环境 3)。我使用 Git 进行版本控制,使用 Bitbucket 进行分布式存储库管理。
我的项目是一个基于 WordPress 的网站。因此,我将 WordPress 根目录、一些额外的源目录和最新的 Mysql 数据库转储 SQL 文件添加到我目前正在处理的开发存储库中。如果我提取并签出其他环境上的最新分支更新,我也会在本地数据库上运行数据库转储文件。因此,开发环境始终保持一致,包括通过管理后端对 WordPress 所做的所有内容和设置更改。
但是,服务器名称仍然不同。WP(我认为其他 Web 应用程序也是如此)具有以下配置设置:主机名,它们存储在数据库中,但实际上在每个环境中都是不同的。Env1 可能在私有 IP 上运行,例如 192.168.xxx.yy,而 env2 可能未连接到 LAN,因此仅监听 localhost / 127.0.0.1,而 env3 将需要官方主机名,例如 mydomain.com。
我的问题是,如何配置 env1 和 env2 上的 Apache Web 服务器,让它们使用一些人工主机名,比如本地设备名称针对相应的虚拟主机?那么我可以设置 WP 配置hostname = localdevname:91
并在 env1 上调用 localdevname:91,该名称解析为 192.168.xxx.yy:91,而在 env2 上调用的 localdevname:91 将解析为 localhost:91?
我发现了一个类似的问题这里。但唯一的答案并不能解决我的问题。此外,我尝试了 ServerName、ServerAlias、VirtualHostName 指令,但没有成功。
答案1
我的建议是/etc/apache2/conf-available/network.conf
为每个环境创建一个不同的文件a2enconf
。这些文件可能如下所示:
/etc/apache2/conf-available/network.conf
在 env1 主机上
<VirtualHost 192.168.1.1:91>
ServerName localdevname
SetEnv environment env1
SetEnv dbserver 192.168.1.1
Include /etc/apache2/sites-available/wordpress-project.conf
</VirtualHost>
/etc/apache2/conf-available/network.conf
在 env2 主机上
<VirtualHost 127.0.0.1:91>
ServerName localdevname
SetEnv environment env2
SetEnv dbserver 127.0.0.1
Include /etc/apache2/sites-available/wordpress-project.conf
</VirtualHost>
/etc/apache2/conf-available/network.conf
在生产主机上
<VirtualHost 11.22.33.44:80>
ServerName mydomain.com
SetEnv environment prod
SetEnv dbserver mysql-prod.mydomain.com
Include /etc/apache2/sites-available/wordpress-project.conf
</VirtualHost>
您的wordpress-project.conf
配置文件和 WordPress 配置文件可以在所有主机上保持一致。它们可以利用环境变量来改变其行为。
此外,你可能会发现mod_macro才有用。
您还需要配置您的/etc/hosts
和/或本地 DNS 配置,以便按照localdevname
您想要的方式进行解析。