Multisitios en Drupal

¿Qué es un multisitio? (multisites)

Un multisitio es una características de algunos CMS que permiten crear varios sitios distintos utilizando código en forma compartida.

Tengo que admitir cuando recién comencé con Drupal, un sitio implicaba una descarga y configuración de archivos independiente.

El proceso por ese entonces era:

  1. Descargar Drupal.
  2. Descargar todos los módulos y el theme a utilizar.
  3. Crear el sitio con esos archivos.

Este proceso se repetía cada vez que necesitaba armar un nuevo sitio.

La configuración de un multisitio permite justamente reutilizar estos archivos descargados. Y tener solo una copia de cada archivo.

¿Como armar un multisitio?

A continuación se explicará como armar un multisitio para una instalación en un servidor de producción. Más adelante se verán las variantes disponibles.

Paso 1: Descargar y descomprimir una versión de drupal en el directorio web del servidor (por ejemplo, para apache /var/www)

Paso 2: Descargar los módulos comunes que utilizarán los sitios. CCK, Views, Tokens y Pathauto son ejemplos buenos de módulos compartidos.

Paso 3: Descomprimir estos módulos en el directorio sites/all/modules, si el directorio no existe, crearlo.

Paso 4: Crear una carpeta llamada con el nombre del sitio, por ejemplo www.cuencodigital.com repetir este proceso por cada sitio que se desee crear.

Paso 5: Copiar dentro de cada carpeta creada el archivo default.settings.php (alojado en la carpeta sites/default) y renombrarlo a settings.php y Darle permisos de escritura.

Paso 6: Crear un directorio llamado files por cada carpeta que represente a un sitio. Darle permisos de escritura.

Paso 7: Opcionalmente crear carpetas llamadas modules para alojar a los módulos propios de cada sitio que no se necesiten compartir. Hacer lo mismo con la carpeta themes.

Paso 8: Configurar las opciones del servidor para que reconozca los distintos dominios.

Paso 9: Ingresar a cada sitio desde el navegador y configurar los datos para el acceso a las bases de datos.

Paso 10: Quitar los permisos de escritura para settings.php

Esta lista de diez pasos tiene un problema. La ejecución de los pasos 5, 6 y 8 dependen del tipo de servidor que esté utilizando y de las herramientas de configuración que le brinde su proveedor de hosting.

Estructura de directorios

Para tener una idea más clara del proceso de instalación a continuación se muestra un ejemplo de configuración de multisitio para un servidor con linux, corriendo apachey acceso SSH. Si logra entender este proceso, seguramente a usted le resultará más simple o al menos de una complejidad similar a lo que sigue.

# Descargar drupal
wget http://ftp.drupal.org/files/projects/drupal-6.12.tar.gz
tar xzf drupal-6.12.tar.gz
# Renombrar y Acceder al directorio descomprimido
mv drupal-6.12 drupal6
cd drupal6
#acceder al directorio sites/all y crear las carpetas modules y themes
cd sites/all
mkdir modules
mkdir themes
# volver al directorio sites y crear los directorios para alojar a los sitios webs
cd ..
mkdir www.cuencodigital.com
mkdir www.miotrositio.com
#copiar el archivo settings.php a cada uno de los directorios
cp default/default.settings.php www.cuencodigital.com/settings.php
cp default/default.settings.php www.miotrositio.com/settings.php
# darle permisos de escritura a cada uno de los archivos settings.php
chmod 777 www.cuencodigital.com/settings.php
chmod 777 www.miotrositio.com/settings.php
# crear los directorios modules y themes en los directorios creados
cd www.cuencodigital.com
mkdir modules
mkdir themes
mkdir files
chmod -R 775 files
cd ../www.miotrositio.com
mkdir modules
mkdir themes
mkdir files
chmod -R 775 files
# convertirse en root
su
#agregar estos dos sitios al servidor
vim /etc/apache2/sites-enabled
#Agregar las siguientes lineas al archivo de configuración de apache, hacer lo mismo para miotrositio.com
<VirtualHost *:80>
   ServerName www.cuecodigital.com
   DocumentRoot /var/www/drupal6/
   <Directory /var/www/drupal6/>
   Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
   </Directory>
</VirtualHost>
# Guardar el archivo y reiniciar apache
apache2ctl restart
# Por último agregar las dos direcciones nuevas al archivo hosts
vim /etc/hosts
# y agregar estas lineas
127.0.0.1 www.cuencodigital.com
127.0.0.1 www.miotrositio.com
# Quitar los permisos de escritura "Luego de haber configurado los datos de las conexiones a las bases de datos"
chmod 644 sites/www.cuencodigital.com/settings.php
chmod 644 sites/www.miotrositio.com/settings.php

