Cómo instalar varios sitios de WordPress en un solo VPS

VPS significa Servidor Privado Virtual, también conocido como VM (Máquina Virtual). También podemos llamar a estos VPS/VMs un host para nuestros sitios de WordPress, ya que contienen nuestros archivos y datos de WordPress. En este tutorial, le mostraré cómo instalar varios sitios de WordPress en un solo VPS.

En este tutorial, le mostraré cómo instalar varios sitios de WordPress en un solo VPS

La idea que hay detrás de este concepto de varios sitios web en un solo servidor VPS, es utilizar los Host Virtuales de Apache para dirigirl el trafico a una u otra instalación de WordPress según el dominio que se escriba en el navegador web

Cómo instalar varios sitios de WordPress en un solo VPS

Instalando varios sitios web en un único servidor con varios nucleos y varios gigas de RAM puedes hacer el despliegue web mas efectivo en costes, mas económico y la mayoría de los sitios web no requieren un VPS exclusivo o dedicado. Puedes contratar uno de estos servidores por algo mas de 5€ al mes IVA incluido en CONTABO:

  • Un VPS/VM con Apache, MySQL y PHP (servidor LAMP) instalados.
  • Acceso root al servidor.

Aquí tienes un tutorial de instalación de WordPress en Ubuntu para que veas como se realiza el proceso de instalación completa.

Crear DocumentRoot para sitios web de WordPress

DocumetnRoot es un directorio en el que podemos almacenar los archivos de nuestro sitio web. En el caso de WordPress, almacenaremos los archivos de WordPress dentro de la raíz de documentos de un sitio web específico. Utilizaré ejemplo1.com y ejemplo2.com como nombres de dominio en este tutorial. No olvides sustituir estos nombres de dominio por los tuyos.

Me gusta hacer la instalaciones dentro de la carpeta /html en la ruta /var/www/html que crea apache cuando se instala y al igual que hemos creado una

mkdir /var/www/html/ejemplo1.com

Y sucesivos sitios web

mkdir /var/www/html/ejemplo2.com

Se trata de realizar los mismos pasos que en el tutorial de instalación de wordpress pero cuando vayamos a copiar el codigo de WordPress a la carpeta web, lo haremos en una nueva carpeta. Yo suelo usar el nomrbe del dominio o una variacion de ese nombre para normbrar dicha directorio.

Los pasos a seguir son los mismos que en una instalación inicial , pero si no hemos borrado el directorio temporal de la descarga de wrodpress hay algunos pasos que podremos omitir.

Creación de alojamientos virtuales para sitios web de WordPress

Los hosts virtuales son los archivos de configuración que le dicen a nuestro servidor web que dirija las peticiones basadas en el nombre del dominio a su directorio correspondiente. También le dice al servidor web qué archivo debe buscar, qué reglas debe aplicar y dónde almacenar los registros de error y acceso para el sitio web o el host virtual específico.

Crea una carpeta llamada “ejemplo1” dentro del directorio que Apache ha creado como directorio raíz para las aplicaciones web:

sudo mkdir /var/www/html/ejemplo1

A continuación, abre un nuevo archivo de configuración en el directorio sites-available de Apache utilizando tu editor de línea de comandos preferido. En este caso, usaremos el editor de texto ‘nano’. Sustituye el nombre de ejemplo1.com por tu propio dominio o subdominio.

sudo nano /etc/apache2/sites-available/ejemplo1.com.conf

Copia este texto dentro del fichero que acabas de crear:

<VirtualHost *:80>
	ServerName ejemplo1.com
	ServerAlias www.ejemplo1.com
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html/ejemplo1
	
	<Directory /var/www/html/ejemplo1/>
		AllowOverride All
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/ejemplo1_error.log
	CustomLog ${APACHE_LOG_DIR}/ejemplo1_access.log combined
</VirtualHost>

Fíjate en la palabras en negrita y sustituye estas palabras por tu propio dominio, nombre de la carpeta que hayas creado para tu sitio web y el nombre de los ficheros log para tenerlos identificados en caso de que en un mismo servidor quieras instalar varios sitios web.

