Un multihost en un VPS

Este es uno de los capítulos del tutorial Servidor virtual. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Una de las utilidades, mas evidentes, mas evidentes, que podemos dar a nuestro VPS es como servidor de páginas web. Ya he comentado, en otros artículos, lo fácil que es montar una infraestructura LAMP, incluso montar una infraestructura LAMP en una Raspberry. Sin embargo, en este artículo, voy a ir un paso mas allá. En este artículo vas a poder leer como montar un multihost en un VPS.

Probablemente, te estes preguntando para que puedes querer un multihost en un VPS. Las posibilidades que te ofrece un multihost, son muy variadas, desde alojar varias páginas web, a alojar diferentes servicios. Y es que no solo de páginas web vive el hombre. También es posible, que necesites tener un punto donde trabajar con aplicaciones web, o con cualquier otro tipo de aplicaciones.

Multihost en un VPS

Multihost en un VPS

¿Porque me he decidido por montar un multihost en un VPS?

Te cuento mi experiencia, y a lo mejor esto te aclara mis ideas. Actualmente, tengo en marcha tres páginas web, esta que estás leyendo y otras dos. Sin embargo, a cada una de ellas, le presto una atención desigual, porque el propósito de cada una de ellas es diferente.

De las tres páginas, ésta, es la que mas tráfico tiene, mientras que las otras dos tienen muy poco. En este sentido, y siendo objetivo, no tiene ningún sentido, tener un alojamiento para cada uno de los proyectos. Y esto precisamente es lo que mas me preocupaba inicialmente, es decir, la posibilidad de que un proyecto, ahogara a los otros dos.

Por otro lado, además de las páginas, tengo en mente un par de proyectos mas, que no están relacionados directamente con páginas web, aunque si que necesitan de la misma infraestructura. Estos proyectos, al menos, inicialmente, todavía gastarían menos recursos, que una página web, pues solo serían para consumo propio, con lo que todavía mas a mi favor.

Llegados a este punto, la solución de un multihost en un VPS, parece que va como anillo al dedo. Sin embargo, me planteaba una duda, y es los certificados Let’s Encrypt. Y es que, lo que tengo muy claro, es la necesidad de cifrar la comunicación cliente-servidor. Para ello, para cada uno de los proyectos, necesito su propio certificado. Sin embargo, como podrás leer, esto también es muy fácil de resolver.

Montar una infraestructura LAMP en un VPS

Te cuento de manera sucinta como he montado la infraestructura LAMP en el VPS. Si quieres una información mas detallada, puedes leerlo en el artículo que he comentado anteriormente sobre como montar infraestructura LAMP en una Raspberry.

Al final, pensé en que lo mas sencillo era montar un servidor de bases de datos, como MariaDB. Y es que, si bien, todos los proyectos requieren de base de datos, no es necesario, que sea algo tan potente como un MariaDB. Probablemente, con un SQLite, podría apañarme. Sin embargo, teniendo el servidor a mi disposición, lo aprovechamos.

Para montar nuestra infraestructura, necesitaremos al menos PHP y Apache. Para instalarlo, tan solo tenemos que ejecutar las siguientes órdenes en un terminal,

sudo apt install apache2

En los primeros pasos con tu VPS, configuramos el cortafuegos. Ahora tendremos que abrirlos puertos necesarios para que nuestro servidor Apache funcione correctamente. En general, los puertos que vamos a utilizar son el 80 y el 443.

Después de instalar el servicio Apache, nos toca instalar el servicio de base de datos. Indicarte que esto es opcional, no es necesario que instalemos un servicio de base de datos como MariaDB. Pero desde luego, si vas a alojar páginas web en WordPress es requisito imprescindible. En otros casos, dependiendo de lo que vayamos a hacer podemos decidir. Sin embargo, si ya tenemos el servicio, lo mejor es aprovecharlo.

Para instalar el servicio, ejecutaremos la siguiente orden,

sudo apt install mariadb-server

Una vez instalado el servicio debemos segurizarlo. Para ello, ejecutaremos la siguiente opción,

sudo mysql_secure_installation

Igual que hemos hecho con el servicio Apache, también debemos hacer con MariaDB. Debemos configurar el puerto, si queremos utilizar otro diferentes al que viene por defecto 3306. Para cambiar el puerto, tenemos que editar el archivo /etc/mysql/mariadb.conf.d/50-server.cnf, y buscar la línea donde indica port, sustituyendo por el valor que consideres. A continuación, debemos abrir este puerto en el cortafuegos, tal y como indico en el mencionado artículo.