Asi debe quedar el directorio www.cuencodigital.com

Estructura interna del directorio de un sitio

Siguiendo esos pasos, al acceder a las direcciones www.cuencodigital.com y a www.miotrositio.com se verán dos intefaces de instalación de Drupal para configurar.

En las lineas de código anteriores se obviaron la descarga de los módulos por que consideraba que ensuciaba más el código de lo que aclaraba.

Algunas notas sobre los multisitios:

Puede suceder que usted desee utilizar multisitio en un servidor local. Para este caso seguramente usted acceda a su servidor escribiendo http://localhost

El proceso es similar al anterior. Usted puede crear las lineas sitio1.localhost en su archivo hosts, o incluso aún drupal6 como esta configurada la instalación que utilizo para hacer los videos.

En su archivo hosts

127.0.0.1  sitio1.localhost
127.0.0.1  sitio2.localhost
127.0.0.1  sitio3.localhost
127.0.0.1  drupal6

También puede sucerder que su servidor no le permita modificar los valores del archivo hosts. Si eso le sucede, el proceso es un poco más complejo aún, pero no desespere, tiene solución.

Utilizando enlaces simbólicos para multisitios:

Algunos proveedores de hosting, en el afán de simplificar las tareas para los usuarios, y para ellos mismos claro, proveen de una intefaz para definir subdominios y nuevos dominios a través de una interfaz gráfica.

Cuando un usuario genera un nuevo subdominio o un nuevo dominio a través de la interfaz, el sistema automáticamente genera un directorio en el servidor y configura el servidor para que reconozca este nuevo sitio.

Si observan el el archivo de configuración de apache, los virtualhosts apuntan ambos al directorio raíz de Drupal. El problema es que los proveedores de hosting no hacen esto.

Como caso para citar, en una época he trabajado con los servidores de Dattatec. Tengo entendido que otros servicios como DreamHosts también trabajan de la misma forma.

Al crear el subdominio, se genera un nuevo directorio al mismo nivel que la raíz de Drupal.

Lo que hay que hacer entonces es redireccionar todas las peticiones a ese directorio hasta el directorio de nuestro interés.

Si usted posee acceso mediante SSH puede eliminar este directorio y crear un enlace dinámico.

rm -R directorio_subdominio
ln -s directorio_raiz_drupal directorio_subdominio

Aunque seguramente usted no tendrá acceso mediante SSH, si es así proceda de la siguiente forma:

Ingrese por FTP, y elimine el directorio del subdominio.

Borrar el directorio del subdominio

Luego ejecute el siguiente script en su servidor:

<?php

// Directorio de origen, Enlace dinámico de destino
symlink('/home/usuario/public_html', '/home/usuario/directorio_subdomnio');

?>

Atención: los parámetros de la función anterior pueden variar significativamente dependiendo de como esté configurado su servidor. Pero la idea básica es siempre la misma. Cuando alguien quiera acceder al subdominio, debe ser redireccionado al directorio del dominio principal.

Parqueo de dominios:

El parqueo de dominios es utilizar un dominio como un alias para otro dominio. El parqueo de dominios le permite crear multisitios de forma transparente. Simplemente cree un nuevo directorio dentro del directorio sites y podrá crear dos sitios diferentes para los dominios parqueados.

Paqueo de dominios

Más información:

Si aún no le quedó claro algo, no se preocupe, hay mucha información en la web sobre los multisitios en Drupal. Les dejo algunos links.

En español:

En inglés:

Y por último una recopilación de drupal.org de muchos artículos destacados sobre configuración de multisitios, todos en inglés: http://drupal.org/node/43816

Te invito a leer también...

Compartir este material en...

Comentarios

Hola,

es el mejor artículo que he leído sobre la creación de multisitios en Drupal. Generalmente estoy acostumbrado a leer artículos sobre problemas específicos sobre este tema, pero en tu artículo explicas casi todos los aspectos a tener en cuenta en un mismo post.

Me guardo tu dirección en favoritos, no te digo más.

Muchas gracias Cholbi.

Agrego además que leyendo este post encontré esta guía para multisitios en Drupal 6 que se me paso por alto.

Hola, el artículo es muy bueno. Mis felicitaciones.
Tengo el siguiente problema, Drupal lo tengo instalado en un servidor de desarrollo en el directorio var/www/intranet/drupal y accedo utilizando la url http://servidor/intranet/drupal
Estoy queriendo realizar la prueba de tener multisitios, con lo cual creé dentro de sites una carpeta /sitio1 donde coloqué el settings.php apuntado a una nueva base de datos del servidor.
¿Cómo hago para acceder desde otra máquina de la intranet a sitio1 para instalar el modelo de datos de Drupal?
Si coloco http://servidor/intranet/sitio1, http://servidor/intranet/drupal/sitio1 desde otra máquina de la intranet no encuentra la página.
Espero haber sido claro.
Desde ya muchas gracias!

