- Cómo instalar varios sitios de WordPress en un solo VPS
- Crear DocumentRoot para sitios web de WordPress
- Creación de alojamientos virtuales para sitios web de WordPress
- Instalar Certificados SSL
- Crear bases de datos para sitios web de WordPress
- Descarga y extrae los archivos de WordPress
- Instalar WordPress desde el navegador
- Conclusión
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.
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:
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.