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:
- Descargar Drupal.
- Descargar todos los módulos y el theme a utilizar.
- 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.

- (a) Estos módulos y temas visuales estarán disponibles para todos los sitios del multisitio.
- (b) Estos módulos y temas visuales estarán disponibles sólo para el sitio cuencodigital.
- (c) No es necesario que estén todos los directorios, solo files (o algun directorio que aloje archivos con otro nombre y permisos de escritura) y el archivo settings.php son necesarios.
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 www.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.phpAsi debe quedar el directorio www.cuencodigital.com

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 drupal6Tambié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_subdominioAunque seguramente usted no tendrá acceso mediante SSH, si es así proceda de la siguiente forma:
Ingrese por FTP, y elimine 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.

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:
- Excelente artículo sobre multisitios en: Cocinando con Drupal: http://www.cocinandocondrupal.net/node/63
- Una interesante discusión sobre multisitios en Drupal Hispano: http://drupal.org.es/node/2487
- Otra discusión en el grupo de Drupal Argentina: http://groups.drupal.org/node/2948
- Actualización: Otro artículo sobre multistios, lo encontré un dia despues de escribir este artículo: http://drupal.bozpit.com/node/1
En inglés:
- Documentación oficial de Drupal para crear multisites: http://drupal.org/node/53705
- Otro artículo muy completo sobre multisitios http://stephenondrupal.blogspot.com/2007/10/how-to-correctly-set-up-drup...
- Multisitios usando XAMP en windows XP: http://drupal.org/node/166831
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
- 4754 lecturas
Contenido Relacionado
Resumen
Este artículo pretende ser una guía básica para comenzar a utilizar Drupal. No aprenderá nada en concreto, sino que tendrá que leer mucho. Aprender Drupal puede llegar a ser una tarea ardua dependiendo cuan lejos quiera llegar. Esta guía es solo el puntapié inicial.
Inicio de sesión
Comentarios recientes
- Muchisimas gracias, realmente
hace 20 horas 7 mins - Re: no puedo ver los videos
hace 3 días 18 horas - no puedo ver los videos
hace 3 días 22 horas - Gracias
hace 1 semana 11 horas - Re: Añadir regiones en drupal 6
hace 1 semana 6 días - Añadir regiones en drupal 6
hace 2 semanas 2 horas - Muy bueno
hace 2 semanas 5 días - Ayuda
hace 3 semanas 20 horas - Envio de correos
hace 3 semanas 1 día - Sobre php
hace 3 semanas 1 día

Comentarios
Un primer vistazo muy interesante
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
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.
Multisitios en entornos de desarrollo
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!
COmpartir usuarios
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
Compartir user
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 !!!
Thank you!
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]
Ayuda para acceder a los demas sitios
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
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\hostsY agregar la siguiente linea:
127.0.0.1 sitio1Luego accediendo a http://sitio1 deberías poder configurar tu sitio.
Espero que sea de ayuda.
Saludos
Gracias
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
Casi lo tengo, pero creo que apache no va a donde debe de ir..
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!!
multisitios misma DB
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.
Re: multisitios misma DB
Sí, tengo pensado escribir sobre eso. Seguramente para los primeros meses del 2010.
Gracias por tu comentario.
Saludos!
Excelente guia, muy buena
Excelente guia, muy buena explicacion, los pasos estan bien detallados lo entendi a la perfeccion.
///SEO///
Muchas gracias por tan
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
Compartir Modulos
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?
Re: Compartir Módulos
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.
Enviar un comentario nuevo