如何在不同的本地开发环境中设置 Apache2 以使用相同的人工主机名?

如何在不同的本地开发环境中设置 Apache2 以使用相同的人工主机名?

我有两个开发环境:办公室的 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您想要的方式进行解析。

相关内容