Ir al contenido principal

Shell Scripting: script para crear un virtualhost en apache



Muchos de nosotros trabajamos con un servidor web local para nuestros proyectos, por lo general tenemos más de un proyecto en desarrollo, sea de trabajo o personal. En sistemas Unix la carpeta raíz del servidor se encentra en /var/www/ , al empezar en un nuevo proyecto creamos una nueva carpeta en la raíz del servidor /var/www/mi_blog/ accediendo a este desde la dirección http://localhost/mi_blog/ ,   trabajar de esta manera no es la más cómoda posible, configurando la directiva VirtualHost del servidor Apache podríamos usar http://mi_blog.com/ dando la sensación de trabajar con un dominio real.

Existen muchos tutoriales acerca de como configurar un VirtualHost en Apache, lo que yo vengo a mostrarles cómo crear un script que nos cree automáticamente un VirtualHost y la estructura de carpetas para todos los proyectos que nosotros deseemos, así ahorrándonos tiempo al tener que configurar manualmente cada VirtualHost para cada proyecto.

Script Bash para crear VirtualHost

Antes que nada es importante saber que es Bash.
Bash es un programa informático, cuya función consiste en interpretar órdenes, y un lenguaje de programación de consola. [Wikipedia] 
Básicamente lo que queremos hacer es un script bash que nos cree un virtualhost, y la estructura de carpetas, para un proyecto. Entonces nuestro script tendrá que recibir como parámetros: el nombre del proyecto y el usuario al cuál pertenecerá el proyecto.

sudo vh miblog.com $USER

Donde vh será el nombre del script que crearemos, miblog.com es el nombre del proyecto y $USER es el usuario que ejecuta el script, esto es necesario para poder ponernos como propietario de la carpeta del proyecto y podamos escribir en la carpeta.

Bien teniendo en claro lo que nuestro script debe hacer y como funcionar, vamos a crearlo.

Lo primero que tenemos que hacer es crear nuestro script en la dirección /usr/local/bin/  para poder ejecutarlo desde cualquier parte de nuestro sistema. 

Abrimos una terminal y escribimos el siguiente comando: 

sudo touch /usr/local/bin/vh

Con esto habremos creado nuestro script, pero ahora tenemos que darle permisos para que pueda ejecutarse, lo hacemos con el siguiente comando:

sudo chmod +x /usr/local/bin/vh

Muy bien ahora nuestro script puede ejecutarse, pero aún no tiene ninguna instrucción dentro por lo que lo abriremos en un editor para poder escribir en ella:

sudo nano /usr/local/bin/vh

Se nos abrirá un editor de texto en la consola, estará vacío porque como dijimos aún no tiene ninguna instrucción, copiamos las siguientes instrucciones que serán las que realicen la creación del virtualhost y la estructura de archivos.

#!/bin/bash

RED='\033[0;31m'
NC='\033[0m' # No Color
BLUE='\033[0;34m'

printf "\n\t\t${BLUE}[CREANDO VIRTUAL HOST]${NC}\n\n"

if [ $# -lt 2 ]; then
    printf "${RED}[ERROR]\t${NC}Parametros Incompletos\n"
    printf "${BLUE}[USO]\t${NC}sudo vh web.site \$USER\n"
    exit 1
fi

if ! [ $(id -u) = 0 ]; then 
 printf "${RED}[ERROR]\tPermisos denegados${NC}\n"
 printf "${BLUE}[USO]\t${NC}sudo vh web.site \$USER\n"
 exit 1 
fi

printf "\n${BLUE}>> Creando carpetas para [$1] ${NC}\n"
mkdir -p /var/www/$1/public_html
printf "\n${BLUE}>> Estableciendo permisos para usuario [$2] en sitio [$1] ${NC}\n"
chown -R $2:$2 /var/www/$1/
chmod -R 755 /var/www

printf "\n${BLUE}>> Creando archivos de configuracion para sitio [$1] ${NC}\n"
touch /etc/apache2/sites-available/$1.conf
echo "
  ServerAdmin admin@$1
  ServerName $1
  ServerAlias www.$1
  DocumentRoot /var/www/$1/public_html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
 " > /etc/apache2/sites-available/$1.conf

printf "\n${BLUE}>> Habilitando sitio [$1] ${NC}\n\n"
a2ensite $1.conf
printf "\n${BLUE}>> Reiniciando apache2 ${NC}\n"
/etc/init.d/apache2 restart
printf "\n${BLUE}>> Añadiendo sitio [$1] a host[local]${NC}\n"
echo "127.0.0.1  $1" >> /etc/hosts
printf "\n${BLUE}>> VIRTUALHOST PARA SITIO [http://$1] HABILITADO${NC}\n"

Una vez tengamos copiado las instrucciones, tenemos que guardar el archivo para ello presionamos la combinación de teclas Ctrl + o, luego presionamos Enter, y finalmente presionamos Ctrl + x para cerrar el archivo.

Con esto ya tenemos nuestro script listo para poder ser usado, abrimos la terminal y escribimos el comando:

sudo vh miblog.com $USER

Al ejecutar nos pedirá la contraseña(root), pues necesita permisos para poder crear los archivos de configuración del virtualhost. Si todo nos salio bien veremos una pantalla similar a esta:


  • Es importante también especificar que el script nos resaltará error en dos situaciones, primero si no ejecutamos el script como root (con el comando sudo), segundo si no pasamos los 2 parámetros necesarios para la ejecución del script.


Error: Parámetros incompletos.

Error: Falta comando sudo.

Con esto tendremos nuestro sitio en funcionamiento en la dirección http://miblog.com, Es importante recalcar que nuestros archivos "index.html" o "index.php" tienen que ir en la carpeta:
 /var/www/miblog.com/public_html/


➜ Aquí pueden descargar el script en GitHub: Script-VirtualHost
➜ Aquí tienen la documentación de bash: GNU-Bash

Comentarios

Entradas populares de este blog

Pokemon en JavaScript usando Programación Orientada a Objetos - Prototipos

ABSTRACT — Este proyecto tiene como fin dar a conocer el gran potencial que tiene un lenguaje como Javascript usando POO – Prototipos, para el desarrollo de aplicaciones simples hasta muy completas. En este proyecto se desarrolló un pequeño juego, en consola, el cual emula un escenario de batalla entre dos entrenadores pokemones, usando la popularidad que obtuvo Pokemon en los últimos meses se decidió usar la trama de Pokemon para dar a conocer el gran potencial que tiene Javascript. I. Introducción JavaScript es un lenguaje basado en objetos que, en lugar de estar basado en clases, se basa en prototipos. Debido a esta diferencia, puede resultar menos evidente que JavaScript te permite crear jerarquías de objetos y herencia de propiedades y de sus valores. Los lenguajes orientados a objetos basados en clases, como Java y C++, se basan en la existencia de dos entidades distintas: clases e instancias. Una clase define todas las propiedades (considerando como propiedades l