Como configurar multisites en Drupal 8

Author Top
mcastillo

En la siguiente entrada veremos como configurar sitios multisites en Mac usando Drupal 8.

El concepto básico de multisites implica el poder crear múltiples sitios web a partir de una única instalación drupal, compartiendo el mismo código pero corriendo sobre  diferentes bases de datos , lo que permite  reutilizar componentes a través de todos nuestros sitios.

Teniendo una noción de que son  los multisites veamos cuales son los pasos a seguir. 

1. Crear la base de datos.

El primer paso sería crear las base de datos para cada uno de los sitios , en este caso creare tres:  drupalsite1, drupalsite2, y drupalsite3 pero pueden crearse N cantidad de bases de datos según los requerimientos.

2. Descargar drupal.

Una vez que tengamos las bases de datos creadas procedemos a descargarnos  un Drupal 8, lo podemos hacer desde la página oficial  o bien utilizando Drupal Composer project  ejecutando el siguiente comando desde la terminal :

composer create-project \
drupal-composer/drupal-project:8.x-dev \
drupal.dev \
--prefer-dist \
--no-progress \
--no-interaction

Donde drupal.dev es el directorio en donde se descargara nuestro drupal 8.

3. Agregar nuevos virtual hosts.

Antes de proceder con la instalacion habitual  de drupal , necesitamos crear los virtual host, para ello los agregamos al archivo /Applications/MAMP/conf/extra/httpd-vhosts.conf ;  para una mayor referencia de como configurar virtual hosts podemos  visitar http://7sabores.com/blog/crear-virtual-hosts-mac-utilizando-mamp

Luego de agregar los virtualhost nuestro archivo se vería de la siguiente forma

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#

<VirtualHost *:80>
   DocumentRoot "/Users/administrador/www/drupal/web"
   ServerName drupal.dev
   <Directory "/Users/administrador/www/drupal/web">
      AllowOverride All
   </Directory>
   ErrorLog "logs/drupal.dev-error_log"
     CustomLog "logs/drupal.dev-access_log" common
</VirtualHost>

<VirtualHost *:80>
   DocumentRoot "/Users/administrador/www/drupal/web"
   ServerName drupalmulti1.dev
   <Directory "/Users/administrador/www/drupal/web">
      AllowOverride All
   </Directory>
   ErrorLog "logs/drupalmulti1.dev"
     CustomLog "logs/drupalmulti1.dev-access_log" common
</VirtualHost>

<VirtualHost *:80>
   DocumentRoot "/Users/administrador/www/drupal.dev/web"
   ServerName drupalmulti2.dev
   <Directory "/Users/administrador/www/drupal/web">
      AllowOverride All
   </Directory>
   ErrorLog "logs/drupalmulti2.dev"
     CustomLog "logs/drupalmulti2.dev-access_log" common
</VirtualHost>


Se puede observar que el DocumentRoot de cada sitio apunta a un mismo directorio /Users/administrador/www/drupal.dev/web donde lo único que cambia es el server name puesto que la idea es crear varios sitios a partir de una única instalación.

3.1 Editar archivo hosts.

También necesitamos agregar los hosts que definimos como ServerName en cada sitio,  para ello editamos el archivo hosts que se ubica en la carpeta etc. Vemos un ejemplo de cómo quedaría una vez que agregamos nuestros nuevos hosts.

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
#Custom DNS
127.0.0.1       drupal.dev
127.0.0.1       drupalmulti1.dev
127.0.0.1       drupalmulti2.dev

4. Instalar Drupal

Luego de reiniciar el Servidor Apache procedemos a instalar drupal ,  para ellos podemos utilizar el siguiente comando install del proyecto Drupal Console.

 $ drupal site:install 

Respondemos las preguntas que nos muestra el modo interactivo , una vez completado el proceso ya tendremos nuestro nuevo sitio default instalado y listo para ser usado.

5. Crear nuevos sitios

Para crear nuevos sitios apartir de la instalacion anterior podemos ejecutar el siguiente comando de la consola , el cual requiere el directorio y la url de nuestro nuevo sitio

$ drupal drupal:multisite new drupalmulti1.com drupalmulti1.dev

Este nos creará un directorio nuevo en la carpeta sites de drupal , el cual tendrá a nuestro nuevo sitio ,podemos hacer uso de dicho comando segun la cantidad de sitios que necesitemos crear, simplemente hay que cambiar los argumentos. En los nuevos directorios podemos agregar una carpeta para  los módulos  contrib y/o custom de dicho dominio; Esto para agregar funcionalidad extra o bien hacer pequeños cambios a componentes existentes. 

 Asi mismo generará el archivo sites.php , tomando los valores que ingresamos como argumentos en el comando anterior ;  de esta forma se verá nuestro file con ambos sitios agregados

$sites = [];
$sites['drupalmulti1.dev'] = 'drupalmulti1.com';
$sites['drupalmulti2.dev'] = 'drupalmulti2.com';

drupalmulti1.com y drupalmulti2.com pueden acceder a todos los modulos ,features y temas  que existan en el sitio default, no obstante los modulos que agreguemos a drupalmulti1.com  no seran accedados por el default ni por drupalmulti2.com.

6. Instalar nuevos sitios

El último paso sería instalar estos nuevos sitios ,  lo podemos hacer visitando las urls que definimos en el archivo de host ,por ejemplo al tratar de acceder a http://drupalmulti1.dev desde nuestro browser seremos redireccionados a http://drupalmulti1.dev/core/install.php en donde completaramos la instalacionde; esa form ya tenemos tres sitios web drupal funcionando como un multisitio.

Espero que esta entrada sea de su agrado.