Hola ha estado excelente este tuto, pero ahora falta algo, seguramente el que tenga un multisitio querrá compartir usuarios y si hizo la instalación de sus sitios en diferentes BBDD podrá no encontrar nada.

Si pudieras poner un tutorial acerca de eso sería muy bueno, como compartir los usuarios entre multisitios con diferentes BBDD

Basta cambiar el settings.php como sigue:


$db_url = 'mysqli://user:contrasena@localhost/bd_sitio1';

// Por defecto vamos en la misma table que $db_url PERO para las tablas de users, ponemos un prefijo a una BD
// donde almacenamos solo las tablas de users para todos los sitios
$db_prefix = array(
'default' => '',
'authmap' => 'bd_usuarios.shared_',
'profile_fields' => 'bd_usuarios.shared_',
'profile_values' => 'bd_usuarios.shared_',
'role' => 'bd_usuarios.shared_',
'sequences' => 'bd_usuarios.shared_',
'sessions' => 'bd_usuarios.shared_',
'users' => 'bd_usuarios.shared_',
'users_roles' => 'bd_usuarios.shared_',
'users_uid_seq' => 'bd_usuarios.shared_', // para pgsql
);

Un buen artículo de Kevin de Aquia (un día nos cobrarán, pero cuando?): http://acquia.com/blog/migrating-drupal-way-part-iii-managing-multiple-s...

Saludos y felicidades por el blog !!!

Gracias por ese tutorial increible. Estaba intentando crear un multisitio con Joomla, pero ahora voy a hacer con Drupal, porque ahora sé cómo hacerlo.
Excelente guía, si me entero de cualquier problema, me comunicaré con usted, gracias.

[Auto translated comment, sorry for mistakes]

Saludos

Estoy tratando de crear multisitios con drupal y me he segidos los pasos, solo que yo lo tengo montado en windows y utilizo un servidor wamp con php + apache + MySQL y no logro acceder al sitio creado llamado sitio1, que es el drirectorio donde he puesto el archivo settings.php(apuntando a su base de datos), el directorio mudules y el themes. De que manera accedo a traves del navegador web para configurar el nuevo sitio??.

Hola Rodolfo:

En windows la configuración de los hosts difiere un poco de la de Linux.

Segun esta guía: http://drupal.org/node/161975 deberías modificar


C:\WINDOWS\system32\drivers\etc\hosts

Y agregar la siguiente linea:


127.0.0.1 sitio1

Luego accediendo a http://sitio1 deberías poder configurar tu sitio.
Espero que sea de ayuda.
Saludos

Tu material es excelente, te cuenco que soy nuevo en drupal gracias a tus videos ya lo voy entendiendo y estudiando mucho sobre este tema. me sirvio mucho ya que estoy haciendo un servidor con aplicaciones de drupal al igual que tu en entorno linux la distribucion ubuntu

He hecho la instalación en drupal, pero tengo un pequeño problema con la instalación:

Mi configuración:

/etc/hosts:
127.0.0.1 sitio1.localhost
127.0.0.1 sitio2.localhost
127.0.0.1 drupal

/etc/apache2/sites-enabled/000-default

ServerName sitio1.localhost
DocumentRoot /var/www/drupal/

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all

ServerName sitio2.localhost
DocumentRoot /var/www/drupal/

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all

...Y al intentar acceder a sitio1.localhost me dan estos errores:
# El instalador de Drupal requiere permisos de escritura en el archivo ./sites/default/settings.php durante el proceso de instalación.
# El directorio sites/default/files no existe.

Como se observa no accede a la carpeta de sitio1 (/var/www/sites/sitio1) para coger el settings.php, sino que se va a la carpeta default.

Tienes que ser una tontería pero no sé dónde está el fallo para que sí busque el archivo settings en la carpeta sitio1.

Gracias, un saludo!!

Me gustaria si algun dia tenes tiempo, un tutorial sobre multisitios en video en donde se pueda compartir las misma base de datos, pero diferentes paginas de entrada. Aca hay un nodo muy bueno sobre el tema http://drupal.org/node/348619 (en ingles)
y aca http://blogs.captechventures.com/blog/kurt-madel/drupal-multisite-out-th..., explica como hacerlo pros solo usando pathauto (en ingles) . Aun no le he puesto el tiempo necesario porque mas que programador soy comunicador.
Muchas gracias por este gran esfuerzo para ayudarnos a todos.

