Todos aquellos que nos dedicamos al desarrollo y al diseño web y trabajamos con Apache estamos acostumbrados a crear virtualhost para cada uno de nuestros proyectos o desarrollos. En mi caso para la máquina de desarrollo (un portátil) suelo utilizar Cherokee, un servidor mucho más ligero y con un cómodo asistente web que ayuda tanto en su configuración como mantenimiento. Pero esa es otra historia.

En primer lugar advertir que en este post me estoy refiriendo a un entorno LAMP (Linux + Apache + MySQL + PHP), aunque en Windows gran parte seguirá siendo válido. Durante el Curso de Administración avanzada de Linux en el CTA, impartido por el genial Kenneth Peiruza, nos explicó algunos métodos que agilizan mucho la creación de un sitio web. Este post está basado en ello.

Una plantilla para unirlos a todos

Supongo que a estas alturas de la historia nadie compone un fichero de configuración de virtualhost desde cero o buscando por internet hasta que encuentra uno ya preparado cada vez que lo necesita. O por lo menos no debería. Ten siempre uno preparado en el directorio sites-available de tu Apache con el autoexplicativo nombre de plantilla y conteniendo aquellas opciones que sueles necesitar por defecto. En mi caso:

<VirtualHost *:80>
  ServerAdmin [email protected]
  ServerName plantilla
  DocumentRoot /var/www/virtuals/plantilla
  <Directory />
  	Options FollowSymLinks
  	AllowOverride None
  </Directory>
  <Directory /var/www/virtual/plantilla>
  	Options FollowSymLinks
  	AllowOverride All
  	Order allow,deny
  	allow from all
  </Directory>
  ErrorLog ${APACHE_LOG_DIR}/plantilla-error.log
  # Possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/plantilla-access.log combined
</VirtualHost>

Obviamente nada tan simple como con tu editor de texto favorito sustituir la cadena plantilla en todo el fichero por el nombre del site y lo guardas con el nombre que tú elijas. A continuación incluimos el nombre de dominio para que nuestro servidor web identifique el site correctamente.

Incluir el nombre de dominio

Bueno, ahora que ya tenemos creado el virtualhost falta poder acceder a él desde un navegador. Como ya sabéis la resolución del site que debe de mostrar Apache se determina según el URI que recibe del navegador y que coincidirá con la cláusula servername del fichero de configuración del virtualhost.

Generalmente en un entorno de desarrollo no tenemos funcionando un servidor DNS, que es lo que solemos tener desplegado en producción. Así pues con incluir la información de dominio en nuestro archivo /etc/hosts será suficiente. En mi caso:

127.0.0.1	localhost
127.0.0.1	mi-host
127.0.0.1	oscargascon.es
127.0.0.1	plantilla.local

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Puesta en marcha del site

Una vez tenemos el archivo de configuración creamos el directorio correspondiente en nuestro sistema de ficheros. Supongamos que siguiendo el estandar en /var/www/. Recuerda que debe de coincidir con tu configuración en el punto anterior.

mkdir /var/www/nombre-del-site

Y ahora ya podemos poner en marcha el site. Desde linea de comandos.

en2site nombre-del-site

Recuerda también que generalmente el usuario que corre apache es www-data, así que por seguridad y para evitarnos problemas de servicios, recuerda que los propietarios de los ficheros debe de ser www-data, así como el grupo. Tener los permisos adecuados también pueden quitarte algún quebradero de cabeza, así que 755 serán unos permisos adecuados para los ficheros (permisos de lectura/escritura para el propietario y lectura para todos los demás).

Instalando los ficheros

Asumiendo que vamos a utilizar algún Framework, CMS etc tenemos que ser perfectamente capaces desde la linea de comando tanto de descomprimir un fichero como clonar un repositorio. Hagamos las dos cosas como ejemplo.

Imaginemos que queremos instalar el Application Skeleton de Zend Framework 2. Sabemos que se encuentra publicado en GitHub, así que tiene que ser muy sencillo de duplicar. Con el siguiente comando podemos obtener comodamente su contenido directamente donde queramos.

git clone git://github.com/zendframework/ZendSkeletonApplication.git

Por supuesto si no contamos con un repositorio Git desde donde obtener nuestro paquete o no tenemos instalada esta herramienta, podemos utilizar el tradicional wget y luego descomprimir.

wget https://packages.zendframework.com/releases/ZendFramework-2.1.5/ZendFramework-2.1.5.tgz
tar xvzf ZendFramework-2.1.5.tgz

Importante: Recuerda los permisos de ficheros.

¿MySQL? Sí por favor

Hoy en día el 99% de las webs trabajan con persistencia de datos. O lo que es lo mismo, almacenamos datos de usuarios, productos e incluso el propio contenido en tablas y bases de datos. En esta ocasión elegiremos MySQL como paquete de BD.

Suponiendo que lo tengamos instalado y tengamos una Debian (o una distro basada en ella), con dos lineas de comando podemos tener nuestra base de datos y su usuario con privilegios creados. Debian almacena las credenciales del usuario administrador de MySQL en un fichero que sólo se puede acceder con root para no tener que validarnos con contraseña. Esto es realmente útil en el caso de automatizar scripts y vamos a sacarle partido ahora.

mysqladmin --defaults-file=/etc/mysql/debian.cnf create plantilla

Por supuesto sustituiremos el nombre de plantilla por el nombre de la BD que queremos crear. A continuación le asignamos privilegios con otra utilidad de comandos que viene con el paquete MySQL.

mysql_setpermission

A través de un sencillo interfaz de texto, al estilo de fdisk, podemos crear un usuario (o los que queramos) con permisos en la nueva base de datos que acabamos de crear. Cómodo y fácil, sin utilizar PhpMyAdmin o los comandos GRANT de MySQL.

Y ahora sustituyamoslo por un script

Los scripts de shell son herramientas poderosas. Podemos ahorrarnos el trabajo manual con un simple script que cree tantos virtualhost como necesitemos con unas pocas lineas de código. Asumiendo que tenemos incluidos en el archivo /tmp/sites los nombres de sitios a crear:

for i in $(cat /tmp/sites ); do echo "Creando $i"; sed "s/template/$i/g" template > $i ; a2ensite $i ; mkdir /var/www/$i ; echo "127.0.1.1 $i" >> /etc/hosts ; done

Con pocas lineas tendríamos todo el trabajo hecho a excepción de las BD, que tampoco nos supondría mucho trabajo. Como siempre se agradecen comentarios y críticas.

Comparte si te ha gustado

Autor:
Última actualización:

2 comentarios

  1. hola oscar, siento ser tan molesto, pero me he pasado por tu web a echar un vistazo y si me permites una pequeña critica constructiva, siempre constructiva y con toda mi buena fe, ya que eres uno de mis super heroes favoritos, jajaja

    cuesta un poco leer tu blog, el tipo de letra no es muy legible, es sólo mi humilde opinión.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.