Ahora, abre un nuevo archivo de configuración en el directorio sites-available de Apache utilizando tu editor de línea de comandos preferido. En este caso, usaremos el editor de texto ‘nano’. Sustituye el nombre de ejemplo2.com por tu propio dominio o subdominio.

sudo nano /etc/apache2/sites-available/ejemplo2.com.conf

Copia este texto dentro del fichero que acabas de crear:

<VirtualHost *:80>
	ServerName ejemplo2.com
	ServerAlias www.ejemplo2.com
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html/ejemplo2
	
	<Directory /var/www/html/ejemplo2/>
		AllowOverride All
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/ejemplo1_error.log
	CustomLog ${APACHE_LOG_DIR}/ejemplo2_access.log combined
</VirtualHost>

Fíjate en la palabras en negrita y sustituye estas palabras por tu propio dominio, nombre de la carpeta que hayas creado para tu sitio web y el nombre de los ficheros log para tenerlos identificados en caso de que en un mismo servidor quieras instalar varios sitios web.

Habilita los hosts virtuales en apache

sudo a2ensite ejemplo1.com
sudo a2ensite ejemplo2.com

Prueba la configuración de Apache antes de recargar el servicio

sudo apache2ctl configtest

Recarga la configuración de Apache

sudo systemctl reload apache2

Instalar Certificados SSL

Como ya tienes instalado Certbot para la instalación de tu primer WordPress ahora ya solo tienes que llamar al comando. Para poder obtener el certificado, tu dominio debe estar apuntando a este servidor y tu Host virtual Apache para este dominio debe estar activo.

sudo certbot --apache

Te presentara una lista de los dominios que tienes configurados en este apache. Asegúrate de tener configurado los registros A y CNAME en tu registrador de Dominios, si usas Namcheap, este es un tutorial de como hacerlo.

Crear bases de datos para sitios web de WordPress

Es muy fácil crear bases de datos para nuestros sitios de WordPress ya que no tenemos que editar o crear ningún archivo en esta parte. Inicie sesión en la interfaz de línea de comandos de MySQL utilizando el siguiente comando.

mysql -uroot -p;

Te pedirá la contraseña de root que debes conocer. Una vez que tengas acceso a la interfaz de línea de comandos de MySQL, ejecuta los siguientes comandos para crear el usuario y la base de datos para nuestro primer sitio web de WordPress.

CREATE DATABASE ejemplo1;
CREATE USER ‘ejemplo1‘@’localhost’ IDENTIFIED BY ‘CONTRASEÑA‘;
GRANT ALL PRIVILEGES ON ejemplo1.* TO ‘ejemplo1‘@’localhost’;
FLUSH PRIVILEGES;
EXIT;

Una vez hecho esto, puedes cerrar la interfaz de línea de comandos de MySQL utilizando el comando exit. Nuestra base de datos y los usuarios de MySQL están listos.

Vuelve a entrar en la consola de MySQL

mysql -uroot -p;

Te pedirá la contraseña de root que debes conocer. Una vez que tengas acceso a la interfaz de línea de comandos de MySQL, ejecuta los siguientes comandos para crear el usuario y la base de datos para nuestro segundo sitio web de WordPress.

CREATE DATABASE ejemplo2;
CREATE USER ‘ejemplo2‘@’localhost’ IDENTIFIED BY ‘CONTRASEÑA‘;
GRANT ALL PRIVILEGES ON ejemplo2.* TO ‘ejemplo2‘@’localhost’;
FLUSH PRIVILEGES;
EXIT;

Ya tienes preparadas las dos bases de datos para tus dos sitios web, Anota el nombre de usuario, el nombre de la bases de datos y las contraseñas de cada sitio, ya que los necesitaras en el futuro para crear el archivo de configuración de WordPress.

Ahora, tenemos que descargar y extraer los archivos de WordPress en nuestra raíz del documento.

Descarga y extrae los archivos de WordPress

Si por algún motivo has borrado la carpeta temporal de la instalación y no tienes los ficheros de WordPress, debes repetir este proceso, si aun tienes el directorio temporal, puedes saltar directamente a este punto

Sitúate en el directorio temporal del servidor

cd /tmp

descarga el código fuente

curl -O https://wordpress.org/latest.tar.gz