El siguente paso es instalar el lenguaje de programación que utilizaremos para las páginas web. En nuestro caso, utilizaremos PHP, y en particular la versión 7.2. Esta versión es la que viene por defecto en Ubuntu 18.04. Para instalar el lenguaje de programación, ejecutaremos la siguiente orden,

sudo apt install php libapache2-mod-php php-mysql

Puede ser que necesites algunos módulos adicionales. Para ver los módulos disponibles ejecuta la siguiente orden,

apt-cache search php-

A continuación de los resultados obtenidos elige los módulos que consideras necesarios.

Lo último que nos queda es reiniciar el servicio Apache. Para ello, tan solo tenemos que ejecutar la orden,

sudo systemctl restart apache2

Configurar un multihost en un VPS

Hasta el momento, no hemos hecho nada nuevo. Todos los pasos son los habituales para montar una infraestructura LAMP. Llegados a este punto, tenemos que configurar nuestro servicio Apache para trabajar con diferentes dominios. Para ello, vamos configuraremos dons dominios que llamaremos dominio1.com y dominio2.com.

El primer paso es crear los directorios donde vamos a alojar nuestros dominios. Esto lo podemos hacer ejecutando las siguientes órdenes,

sudo mkdir -p /var/www/public_html/dominio1.com
sudo mkdir -p /var/www/public_html/dominio2.com

El siguiente paso que tienes que hacer es configurar tanto propietario como permisos,

cd /var/www/public_html
sudo chown -R www-data:wwww-data dominio1.com
sudo find dominio1.com -type d -print -exec chmod 775 {} \;
sudo find dominio1.com -type f -print -exec chmod 664 {} \;
sudo chown -R www-data:wwww-data dominio2.com
sudo find dominio2.com -type d -print -exec chmod 775 {} \;
sudo find dominio2.com -type f -print -exec chmod 664 {} \;

También es interesante añadir nuestro usuario al grupo www-data para que podamos hacer nuestras modificaciones. Para ello, ejecutaremos la orden,

sudo usermod -a -G www-data $USER

Creando host virtuales

Para cada uno de los dominios vamos a crear un Virtual Host. Por facilidad de operación vamos a partir de la configuración que viene por defecto en Apache. Así, camos a copiar esta configuración, y posteriormente la editaremos,

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/dominio1.com.conf
sudo nano /etc/apache2/sites-available/dominio1.com.conf

Dentro de dominio1.com realizaremos los siguientes cambios,

<VirtualHost *:80>
    ServerAdmin administrador@dominio1.com
    ServerName dominio1.com
    ServerAlias www.dominio1.com
    DocumentRoot /var/www/public_html/dominio1.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Una vez hechos estos sencillos cambios vamos a realizar la misma operación con dominio.com. Lo que podemos hacer es copiar el archivo anterior a uno nuevo y reemplazar dominio1.com por dominio2.com. Así,

sudo cp /etc/apache2/sites-available/dominio1.com.conf /etc/apache2/sites-available/dominio2.com.conf
sudo sed -i 's/dominio1.com/dominio2.com/g' /etc/apache2/sites-available/dominio2.com.conf

Una vez tenemos hecho todo esto, vamos a habilitar nuestros host virtuales, y deshabilitar el que viene por defecto. Para ello, ejecutaremos las siguientes órdenes,

sudo a2ensite dominio1.com
sudo a2ensite dominio2.com
sudo a2dissite 000-default.conf

Por último, reiniciamos Apache,

sudo systemctl restart apache2

Let’s Encrypt para un multihost en un VPS

El último paso para tener nuestro multihost en un VPS perfectamente configurado y funcionando, es configurar los certificados Let’s Encrypt. Este paso es mucho mas sencillo de lo que te puedes imaginar. Tan solo tienes que seguir las indicaciones del capítulo anterior Let’s Encrypt en tu VPS, tantas veces como Virtual Host tengas. Es decir, en el caso del ejemplo, ejecutaremos las siguientes órdenes,

sudo certbot --apache -d dominio1.com -d www.dominio1.com
sudo certbot --apache -d dominio2.com -d www.dominio2.com

Acuérdate de comprobar que funciona la renovación de los certificados, conforme indico en el artículo mencionado anteriormente.

Conclusiones

Como ves tener un multihost en un VPS es algo realmente sencillo. Una vez configurado el primer virtual host, lo siguiente es repetir el proceso, tantas veces como sitios queramos tener. Ciertamente, si tu VPS no tiene grandes recursos, no podrás alojar muchas páginas con mucho tráfico. Sin embargo, como es mi caso, es una muy buena solución para tener un proyecto principal, y algunos proyectos satélites. Y sobre todo, nos permite jugar con nuestro VPS e implementar todo tipo de servicios y soluciones.


Más información,

Deja una respuesta

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