apacheComo parte de mi trabajo como desarrollador, con frecuencia tengo que probar diferentes sistemas o scripts (escritos generalmente en PHP), tales como CMS, blogs, galerías, shopping carts, etc. por lo cual, me veo en la necesidad de instalarlos en mi pc. Trabajo en una máquina con Ubuntu Gutsy, con apache2, mysql 5, y php 5.

Acostumbro tener cada script en un directorio dedicado y crear un host virtual en apache para cada script. Estos scripts están accesibles localmente en mi pc. Mi preferencia es inventar un nombre de dominio ficticio el cual configuro localmente en mi pc, creando una entrada en el archivo de hosts ( /etc/hosts ) de mi pc, para no trabajar con el típico localhost. He venido usando nombres de dominio con la extension .us (por ningun motivo en especial, simplemente se me ocurrió).

Un buen día, se me hizo tedioso el proceso que tenia que hacer para configurar uno de estos hosts en mi pc, tarea repetitiva, y como todo buen programador decidí escribir un pequeño script para automatizar esta tarea.

El script es sencillo, está escrito en bash. Y a continuación lo pongo a disposición de todo aquel que guste leerlo, usarlo y/o modificarlo. La advertencia que hago es que solo esta probado bajo ubuntu con apache2 como webserver.

Como se usa? muy facil:

sudo create_vhost nombredeldomino.extension [caracter opcional extra]

Ejemplo:

sudo create_vhost midominio.us 2

Nota: el argumento ‘2′ que pongo en el ejemplo es opcional. Acostumbro nombrar mis dominios de prueba de la forma www2.midominio.us, el caracter ‘2′ es para eso, pero si omites el 2, el vhost se creara como www.midominio.us.

El script hara lo siguiente:

-Crear el archivo del vhost en tu /etc/apache2/sites-available

-Crear el enlace simbólico requerido en /etc/apache2/sites-enabled apuntando al archivo mencionado en la linea anterior.

-Crear una entrada en el archivo /etc/hosts para crear el dominio ficticio que estará disponible solo localmente apuntando a la ip local 127.0.0.1

-Crear el directorio donde se instalará el script en /var/www[2]/midominio.us

-En mi caso particular, también copia la librería de depuración que utilizo para mis scripts php en ese directorio… pero eso no lo incluyo aquí, ya que eso es tema aparte. Esas líneas las exclui del script que aqui publico.

-Por ultimo, reinicia el servidor web apache.

Nota: es importante correr el comando con sudo, ya que de otra manera el script no podrá realizar los cambios necesarios en el sistema, dado que el usuario normal no tiene privilegios suficientes. Para mayor facilidad, yo recomiendo ponerlo en /bin/ para que esté disponible siempre sin proveer la ruta, y luego darle la propiedad de ejecutable ( sudo chmod a+x /bin/create_vhost ).

Para descargar el código hacer click aquí

El código es este:

#!/bin/sh    

#get domain name from parameter
domain=$1;    

#if no domain provided, die
if [ -z $domain ] ; then
	echo "missing domain name"
	exit
fi     

#if second parameter provided use it
alt_www=$2;    

#get count of sites in apache
site_count=`find /etc/apache2/sites-enabled/ -type l |wc -l`    

#figure out number format depending of count
if [ $site_count -lt 10 ] ; then
	site_count_formatted="00${site_count}"
elif [ $site_count -lt 100 ] ; then
	site_count_formatted="0${site_count}"
else
	site_count_formatted=$site_count
fi    

#set some variables
adminemail="user@domain.com"
sites_available_dir="/etc/apache2/sites-available"
sites_enabled_dir="/etc/apache2/sites-enabled"
sites_available_file="${sites_available_dir}/${domain}"
sites_enabled_file="${sites_enabled_dir}/${site_count_formatted}-${domain}"
document_root="/var/www${alt_www}/${domain}/"    

#create vhost for apache
touch $sites_available_file
echo "" > $sites_available_file
echo "        ServerName www${alt_www}.${domain}" >> $sites_available_file
echo "        ServerAdmin ${adminemail}" >> $sites_available_file
echo "        DocumentRoot /var/www${alt_www}/${domain}" >> $sites_available_file
echo "        ErrorLog /var/log/apache2/${domain}.error.log" >> $sites_available_file
echo "        CustomLog /var/log/apache2/${domain}.access.log combined" >> $sites_available_file
echo "" >> $sites_available_file
echo "        " >> $sites_available_file
echo "                Options FollowSymLinks" >> $sites_available_file
echo "                AllowOverride None" >> $sites_available_file
echo "        " >> $sites_available_file
echo "" >> $sites_available_file
echo "        " >> $sites_available_file
echo "                Options Indexes FollowSymLinks MultiViews" >> $sites_available_file
echo "                AllowOverride All" >> $sites_available_file
echo "                Order allow,deny" >> $sites_available_file
echo "                allow from all" >> $sites_available_file
echo "        " >> $sites_available_file
echo "        LogLevel warn" >> $sites_available_file
echo "        ServerSignature Off" >> $sites_available_file
echo "" >> $sites_available_file
ln -s $sites_available_file $sites_enabled_file    

#create entry in the hosts file
echo "127.0.0.1	www${alt_www}.${domain}" >> /etc/hosts    

#create the directories
mkdir -p ${document_root}    

#restart apache
/etc/init.d/apache2 restart