descomprimelo

tar xzvf latest.tar.gz

crea el archivo .htaccess

touch /tmp/wordpress/.htaccess

copia la plantilla de configuración al fichero config.php

cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

crea el directorio para actualizaciones de WordPress

mkdir /tmp/wordpress/wp-content/upgrade

copia la aplicación WordPress a la carpeta web para el proyecto

sudo cp -a /tmp/wordpress/. /var/www/html/ejemplo1

cambia los permisos de la carpeta web

sudo chown -R www-data:www-data /var/www/html/ejemplo1
sudo find /var/www/html/ejemplo1/ -type d -exec chmod 750 {} \;
sudo find /var/www/html/ejemplo1/ -type f -exec chmod 640 {} \;

consigue los código para securizar tu instalación

curl -s https://api.wordpress.org/secret-key/1.1/salt/

Que nos dará una salida similar a esta

define('AUTH_KEY',         'qG/SN^B?SPs#wM__9aNd a?0r/r?JtnT/DY@R:H%b~Gu;-{-3oI#OoYq^O?RUR)q');
define('SECURE_AUTH_KEY',  '/YYz6hR;-r3;9B`#9hF0KXh#{s]DU8@BEY+kNQX]S1;re4P*N2P?vw|JMNpqJp^#');
define('LOGGED_IN_KEY',    '84Y3A:7V]+aA08EfWNkt0G/me}&<?)w)iwt7aC6SrRB&>MGI-9j^ts4lFoN0w6yx');
define('NONCE_KEY',        'qt%ng]D>Ei[q/h+ZXn}O}f,SAq9-h<,l?nR3ZNQl(.+WzO2Pe~T|]ip`S.qT(e9v');
define('AUTH_SALT',        '1j|.l,.HPbIfX9G<nvUK6u4c8e6&3{i?Q^KR(t7<BI_F0w~WPAaE>aDjgQr(&CJ.');
define('SECURE_AUTH_SALT', '3^qa.YLX^yAo3nX6N6]![;%g6x4(72N-#jPn$F4>F#X+RO9K00bse&E{mw$GolWi');
define('LOGGED_IN_SALT',   '%9e1q8_ri;7V3w8|cEN%nuis,mte||;2I~$i!Y_qWV>-m,]*B~hpSXN6H% 2/o(d');
define('NONCE_SALT',       '@{#k[*1tR p[2!$.vk0V3=Aa{:j6  MWqgTnBy8&.gX8X-7[~AhCpPf6AYC_eunh');

Editar el fichero de configuración de WordPress

sudo nano /var/www/html/ejemplo1/wp-config.php

Y cambia el nombre de la base de datos, el nombre de usuario y su contraseña, además de las claves de seguridad que has obtenido antes.

. . .

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );

/** MySQL database username */
define( 'DB_USER', 'wordpressuser' );

