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 webmaster@localhost 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.
Autor:
Última actualización:
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.
Y siempre hay que agradecer los comentarios y más las críticas. 🙂 La tengo muy en cuenta y espero en la próxima revisión poner remedio. A ver si en un par de meses me pongo manos a la obra con un theme propio. Thx 🙂