为本地开发/测试设置 Apache?

Posted

技术标签:

【中文标题】为本地开发/测试设置 Apache?【英文标题】:Set up Apache for local development/testing? 【发布时间】:2010-09-12 05:12:45 【问题描述】:

Rails 的截屏视频给我留下了深刻的印象,这些视频演示了内置的 Web 服务器和允许在本地机器上进行开发和测试的数据库。如何让 Apache 实例将项目目录作为其 DocumentRoot 执行,并可能在端口 8080(或类似端口)上提供文件?

我问的原因是我要试用 CodeIgniter,我想将它用于多个项目。我宁愿不要把我机器的 DocumentRoot 都弄得乱七八糟。也欢迎就如何进行数据库迁移提出建议。


感谢您迄今为止的回复。我应该澄清一下,我使用的是 Mac OS X。看起来 WAMP 仅适用于 Windows。此外,XAMPP 看起来是安装 Apache 和许多其他 Web 工具的好方法,但我看不到加载实例以提供项目目录的方法。 Mac OS X 同时安装了 Apache 和 php - 我只是在寻找一种方法让它在非标准端口上为项目提供服务。

我刚刚发现 MAMP Pro 可以满足我的需求,但如果可能的话,更简约的方法会更好。有没有人可以编辑httpd.conf 文件并将其放入项目目录中?

另外,很抱歉我刚刚提出了那个数据库迁移问题。我希望找到能够让我将架构更改推送到实时服务器而不丢失现有数据的东西。我怀疑这很困难并且高度依赖于环境因素。

【问题讨论】:

【参考方案1】:

您的 Mac 带有一个 Apache Web 服务器和一个 PHP 版本。这是该平台深受 Web 开发人员喜爱的重要原因之一。

由于您使用的是 Code Igniter,因此您需要 PHP 5,它是 PHP 10.5 附带的默认版本。如果您使用的是以前版本的操作系统,请转到 entropy.ch 并安装提供的 PHP5 包。

接下来,您需要打开 Apache。在共享首选项面板中,打开个人 Web 共享。这将在您的本地计算机上启动 apache。

接下来,您需要设置一些虚假的开发 URL 以用于您的网站。长期以来的传统是我们会为此使用伪造的 TLD .dev(例如 ***.dev)。但是,.dev 现在是一个实际的 TLD,所以您可能不想这样做——.localhost 似乎是一个新兴的事实标准。编辑您的 /etc/hosts 文件并添加以下行

127.0.0.1    www.example.localhost
127.0.0.1    example.localhost

这会将上述 URL 指向您的本地计算机。最后一步是配置 apache。具体来说,启用命名虚拟主机、启用 PHP 并设置一些虚拟主机。如果您使用了 entropy PHP 包,则启用 PHP 已经完成。如果没有,您需要按照here 的说明编辑您的 http.conf 文件。基本上,您取消注释将加载 PHP 模块的行。

每当您对 apache 配置进行更改时,您都需要重新启动 apache 以使更改生效。在终端窗口中,键入以下命令

sudo apachectl graceful

这将优雅地重新启动 apache。如果您在配置文件中出现语法错误,apache 将不会重新启动。您可以使用

突出显示配置问题
sudo apachectl configtest

因此,启用 PHP 后,您需要打开 NamedVirtualHosts。这将让 apache 响应多个 URL。在 http.conf 文件中查找以下(或类似的)行并取消注释。

#NameVirtualHost *  

最后,您需要告诉 apache 它应该在哪里为您的新虚拟主机查找文件。您可以通过将以下内容添加到您的 http.conf 文件来做到这一点。注意:我发现将这样的配置规则分解到一个单独的文件中并使用 include 指令包含您的更改是一个很好的最佳实践。这将阻止任何自动更新清除您的更改。

<VirtualHost *>
    DocumentRoot /Users/username/Sites/example.localhost
    ServerName example.localhost
    ServerAlias www.example.localhost
</VirtualHost>

您可以将任何文件夹指定为 DocumentRoot,但我发现使用您的个人站点文件夹很方便,因为它已经配置了包含文件的正确权限。

【讨论】:

我认为这是最好的方法,因为您不必弄乱 DNS、担心您的动态 IP 地址或其他任何事情。您可以运行本地网络服务器并输入您的“开发”网址,就像它们是真实网站一样。 这是最简单的方法,也是我衷心推荐的方法:) 很好的答案,并且在近十年后仍然相关。谢谢艾伦。 请注意.dev TLD 不再是假的。选择另一个或确保您的规则不会干扰您可能想要访问的任何网站。 @flugga 谢谢!尽管 .dev 是一个真实的东西现在让我翻白眼,你是对的。我已经更新了这个问题以反映当前的现实——10 年?!在原始答案之后。【参考方案2】:

