使用Phing创建Apache虚拟主机
Phing是使事物自动化的强大工具,并且我越来越多地使用它来使各种不同的任务自动化。我不太愿意做的所有任务之一就是在开发机器上为Apache建立新的本地虚拟主机。我知道该怎么做,但是总会有我忘记做的事情,或者是我没有遵循的约定,这意味着我必须在以后的日子重复我自己来解决我错过的事情。
为了让我的生活更轻松,我决定创建一个Phing构建文件来自动创建虚拟主机以及与之关联的所有内容。本质上,我将需要执行以下任务:
创建一个虚拟主机目录。
在Apache中设置虚拟主机指令。
将其他条目添加到主机文件。
重新启动Apache服务器。
创建虚拟主机时,我需要使用某种名称来创建虚拟主机,而不是在运行构建文件之前对参数进行硬编码,因此我决定使用propertyprompt任务。该任务将暂停执行构建文件,直到用户在命令窗口中输入了一些文本为止。该任务用于设置sitename属性,该属性将在稍后的过程中使用。
<propertyprompt propertyName="sitename" defaultValue="" promptText="Enter site name" />
当然,我们希望在此处进行一些错误检测,因此,如果用户未输入任何内容,那么简单的if语句将阻止运行构建文件。如果用户在提示中输入了内容,则我们将继续调用createsite phing目标。
<if><equals arg1="${sitename}" arg2="" casesensitive="false" />
<then>
<echo>No site entered, quiting.</echo>
</then>
<else>
<phingcall target="createsite" />
</else>
</if>
我们几乎准备开始构建创建虚拟主机的目标,但是我想要的这个构建文件是要能够在多个系统上运行,而不必更改构建文件或询问有关它们是什么系统设置的另一个问题。使用。这对我来说至关重要,因为我倾向于在Linux和Windows平台上工作很多。因此,我需要一种自动检测正在使用的操作系统并采取相应措施的方法。这意味着我可以将构建文件放到我的Dropbox文件夹(或类似文件夹)中,然后从当时使用的任何系统运行该文件。
内置的Phing参数host.os可在此处用于确定相关系统类型。如果系统是Linux,则将调用createlinuxsite目标;如果系统是Windows(在host.os参数中称为WINNT ),则将调用createwindowssite目标。我们剩下的看起来有些复杂,但是它本质上是一个嵌套的if语句,它调用一个目标或另一个目标,或者只是在找不到主机的情况下打印出一条消息。
<propertyprompt propertyName="sitename" defaultValue="" promptText="Enter site name" /><if>
<equals arg1="${sitename}" arg2="" casesensitive="false" />
<then>
<echo>No site entered, quiting.</echo>
</then>
<else>
<if>
<equals arg1="${host.os}" arg2="Linux" casesensitive="false" />
<then>
<phingcall target="createlinuxsite" />
</then>
<elseif>
<equals arg1="${host.os}" arg2="WINNT" casesensitive="false" />
<then>
<phingcall target="createwindowssite" />
</then>
</elseif>
<else>
<echo>Host type "${host.os}" not found.</echo>
</else>
</if>
</else>
</if>
在开始创建构建目标之前,我们必须首先创建一个名为vhost.conf的文件,这将是一个默认的vhosts文件,该文件将用于在Apache配置中生成虚拟主机条目。以下是Ubuntu的默认vhost配置,但有一些细微差别。字符串####用于替换运行构建文件时输入的虚拟主机的名称。
<VirtualHost *:80>ServerName ####.local
ServerAlias www.####.local
ServerAdmin [email protected]
DocumentRoot /var/www/####/public_html/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/####/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
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
</VirtualHost>
按照我在文章开头详细介绍的说明来完成Linux目标的创建。这是最终的目标。
<target name="createlinuxsite"><!-- Target for creating a linux virtual host -->
<echo>Creating www.${sitename}.local</echo>
<!-- create site directory -->
<mkdir dir="/var/www/${sitename}/public_html" />
<!-- write vhosts file with the information -->
<copy file="linuxvhost.conf" tofile="/etc/apache2/sites-available/${sitename}" overwrite="true">
<filterchain>
<replaceregexp>
<regexp pattern="####" replace="${sitename}" ignoreCase="true" />
</replaceregexp>
</filterchain>
</copy>
<!-- update hosts file -->
<php expression="chr(10)" returnProperty="LF"/>
<append destFile="/etc/hosts" text="${LF}127.0.0.1 www.${sitename}.local" />
<!-- apply site and reload apache configs -->
<exec command="a2ensite ${sitename}" />
<exec command="apache2ctl -k restart" />
</target>
我在其中添加了注释,以便清楚地了解正在发生的事情,但是可能无法立即清除的一件事是:
<php expression="chr(10)" returnProperty="LF"/><append destFile="/etc/hosts" text="${LF}127.0.0.1 www.${sitename}.local" />
如果您不熟悉Phing,则可能不确定这是怎么回事,但是我们正在使用PHP分配带有换行符的变量(通过调用chr(10)创建)。然后,我们使用该变量将一行文本添加到hosts文件,确保将其打印在自己的一行上。
为了使它起作用(由于某些文件的权限),您将需要以root身份运行构建文件,如下所示。
sudo phing -f build.xml
这已在最新版本的Ubuntu(11.10)上进行了测试,因此您的工作量可能会因所运行的系统而异。
在Windows上运行此命令基本上意味着一些不同的文件夹以及一些不同的命令。我必须更改的一件事是Apachehttpd.conf文件中的vhosts设置。在Windows上,默认情况下,它指向“ conf / vhosts.con”中的单个文件。只需在conf目录中创建一个名为vhosts的目录,然后将此设置更改为“ conf / vhosts / *”即可。这将拾取该目录中的所有内容,因此我们要做的就是为每个虚拟主机添加一个新文件。
经过反复试验,我意识到创建虚拟主机条目的最佳方法是将虚拟主机模板分为Linux和Windows版本。这可以通过变量来完成,但是这种方式维护起来稍微容易一些。
<VirtualHost *:80>ServerName ####.local
ServerAlias www.####.local
ServerAdmin [email protected]
DocumentRoot "C:/var/srv/####/public_html/"
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory "C:/var/srv/####/public_html/">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog logs/####_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog logs/####_access.log combined
</VirtualHost>
有了这个,我们现在可以创建Windows目标。
<target name="createwindowssite"><!-- Target for creating a windows virtual host -->
<echo>Creating www.${sitename}.local</echo>
<!-- create site directory -->
<mkdir dir="C:\var\srv\${sitename}\public_html" />
<!-- write vhosts file with the information -->
<copy file="windowsvhost.conf" tofile="C:\Apache Software Foundation\Apache2.2\conf\vhosts\${sitename}.conf" overwrite="true">
<filterchain>
<replaceregexp>
<regexp pattern="####" replace="${sitename}" ignoreCase="true" />
</replaceregexp>
</filterchain>
</copy>
<!-- update hosts file -->
<php expression="chr(10)" returnProperty="LF"/>
<append destFile="C:\WINDOWS\system32\drivers\etc\hosts" text="${LF}127.0.0.1 www.${sitename}.local" />
<!-- restart apache -->
<exec command="httpd -k restart" />
</target>
综合所有这些,我们剩下以下内容:
<?xml version="1.0"?><project name="control" default="main">
<target name="main">
<propertyprompt propertyName="sitename" defaultValue="" promptText="Enter site name" />
<if>
<equals arg1="${sitename}" arg2="" casesensitive="false" />
<then>
<echo>No site entered, quiting.</echo>
</then>
<else>
<if>
<equals arg1="${host.os}" arg2="Linux" casesensitive="false" />
<then>
<phingcall target="createlinuxsite" />
</then>
<elseif>
<equals arg1="${host.os}" arg2="WINNT" casesensitive="false" />
<then>
<phingcall target="createwindowssite" />
</then>
</elseif>
<else>
<echo>Host type "${host.os}" not found.</echo>
</else>
</if>
</else>
</if>
<echo>Done!</echo>
</target>
<target name="createlinuxsite">
<!-- Target for creating a linux virtual host -->
<echo>Creating www.${sitename}.local</echo>
<!-- create site directory -->
<mkdir dir="/var/www/${sitename}/public_html" />
<!-- write vhosts file with the information -->
<copy file="linuxvhost.conf" tofile="/etc/apache2/sites-available/${sitename}" overwrite="true">
<filterchain>
<replaceregexp>
<regexp pattern="####" replace="${sitename}" ignoreCase="true" />
</replaceregexp>
</filterchain>
</copy>
<!-- update hosts file -->
<php expression="chr(10)" returnProperty="LF"/>
<append destFile="/etc/hosts" text="${LF}127.0.0.1 www.${sitename}.local" />
<!-- apply site and reload apache configs -->
<exec command="a2ensite ${sitename}" />
<exec command="apache2ctl -k restart" />
</target>
<target name="createwindowssite">
<!-- Target for creating a windows virtual host -->
<echo>Creating www.${sitename}.local</echo>
<!-- create site directory -->
<mkdir dir="C:\var\srv\${sitename}\public_html" />
<!-- write vhosts file with the information -->
<copy file="windowsvhost.conf" tofile="C:\Apache Software Foundation\Apache2.2\conf\vhosts\${sitename}.conf" overwrite="true">
<filterchain>
<replaceregexp>
<regexp pattern="####" replace="${sitename}" ignoreCase="true" />
</replaceregexp>
</filterchain>
</copy>
<!-- update hosts file -->
<php expression="chr(10)" returnProperty="LF"/>
<append destFile="C:\WINDOWS\system32\drivers\etc\hosts" text="${LF}127.0.0.1 www.${sitename}.local" />
<!-- restart apache -->
<exec command="httpd -k restart" />
</target>
</project>
尽管此构建文件是在考虑本地开发的情况下创建的,但我确信它可以修改为在任何Apache Web服务器上创建虚拟主机。还可以将其扩展为包括自定义变量或虚拟主机设置,但是此构建文件是使事情就位并快速工作的理想选择。可以单独添加任何自定义详细信息。
以上是 使用Phing创建Apache虚拟主机 的全部内容, 来源链接: utcz.com/z/349175.html