Sí, tengo pensado escribir sobre eso. Seguramente para los primeros meses del 2010.

Gracias por tu comentario.

Saludos!

Excelente guia, muy buena explicacion, los pasos estan bien detallados lo entendi a la perfeccion.

///SEO///

Muchas gracias por tan detallada explicacion estube haciendolo todo por l camino largo, uno por uno, no sabia que podia hacerce de muchos sitios a la vez, esto me ahorrara mucho tiempo, de nuevo gracias.
brustvergrößerung

Hola tengo la siguiente duda, tengo compartidos varios drupales (a través de subdominios y subdirectorios) y comparto varios módulos entre ellos. Pero mi duda es la siguiente ¿Hay alguna manera de que estos módulos aparezcan activados por defecto, en cada una de las instalaciones de Drupal?

Sí, la forma más simple es creando un perfil de instalación.

Al momento de instalar drupal vas a poder elegir entre la instalación básica o una personalizada que instale más módulos.

Este Perfil de Instalación es un buen ejemplo para empezar http://drupal.org/project/the_base

Espero que sea de ayuda.

Hola

Excelente tutorial, veo que compartes las bd de los usuarios pero se podrá que si yo me logueo en uno quede en automatico logueado en todos??? esto estoy tratandolo y lo necesito hacer... ahora bien si esto es posible, entonces quiero meter un modulo de tienda en linea ¿Cual me recomiendas? Podría instalarlo en cada subdominio y que se comparta información entre ellos??? pero que este modulo no tena una unica base de datos sino bd independientes???

Hola Bruno:

Gracias por tu comentario. Con respecto a compartir usuarios entre multisitios, basicamente es compartir las tablas entre los multisitios, no es algo tan simple de hacer, pero es posible.

El archivo settings.php de cada sitios tiene instrucciones que indican como compartir una tabla con otros sitios, supongo que las tablas users y session tienen que estar compartidas.

En este artículo lo explican mejor: http://thedrupalblog.com/setting-multi-site-drupal-6-installation-shared...

Con respecto a módulos para tiendas online, no tengo mucha experiencia en el tema, recomiendo que preguentes en el blog de Pedro Cambra que tiene más experiencia con esos asuntos.

Saludos y gracias por la visita.
Mariano

Para multisitio Drupal pueden utilizar Aquia Drupal, es gratis

¿Cómo hago para acceder desde otra máquina de la intranet?

En mi /etc/hosts:

# Dominios para pruebas con drupal
127.0.0.1 computacion06.prueba
127.0.0.1 computacion06.drupal
192.168.0.13 computacion06.prueba

En mi máuiqna local: http://computacion06.prueba/drupal/ y entro perfecto
Pero desde otra computadora, naranjas, se va a la internet y trata de buscar allá... obviamente no consigue

Hola c354r1t0:

Segun entiendo, la linea


192.168.0.13 computacion06.prueba

Debería estar en el archivo de hosts de la otra máquina, y 192.168.0.13 debería ser la ip de la máquina donde está instalado Drupal.

Creo que eso es lo que está fallando, espero sea de ayuda.

Saludos
Mariano

@mariano, cierto... gracias!

Estoy buscando una forma sencilla de simular los dominios parkeados sin tener que entrar por SSH, he probado el script PHP pero no me ha funcionado, tengo 'Simple Control Panel'... ¿alguna idea?

los multisitio creados tienen las misma propiedades que el sitio original?????

Hola:

No los multisitios solo comparten el código fuente para generar el sitio, pero nada relaciona un sitio con otro sitio dentro de una instalación multisite.

El sistema de multisitios ahorra tener que descargar drupal (más el modulo views, cck, token, etc) por cada sitio que necesites hacer. Simplemente comparten el codigo ya descargado pero funcionan de forma totalmente independiente un sitio con respecto al otro.

Espero que haya aclarado el asunto.

Saludos
Mariano

La duda esta como hacerlo de un sitio normal tipo mosite a multisite e alli el problema

Muy bueno el artículo. Estoy intentando hacer un multisitios con Drupal7 sobre un servidor lighttpd del estilo: sitio1.localhost, sitio2.localhost sin éxito. Alguna sugerencia de como configurar el servidor? Gracias

Que pasa si el Hosting me dice que solo acepta como nombre caracteres alfanuméricos sin puntos?

por ejemplo, quiero crear el sitio www.jmvapu.org y el sitio mision.jmvapu.org pero el servidor me dice que solo puedo usar nombres que no contengan punto...

No afecta en nada el hecho de que los nombres no estén definidos de la forma en que se describe el tutorial? . Gracias