/** MySQL database password */
define( 'DB_PASSWORD', 'password' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

define('AUTH_KEY',         'qG/SN^B?SPs#wM__9aNd a?0r/r?JtnT/DY@R:H%b~Gu;-{-3oI#OoYq^O?RUR)q');
define('SECURE_AUTH_KEY',  '/YYz6hR;-r3;9B`#9hF0KXh#{s]DU8@BEY+kNQX]S1;re4P*N2P?vw|JMNpqJp^#');
define('LOGGED_IN_KEY',    '84Y3A:7V]+aA08EfWNkt0G/me}&<?)w)iwt7aC6SrRB&>MGI-9j^ts4lFoN0w6yx');
define('NONCE_KEY',        'qt%ng]D>Ei[q/h+ZXn}O}f,SAq9-h<,l?nR3ZNQl(.+WzO2Pe~T|]ip`S.qT(e9v');
define('AUTH_SALT',        '1j|.l,.HPbIfX9G<nvUK6u4c8e6&3{i?Q^KR(t7<BI_F0w~WPAaE>aDjgQr(&CJ.');
define('SECURE_AUTH_SALT', '3^qa.YLX^yAo3nX6N6]![;%g6x4(72N-#jPn$F4>F#X+RO9K00bse&E{mw$GolWi');
define('LOGGED_IN_SALT',   '%9e1q8_ri;7V3w8|cEN%nuis,mte||;2I~$i!Y_qWV>-m,]*B~hpSXN6H% 2/o(d');
define('NONCE_SALT',       '@{#k[*1tR p[2!$.vk0V3=Aa{:j6  MWqgTnBy8&.gX8X-7[~AhCpPf6AYC_eunh');

. . .

Añade al final del fichero config la siguiente línea

define('FS_METHOD', 'direct');

Salva el fichero con la combinación de teclas CTRL+O y sal del editor con CTRL+X

Hagamos lo mismo para el segundo sitio web

copia la aplicación WordPress a la carpeta web para el segundo proyecto

sudo cp -a /tmp/wordpress/. /var/www/html/ejemplo2

cambia los permisos de la carpeta web para este segundo sitio web

sudo chown -R www-data:www-data /var/www/html/ejemplo2
sudo find /var/www/html/ejemplo2/ -type d -exec chmod 750 {} \;
sudo find /var/www/html/ejemplo2/ -type f -exec chmod 640 {} \;

consigue los código para securizar tu segunda instalación

curl -s https://api.wordpress.org/secret-key/1.1/salt/

Que nos dará una salida similar a esta

define('AUTH_KEY',         'qG/SN^B?SPs#wM__9aNd a?0r/r?JtnT/DY@R:H%b~Gu;-{-3oI#OoYq^O?RUR)q');
define('SECURE_AUTH_KEY',  '/YYz6hR;-r3;9B`#9hF0KXh#{s]DU8@BEY+kNQX]S1;re4P*N2P?vw|JMNpqJp^#');
define('LOGGED_IN_KEY',    '84Y3A:7V]+aA08EfWNkt0G/me}&<?)w)iwt7aC6SrRB&>MGI-9j^ts4lFoN0w6yx');
define('NONCE_KEY',        'qt%ng]D>Ei[q/h+ZXn}O}f,SAq9-h<,l?nR3ZNQl(.+WzO2Pe~T|]ip`S.qT(e9v');
define('AUTH_SALT',        '1j|.l,.HPbIfX9G<nvUK6u4c8e6&3{i?Q^KR(t7<BI_F0w~WPAaE>aDjgQr(&CJ.');
define('SECURE_AUTH_SALT', '3^qa.YLX^yAo3nX6N6]![;%g6x4(72N-#jPn$F4>F#X+RO9K00bse&E{mw$GolWi');
define('LOGGED_IN_SALT',   '%9e1q8_ri;7V3w8|cEN%nuis,mte||;2I~$i!Y_qWV>-m,]*B~hpSXN6H% 2/o(d');
define('NONCE_SALT',       '@{#k[*1tR p[2!$.vk0V3=Aa{:j6  MWqgTnBy8&.gX8X-7[~AhCpPf6AYC_eunh');

Editar el fichero de configuración de WordPress

sudo nano /var/www/html/ejemplo2/wp-config.php

Y cambia el nombre de la base de datos, el nombre de usuario y su contraseña, además de las claves de seguridad que has definido y obtenido para este segundo sitio web.

. . .

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );

/** MySQL database username */
define( 'DB_USER', 'wordpressuser' );

