使用Phing创建Apache虚拟主机
Phing是使事物自动化的强大工具,并且我越来越多地使用它来使各种不同的任务自动化。我不太愿意做的所有任务之一就是在开发机器上为Apache建立新的本地虚拟主机。我知道该怎么做,但是总会有我忘记做的事情,或者是我没有遵循的约定,这意味着我必须在以后的日子重复我自己来解决我错过的事情。
为了让我的生活更轻松,我决定创建一个Phing构建文件来自动创建虚拟主机以及与之关联的所有内容。本质上,我将需要执行以下任务:
创建一个虚拟主机目录。
在Apache中设置虚拟主机指令。
将其他条目添加到主机文件。
重新启动Apache服务器。
创建虚拟主机时,我需要使用某种名称来创建虚拟主机,而不是在运行构建文件之前对参数进行硬编码,因此我决定使用propertyprompt任务。该任务将暂停执行构建文件,直到用户在命令窗口中输入了一些文本为止。该任务用于设置sitename属性,该属性将在稍后的过程中使用。
当然,我们希望在此处进行一些错误检测,因此,如果用户未输入任何内容,那么简单的if语句将阻止运行构建文件。如果用户在提示中输入了内容,则我们将继续调用createsitephing目标。
No site entered, quiting.
我们几乎准备开始构建创建虚拟主机的目标,但是我想要的这个构建文件是要能够在多个系统上运行,而不必更改构建文件或询问有关它们是什么系统设置的另一个问题。使用。这对我来说至关重要,因为我倾向于在Linux和Windows平台上工作很多。因此,我需要一种自动检测正在使用的操作系统并采取相应措施的方法。这意味着我可以将构建文件放到我的Dropbox文件夹(或类似文件夹)中,然后从当时使用的任何系统运行该文件。
内置的Phing参数host.os可在此处用于确定相关系统类型。如果系统是Linux,则将调用createlinuxsite目标;如果系统是Windows(在host.os参数中称为WINNT),则将调用createwindowssite目标。我们剩下的看起来有些复杂,但是它本质上是一个嵌套的if语句,它调用一个目标或另一个目标,或者只是在找不到主机的情况下打印出一条消息。
No site entered, quiting. Host type "${host.os}" not found.
在开始创建构建目标之前,我们必须首先创建一个名为vhost.conf的文件,这将是一个默认的vhosts文件,该文件将用于在Apache配置中生成虚拟主机条目。以下是Ubuntu的默认vhost配置,但有一些细微差别。字符串####用于替换运行构建文件时输入的虚拟主机的名称。
ServerName ####.local ServerAlias www.####.local ServerAdmin [email protected] DocumentRoot /var/www/####/public_html/ Options FollowSymLinks AllowOverride All Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all ErrorLog ${APACHE_LOG_DIR}/####_error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/####_access.log combined
按照我在文章开头详细介绍的说明来完成Linux目标的创建。这是最终的目标。
Creating www.${sitename}.local
我在其中添加了注释,以便清楚地了解正在发生的事情,但是可能无法立即清除的一件事是:
如果您不熟悉Phing,则可能不确定这是怎么回事,但是我们正在使用PHP分配带有换行符的变量(通过调用chr(10)创建)。然后,我们使用该变量将一行文本添加到hosts文件,确保将其打印在自己的一行上。
为了使它起作用(由于某些文件的权限),您将需要以root身份运行构建文件,如下所示。
sudophing-fbuild.xml
这已在最新版本的Ubuntu(11.10)上进行了测试,因此您的工作量可能会因所运行的系统而异。
在Windows上运行此命令基本上意味着一些不同的文件夹以及一些不同的命令。我必须更改的一件事是Apachehttpd.conf文件中的vhosts设置。在Windows上,默认情况下,它指向“conf/vhosts.con”中的单个文件。只需在conf目录中创建一个名为vhosts的目录,然后将此设置更改为“conf/vhosts/*”即可。这将拾取该目录中的所有内容,因此我们要做的就是为每个虚拟主机添加一个新文件。
经过反复试验,我意识到创建虚拟主机条目的最佳方法是将虚拟主机模板分为Linux和Windows版本。这可以通过变量来完成,但是这种方式维护起来稍微容易一些。
ServerName ####.local ServerAlias www.####.local ServerAdmin [email protected] DocumentRoot "C:/var/srv/####/public_html/" Options FollowSymLinks AllowOverride All Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all ErrorLog logs/####_error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog logs/####_access.log combined
有了这个,我们现在可以创建Windows目标。
Creating www.${sitename}.local
综合所有这些,我们剩下以下内容:
No site entered, quiting. Host type "${host.os}" not found. Done! Creating www.${sitename}.local Creating www.${sitename}.local
尽管此构建文件是在考虑本地开发的情况下创建的,但我确信它可以修改为在任何ApacheWeb服务器上创建虚拟主机。还可以将其扩展为包括自定义变量或虚拟主机设置,但是此构建文件是使事情就位并快速工作的理想选择。可以单独添加任何自定义详细信息。