抱歉,Kyle,我没有足够的信誉直接回复您的评论。但是,如果您想让每个项目在不同的端口上提供服务,请尝试像上面 Kelly 的那样设置您的虚拟主机配置(减去 DNS 的东西),除了 80 之外,给每个虚拟主机自己的端口号,假设您已将此端口添加到您的 ports.conf 文件中。

NameVirtualHost *

<virtualhost *:80>
DocumentRoot /site1/documentroot
</virtualhost>

<virtualhost *:81>
DocumentRoot /site2/documentroot
</virtualhost>

<virtualhost *:82>
DocumentRoot /site3/documentroot
</virtualhost>

<virtualhost *:83>
DocumentRoot /site4/documentroot
</virtualhost>

希望有帮助

【讨论】:

不完全是我所希望的,但已经足够好了。我想我会在 MAMP Pro 试用期结束时使用它。附言你现在应该有足够的代表发表评论了:)【参考方案3】:

我还为每个下载最新的二进制文件并手动设置它们。我发现这是一个轻松的过程,只要您对配置 Apache 有一点了解。

在我的开发机器上,我使用 name-based virtual hosting 设置了 apache。我还有一个dyndns.org 帐户,它将我的开发域映射到我的本地机器。 DynDNS 提供了一个通配符域,因此使用基于名称的虚拟主机,我可以轻松地为尽可能多的开发域创建尽可能多的站点(具有单独的文档根),所有站点都运行在一个 Apache 实例上。

例如虚拟主机的 Apache 配置可能类似于

NameVirtualHost *:80

<virtualhost *:80>
ServerName site1.mydyndns.dyndns.org
DocumentRoot /site1/documentroot
</virtualhost>

<virtualhost *:80>
ServerName site2.mydyndns.dyndns.org
DocumentRoot /site2/documentroot
</virtualhost>

这是我在本地机器上轻松维护许多开发站点的最快捷、最简单的方法。

我希望这是有道理的。

【讨论】:

这是个好主意,也很有意义;但是,我的开发机器是一台笔记本电脑,并且频繁地切换 IP 以使 DNS 跟不上。但是,可以在我的机器上设置我自己的 DNS 服务器并使用它。【参考方案4】:

我不使用 macOS,但我使用 Apache。在我的 apache 配置文件(在 Linux 上它通常位于 /etc/apache2/apache2.conf)中,查找对名为 ports.conf 的文件的引用。找到这个文件并添加行

Listen 8080

然后重启apache进程。在那之后,你应该做生意。如果这在 mac 上不起作用,我提前道歉:)

【讨论】:

这也适用于 Mac OS X,但它只会更改默认 httpd 进程所服务的端口。我的目标是为每个项目提供一个单独的端口。我怀疑这也将涉及每个项目的单独 httpd.conf。【参考方案5】:

您可以使用诸如XAMPP 之类的低端安装包并将其作为单独的实例运行。还有很多其他类似的项目。

【讨论】:

【参考方案6】:

对于 PHP,您有几个用于部署 Apache+mysql+PHP 的高质量包,例如 WAMP 和 XAMPP。就个人而言,我下载每个最新的二进制文件并手动安装以获得更细粒度的控制。有很多关于如何处理的在线教程。

数据库迁移应该很简单——在服务器上转储数据库,无论是在命令行还是通过PHPMyAdmin 等接口,然后以类似的方式将其导出(如果您没有使用 Mysql 的经验,建议使用 PHPMyAdmin命令行)。

【讨论】:

【参考方案7】:

您可以使用 MAMP pro,但免费版本也是一个很好的选择。在这里获取:http://www.mamp.info/en/mamp.html

【讨论】:

【参考方案8】:

我可能会建议为您希望试验的每个开发环境使用单独的 LAMP 虚拟设备。

在 VMware Server 或 VirtualBox 上运行它们。

【讨论】:

以上是关于为本地开发/测试设置 Apache?的主要内容,如果未能解决你的问题,请参考以下文章

Pyflink 本地开发与测试

用于本地开发的 Apache 单一动态虚拟主机配置

搭建本地SAE开发环境

Apache本地VirtualHost重定向到其他VirtualHost

在本地开发 Heroku PHP Facebook 应用程序时出现 500 错误

XAMPP Apache 站点根相关链接在本地工作,通过 LAN 上的远程计算机访问开发站点时失败