/** MySQL database password */
define( 'DB_PASSWORD', 'password' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

define('AUTH_KEY',         'qG/SN^B?SPs#wM__9aNd a?0r/r?JtnT/DY@R:H%b~Gu;-{-3oI#OoYq^O?RUR)q');
define('SECURE_AUTH_KEY',  '/YYz6hR;-r3;9B`#9hF0KXh#{s]DU8@BEY+kNQX]S1;re4P*N2P?vw|JMNpqJp^#');
define('LOGGED_IN_KEY',    '84Y3A:7V]+aA08EfWNkt0G/me}&<?)w)iwt7aC6SrRB&>MGI-9j^ts4lFoN0w6yx');
define('NONCE_KEY',        'qt%ng]D>Ei[q/h+ZXn}O}f,SAq9-h<,l?nR3ZNQl(.+WzO2Pe~T|]ip`S.qT(e9v');
define('AUTH_SALT',        '1j|.l,.HPbIfX9G<nvUK6u4c8e6&3{i?Q^KR(t7<BI_F0w~WPAaE>aDjgQr(&CJ.');
define('SECURE_AUTH_SALT', '3^qa.YLX^yAo3nX6N6]![;%g6x4(72N-#jPn$F4>F#X+RO9K00bse&E{mw$GolWi');
define('LOGGED_IN_SALT',   '%9e1q8_ri;7V3w8|cEN%nuis,mte||;2I~$i!Y_qWV>-m,]*B~hpSXN6H% 2/o(d');
define('NONCE_SALT',       '@{#k[*1tR p[2!$.vk0V3=Aa{:j6  MWqgTnBy8&.gX8X-7[~AhCpPf6AYC_eunh');

. . .

Añade al final del fichero config la siguiente línea

define('FS_METHOD', 'direct');

Salva el fichero con la combinación de teclas CTRL+O y sal del editor con CTRL+X

Instalar WordPress desde el navegador

Ahora, todo lo que tenemos que hacer es acceder a nuestro nuevo nombre de dominio en el navegador e introducir la información de la base de datos para crear un archivo de configuración de WordPress.

Así pues, abre una nueva pestaña en tu navegador y accede a cualquiera de los nombres de dominio que estás intentando configurar en el servidor https://ejemplo1.com. Deberías ver una pantalla como la siguiente imagen.

En este paso, selecciona el idioma con el que te sientas cómodo y pulsa el botón Continuar que aparece en la parte inferior de la tarjeta. En el siguiente paso, haz clic en el botón ¡Vamos! y entonces deberías ver una pantalla que te indica que todo ha ido bien y que tiene un enlace para ingresas en la aplicación usando las credenciales de Administrador

Abre una nueva pestaña en tu navegador y accede a cualquiera de los nombres de dominio que estás intentando configurar en el servidor https://ejemplo2.com. Deberías ver una pantalla como la de la imagen anterior y repetir el proceso de selección de idioma y finalizar la instalación.

Conclusión

Enhorabuena, has configurado con éxito dos sitios de WordPress en un solo host o un solo VPS. Y la buena noticia es que puedes añadir tantos sitios web como quieras en un solo VPS. Si quieres añadir un tercer sitio web en un mismo VPS, sigue estos pasos:

  • Cree el documento raíz en el directorio /var/www/html , por ejemplo /var/www/html/ejemplo3.
  • Cree un archivo de host virtual dentro de /etc/apache2/sites-available/ejemplo3.com.conf como el que creamos para estos dos sitios web.
  • Una base de datos para almacenar los datos de su tercera instalación de WordPress.
  • Descarga y extrae los archivos de WordPress en el directorio webroot de tu tercer sitio web.
  • Instala WordPress desde tu navegador accediendo a la URL de tu tercer sitio web. https://ejemplo3.com

Eso es todo lo que necesitas para configurar múltiples sitios WordPress en un host o un solo VPS. Puede salir mal las primeras veces y puede encontrar algunos problemas, pero una vez que se entiende el proceso, será muy fácil de configurar múltiples sitios de WordPress en un solo VPS.

Realmente este método es valido para cualquier aplicación web que necesite una pila LAMP, no tiene por que ser un WordPress, Puedes seguir estos pases e instalar la aplicación que consideres necesaria dentro de esas carpetas webroot adiciones, podrías tener un un mismo VPS, tu web, tus analíticas con Matomo y tu email marketing con Mautic

¡Que tengas un Ingenioso día!

¡que tengas un ingenioso día!

Contrata tu plan Ingenios@ de Sistemas por 5€ al mes y responderé a todas tus preguntas sobre tecnología en el menor tiempo posible. Pasa a formar parte de la comunidad Ingenios@s de Sistemas y disfruta de contenido exclusivo y aprende sobre sistemas Open Source, Blockchain, SmarContract, Web3, Inteligencia Artificial y Reaidad Virtual, súbete al tren de la Revolución 4.0

Si quieres estar al día y no perderte nada Suscribete al Podcast Ingenios@s de Sistemas, un episodio diario que te mantendrá informado y formado en esta vertiginosa carrera.

Deja un comentario

Share to...