Instalación Multisitios en Drupal 6
Después de dos años haciendo sitios en Drupal, estoy cansado de tener que actualizar uno por uno cuando se presente una actualización de seguridad.
Por ello me parece interesante la idea de “hostear” todos estos sitios (buenos 6 exactamente) en una sola instalación multisites en un entorno VPS o dedicado.
Revisé un poco la Doc. Sobre multisitios y la verdad es que hay de todo, hasta tal puno que ya no entiendo nada.
http://drupal.org/node/235765
http://justinhileman.info/articles/a-more-secure-drupal-multisite-install
http://drupal.org/node/107347
Alguno tuvo experiencia con multisitios? Conocen una buena Doc para ello?
Gracias y saludos…

Cual es el problema .-
Yo estoy trabajando de hace tiempo con drupal en modo multisite y funciona bien, más aun actualizo con drush los módulos lo cual me esta ahorrando ambas cosas mucho tiempo.
Si lo tienes en ambiente lamp (linux, apache, mysql , php) te puedo ayudar .
El tema es donde vos tenes el problema
Partiendo de la base que tenes el servidor configurado y todas las aplicaciones y librerías necesarias instaladas para drupal 6.
Configuras virtual host del primer dominio; el document root del sitio sera el root de drupal .-
En caso de ser dominio independiente y no subfolder en la carpeta sites duplicas el directorio default y le pones el nombre del dominio que estas resolviendo o en su defecto (creas una carpeta con el nombre que te resulte apropiado y le haces un link -- dentro de sites -- con el nombre del dominio o sitio que estas creando .-
Bueno a la noche te mando mas detalle, pero intenta explicar donde te detienes en el proceso de instalación.-
http://drupal.org/node/43816
ls /var/www/drupal6
modules
sites
themes
otros
ls /sites
default
sitio1.arg (en el caso de que estuvieras trajando con el dominio sitio1.arg )
O en su defecto
ls sites/
default
sitio1conf
sitio1.arg -------------------> sitio1conf (link el nombre del dominio al dir de conf)
Saludos
Por ahora, es un problema de concepto
Gracias guscorreo. La verdad es que intento primero entender la lógica de la instalación multisites.
Me ecanta tu propuesta de un root drupal (/var/www/drupal6/), asi podemos seguir hosteando otros sitios (no drupal) en /var/www/. Cool.
Ahora bien, imaginemos que tengamos tres sitios en drupal, sitio1.com - sitio2.com - sitios3.com. Y un meta sitio (contenedor) metasitio.com
Ahora sigo tu idea guscorreo
El contenedor
En este directorio, instalamos drupal normalmente en con su BD (bd_metasitio) y su usuario (user_metasitio) con su contraseña (pwd_metasitio).
/var/www/drupal6/
/var/www/drupal6/modules/
/var/www/drupal6/sites/
/var/www/drupal6/themes/
/var/www/drupal6/otros/
/var/www/drupal6/sites/
/var/www/drupal6/sites/default/settings.php
/var/www/drupal6/sites/default/file/
/var/www/drupal6/sites/all/modules/ (módulos contrib. comunes a los tres sitios)
/var/www/drupal6/sites/all/themes/ (temas comunes a los tres sitios)
en /var/www/drupal6/sites/default/settings.php tendriamos:
* $db_url = 'mysql://user_metasitio:pwd_metasitio@localhost/bd_metasitio';
* $base_url = 'http://metasitio.com';
Los sitios sitio1.com, sitio2.com y sitio3.com
Hemos creado para sitio1.com una BD (bd_sitio1) con su usuario (user_sitio1) y su contraseña (pwd_sitio1)
/var/www/drupal6/sites/sitio1.com/
/var/www/drupal6/sites/sitio1.com/settings.php (acceso a la BD de sitio1.com )
/var/www/drupal6/sites/sitio1.com/file/
/var/www/drupal6/sites/sitio1.com/modules/ (módulos contrib. específicos a sitio1.com)
/var/www/drupal6/sites/sitio1.com/themes/ (temas particular a sitio1.com)
/var/www/drupal6/sites/sitio1.com/settings.php tenemos:
* $db_url = 'mysql://user_sitio1:pwd_sitio1@localhost/bd_sitio1';
* $base_url = 'http://sitio1.com';
Todo esto me parece muy sólido.
Aqui vienen las preguntas.
La idea del contenedor me parece excelente. Pero necesitamos comprar un dominio para ello? Tenemos que hacer un vhost para ello también?
Como apunto sitio1.com hacía /var/www/drupal6/sites/sitio1.com/ ?
Creando un archivo de configuración (vhost site configuration files) en /etc/apache2/sites-available/ ??
<VirtualHost *:80>
ServerAdmin e-mail@metasitio.com
DocumentRoot /var/www/drupal6/
(#de las dos líneas siguientes, no estoy seguro !!)
ServerName www.metasitio.com
ServerAlias metasitio.com
RewriteEngine On
RewriteOptions inherit
</VirtualHost>
<VirtualHost *:80>
ServerAdmin e-mail@sitio1.com
DocumentRoot /var/www/drupal6/sites/sitio1.com/
(#de las dos líneas siguientes, no estoy seguro !!)
ServerName www.sitio1.com
ServerAlias sitio1.com
RewriteEngine On
RewriteOptions inherit
</VirtualHost>
... lo mismo para sitio2.com y sitio3.com ?
Gracias.
Avanzando con Multisite
Hola
Mira por ahi estamos diciendo cosas similar en forma diferente
Por ello voy por parte, no comprendo a que referís con lo de contenedor , para drupal cada sitio es igual al otro
(ya sea que sea un sitio con un dominio sitio1.com, ya sea un subdominio sub1.sitio1.com o sea una subfolder sitio1.com/dir1 ) el contenedor es el root de drupal , como veras siempre el DocumentRoot es el mismo para todos los sitios solo cambia el
ServerName en el vhosts.
Lo que cambiara sera el vhost o en el caso de subfolder sera que hay que agregar un link symlink como explico mas adelante.
Por ahi vos a contenedor te referis un dominio sitio1.com y sus subdiminios y/o subfolder. Para drupal cada uno es independiente. Podes tener en el mismo drupal varios dominios sitio1.com, sitio2.com etc y tambien algunos subdominios (de cualquiera de los dominios) ejemplo , sub1.sitio1.com, sub1.sitio2.com y varios otros sitios en subfolder sitio1.com/dir1 sitio1.com/dir2 etc.-
Por ello detallo los pasos lo que vos pusiste esta bien en general salvo en el tema del vhost (el DocumentRoot es el mismo para todos )
Cada sitio es totalmente independiente del otro ( otro tema muy diferente es luego si queres usuar la misma base de datos y/o compartir usuarios eso se puede hacer tanto desde un multisite como de un simplesite )
Vamos por la mas simple cada sitio es independiente del otro (cada uno tiene su base de datos) , tiene un dominio propio , y su propio directorio de configuracion donde esta settings.php. Solo comparten el core de drupal y tambien comparten los modulos que estan en sites/all/modules y los temas que estan en sites/all/themes
Vos pusiste
El sitio sitio1.com está en realidad en el directorio /var/www/drupal6/sites/ como sigue:
Lo que esta en sites/sitio1.com es el directorio de configuracion de sitio1.com y los archivos particulares de ese sitio.
Todo esto es correcto.
Hemos creado para sitio1.com una BD (bd_sitio1) con su usuario (user_sitio1) y su contraseña (pwd_sitio1)
/var/www/drupal6/sites/sitio1.com/
/var/www/drupal6/sites/sitio1.com/settings.php (acceso a la BD de sitio1.com )
/var/www/drupal6/sites/sitio1.com/file/
/var/www/drupal6/sites/sitio1.com/modules/ (módulos contrib. específicos a sitio1.com)
/var/www/drupal6/sites/sitio1.com/themes/ (temas particular a sitio1.com)
/var/www/drupal6/sites/sitio1.com/settings.php tenemos:
$base_url = 'http://sitio1.com';
ahora si vas a http://sitio1.com/install.php se instala sitio1.com solo modificara ese settings. Inclusive lo haría si no hubieras seteado nada como vos hiciste (las ultimas dos lineas no son necesarias), en el caso de que el usuario de apache tuviera permiso sobre settings.php
sitio1.com resuelve tanto sitio1.com como www.sitio1.com , yo lo que hago es crear el directorio sitio1conf y le hago un link a sitio1.com . Luego fijate de que en admin/settings/file-system
que quede File system path: sites/multi1conf/files
esto te sera util en el caso de que quieras por ejemplo traladar el sitio de un server de desarrollo a uno de produccion donde no tenga el mismo dominio .
Ahi instalas como si fuera un sitio comun de drupal http://sitio1.com/install.php
Drupal buscara en sites (primero el directorio con el nombre de su dominio en este caso sito1.com si encuentra ese dir modificara el archivo settings.php y creara el directorio files ahi para el sitio1.com etc . (lo mismo si fuera www.sitio1.com en ), si no encuentra en sites/sitio1.com tomara a default como su directorio tene cuidado con eso para no confundirte en default deja default.settings.php y no settings.php No necesitaras para nada el directorio default en multisite .-
Entonces para cada dominio vos podes crear un sitio usando el mismo drupal , debiendo en cada caso crear el directorio de configuracion en sites con el nombre que corresponda del domiminio sitio1.com; sitio2.com , sitio3.com.
Como vos pusiste cada sitio tiene la respectiva base de datos , En cada caso drupal esta creando un sitio nuevo independiente de los anteriores.
Para drupal todos seran igual porque en proceso de instalacion cada uno lee su propio settings.php y de ahi su base de dato.-
El vhost es como si estuvieras creando un sitio comun con drupal6
Veras que todos los sitios tiene casi el mismo virtualhost lo unico diferente es el nombre de ServerName todo lo demas es exactamente igual.
Para sitio1 es vhost seria sites-avalaibles/sitio1.conf
<VirtualHost *:80>
ServerName www.sitio1.com
ServerAlias sitio1.com
DocumentRoot /var/www/drupal6
LogLevel warn
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
ServerSignature On
DirectoryIndex index.php index.html index.php home.shtml index.cgi
<Directory "/var/www/drupal6">
Options +Indexes
allow from all
AllowOverride All
</Directory>
</VirtualHost>
Para sitio2.com es
<VirtualHost *:80>
ServerName sitio2.com
DocumentRoot /var/www/drupal6
LogLevel warn
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
ServerSignature On
DirectoryIndex index.php index.html index.php home.shtml index.cgi
<Directory "/var/www/drupal6">
Options +Indexes
allow from all
AllowOverride All
</Directory>
</VirtualHost>
tanto RewriteEngine On RewriteOptions inherit
viene configurado por defecto en .htaccess no es necesario ponerlo en el virtual host (no se con que distribucion de linux estas trabajando vos, con ubuntu/debian no resulta necesario y no creeria que lo fuera en las otras distro .-
Ahora si vos queres hacer varios sitios con un subdominio eje, http://sub1.sitio1.com http://sub2.sitio1.com
Es igual que lo anterior
Creas una base de datos (user; pwd, y base claro esta )
Luego en sites/
vos creas el directorio
sub1.sitio1.com
ls sites/
sub1.sitio1.com
Al igual que un simplesite vos con http://sub1.sitio1.com/install.php creas un nuevo sitio con su propia base de dato
El virtual host sera exactamente igual que el de un dominio solo que cambia el ServerName en este caso es sub1.sitio1.com
ServerName sub1.sitio1.com
DocumentRoot /var/www/drupal6
LogLevel warn
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
ServerSignature On
DirectoryIndex index.php index.html index.php home.shtml index.cgi
Directory "/var/www/drupal6"
Options +Indexes
allow from all
AllowOverride All
Ahora la tercer opcion, creas sitio como una subfolder
http://sitio1.com/dir1
Creas base de dato user y pw para ella
en sites creas
el el directorio de configuracion
sitio1.com.dir1 (fijate en vez de barra ahi pones solo .dir1 no equivocarse con eso )
Dentro de este dir compias como en el anterior el achivo default.settings.php con el nombre settings.php
Pero en el caso de subfolder tnees un paso mas tenes que que ir al root de drupal y crear un link
ls drupal6/
modules
themes
scripts
sites
dir1 -> ../drupal6 (en el root de drupal hay un symlink entre el root y el nombre del subdirectorio del sitio que estas resolviendo)
Y
ls sites/
sitio1.com.dir1
Ahi no tenes que hacer nada con el virtual host
solo instala el sitio con
http://sitio1.com/dir1/ . Ahi drupal buscara en primer lugar el directorio en (sites) drupal6/sites/sitio1.com.dir1 si no lo encuetra buscara sitio1.com si no lo encuentra buscara el directorio default
Por ello con http://sitio1.com/dir1/ estas creando un nuevo sitio independiente del sitio http://sitio1.com
Como veras tanto con subdominios como con subfolder podes crear multiples sitios con un solo dominio.
Cada uno de ellos sera independiente y solo comparte como dije antes todo el core de drupal y los modulos y themes de
sites/all/modules sites/all/themes (y themes y modules que estan en el root de drupal
Y en cada caso si queres themes o modulo espefico para el sitio crea el directorio themes o modules dentro de directorio de configuracion del sitio y lo pones ahi
ls sites/
sitio1.com (este resuelve el sitio http://sitio1.com y www.sitio1.com )
sub1.sitio1.com (este resuelve en drupal el sitio http://sub1.sitio1.com que no tiene nada que ver con sitio1 )
sitio1.com.dir1 (este resuelve el sito que esta en un subfolder entras a el con http://sitio1.com/dir1 )
ls -l sitio1.com/
settings.php
files
modules
themes
Es tarde y ya tengo mas de 14 horas con la maquina disculpa errores de redacción y ortograficos pero creo haber resumido las opciones con drupal y multisite . Cualquier duda pregunta y seguimos charlando . Si reviso ahora no lo envió.
Creo también haber repuesto a tu pregunta si necesitas mas dominio ..
saludos
gustavo iranzo
Seguimos avanzando
Gracias por tu tiempo Gustavo. Y tambíen tengo unas 12 horas de máquina, además creando una sección necrológico para un diario local. Que agradable...
Intentaré resumir todo lo que hemos hablado. Quizas hagamos un pequeño wiki con esto para este grupo.
Objetivos.
Una sola instación de drupal para varios dominios independientes (sitio1.com, sitio2, sitio3.com ....), cada uno con su propia base de datos. Entorno: LAMP.
1. Instalar el root de Drupal ("prototype" installation).
Vamos a instalar el código común a todos los dominios independientes.
a. Crear una base de datos común. (BD: bd_drupal6, user: user_drupal6, pwd: pwd_drupal6)
b. Crear el directorio /var/www/drupal6/
c. Copiar el código fuente de Drupal en /var/www/drupal6/
d. Lanzar la instalación de Drupal en /var/www/drupal6/
/var/www/drupal6/
/var/www/drupal6/modules/
/var/www/drupal6/sites/
/var/www/drupal6/themes/
/var/www/drupal6/otros/
/var/www/drupal6/sites/
/var/www/drupal6/sites/default/settings.php
/var/www/drupal6/sites/default/default.settings.php
/var/www/drupal6/sites/default/file/
/var/www/drupal6/sites/all/modules/ (módulos contrib. comunes a los tres sitios)
/var/www/drupal6/sites/all/themes/ (temas comunes a los tres sitios)
en /var/www/drupal6/sites/default/settings.php tendriamos:
* $db_url = 'mysql://user_drupal6:pwd_drupal6@localhost/bd_drupal6';
* $base_url = '';
Con lo anterior, todavía no tenemos nada funcional, solo un conjunto de código sobre el cual se basarán los sitios independientes que vamos a instalar a continuación.
2. Configurar sitio1.com
a. Crear una BD para sitio1.com (BD: bd_sitio1, user: user_sitio1, pwd: pwd_sitio1)
b. Crear un directorio para sitio1.com /var/www/drupal6/sites/sitio1.com/
c. Copiar /var/www/drupal6/sites/default/default.settings.php en /var/www/drupal6/sites/sitio1.com/default.settings.php
d. Copiar /var/www/drupal6/sites/default/settings.php en /var/www/drupal6/sites/sitio1.com/settings.php
e. Crear un directorio file para sitio1.com, /var/www/drupal6/sites/sitio1.com/files/
Hasta ahora tenemos para sitio1.com la siguiente estructura:
/var/www/drupal6/sites/sitio1.com/
/var/www/drupal6/sites/sitio1.com/default.settings.php
/var/www/drupal6/sites/sitio1.com/settings.php
/var/www/drupal6/sites/sitio1.com/files/
f. Cambiamos la información en /var/www/drupal6/sites/sitio1.com/settings.php
* $db_url = 'mysql://user_sitio1:pwd_sitio1@localhost/bd_sitio1';
* $base_url = 'http://sitio1.com';
g. Crear los directorios modules y themes para sitio1.com
En caso de requerir módulos y temas particulares a sitio1.com los creamos como sigue:
/var/www/drupal6/sites/sitio1.com/modules/
/var/www/drupal6/sites/sitio1.com/themes/
h. Crear el vhost para sitio1.com
Vamos en /etc/apache2/sites-available/ y creamos el archivo sitio1.conf
<VirtualHost *:80>
ServerName www.sitio1.com
ServerAlias sitio1.com
DocumentRoot /var/www/drupal6
LogLevel warn
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
ServerSignature On
DirectoryIndex index.php index.html index.php home.shtml index.cgi
<Directory "/var/www/drupal6">
Options +Indexes
allow from all
AllowOverride All
</Directory>
</VirtualHost>
i. Reboot del Apache
j. Lanzar http://www.sitio1.com/install.php
3. Repetir la operación 2 para sitio2.con y sitio3.com ....
Que te parece? Está correcto así?
Propuesta: No sería mejor crear todos los vhost en una operación inicial, digamos operación 0 en este caso?
Saludos...
Configuración de sitios en Drupal modo multisite
Ahora veo tu problema ....
Tenes el concepto que existe un sitio contenedor o algo asi . No existe. Todos los sitios en multisite son iguales.-
El dir sites/default solo tiene que tener el archivo default.settings.php y no tocarlo para nada.- Este archivo sirve para
que lo copies sin cambio con el nombre settings.php en todos lo directorios de configuracion de los sitios que vayas a crear.-
Entorno: LAMP.
1. Instalar el root de Drupal ("prototype" installation).
Vamos a instalar el código común a todos los dominios independientes.
Hay un solo codigo drupal que usan todos los dominios por igual
a.
NO no HAY SITIO DEFAULT NI CONTENEDOR no existe
esta base no existe... ni debiera existir
Crear una base de datos común. (BD: bd_drupal6, user: user_drupal6, pwd: pwd_drupal6)
De aqui en mas ..SI
b. Crear el directorio /var/www/drupal6/
c. Copiar el código fuente de Drupal en /var/www/drupal6/
d. en /var/www/drupal6/
/var/www/drupal6/
/var/www/drupal6/modules/
/var/www/drupal6/sites/
/var/www/drupal6/themes/
/var/www/drupal6/otros/
/var/www/drupal6/sites/
/var/www/drupal6/sites/default/ NO DEBE ESTAR EL ARCHIVO settings.php solo debe estar default.settings.php
/var/www/drupal6/sites/default/default.settings.php si
/var/www/drupal6/sites/default/ NO debe estar file aquí este directorio default no se utiliza para nada . ya puse arriba que sirve para copiar sin el archivo de configuracion.-
/var/www/drupal6/sites/all/modules/ (módulos contrib. comunes a los tres sitios)
/var/www/drupal6/sites/all/themes/ (temas comunes a los tres sitios)
esto no va no hay sito default para que no te confundas repito no pongas settings.php en sites/default
en /var/www/drupal6/sites/default/settings.php tendriamos: NO
* $db_url = 'mysql://user_drupal6:pwd_drupal6@localhost/bd_drupal6'; NO
* $base_url = ''; NO
f
Una vez copiado el codigo de drupal en /var/www/drupal6/.
a. Crear una BD para sitio1.com (BD: bd_sitio1, user: user_sitio1, pwd: pwd_sitio1)
b. Crear un directorio para sitio1.com /var/www/drupal6/sites/sitio1.com/
c. Copiar cp /var/www/drupal6/sites/default/default.settings.php como /var/www/drupal6/sites/sitio1.com/settings.php
settings.php no tiene ningun cambio es igual a default.settings.php solo el nombre cambia
e. Crear un directorio file para sitio1.com, /var/www/drupal6/sites/sitio1.com/files/ No es necesario la instalacion de drupal lo hara solo ( el dueño de /var/www/drupal6 tinee que ser el usuario de apache (wwww-data )
Hasta ahora tenemos para sitio1.com la siguiente estructura:
/var/www/drupal6/sites/sitio1.com/
/var/www/drupal6/sites/sitio1.com/settings.php
f. Cambiamos la información en /var/www/drupal6/sites/sitio1.com/settings.php No es necesario hacer esto se supone como dije anteriormente que usuario de apache pude modificar estos archivos
lo dejas virgen a settings.php el scripts de instalacion lo modificara..
no es necesario
g Podes hacerlo no es obligatorio si tenes algun tema o modulo que vas a necesitar y no este en all/modules o all/themes
recien hacer esto g. Crear los directorios modules y themes para sitio1.com. Digo este paso lo podes hacer cuando lo necesites . no es necesario desde el comienzo.-
En caso de requerir módulos y temas particulares a sitio1.com los creamos como sigue:
/var/www/drupal6/sites/sitio1.com/modules/
/var/www/drupal6/sites/sitio1.com/themes/
h. Crear el vhost para sitio1.com SI
Vamos en /etc/apache2/sites-available/ y creamos el archivo sitio1.conf
<VirtualHost *:80>
ServerName www.sitio1.com
ServerAlias sitio1.com
DocumentRoot /var/www/drupal6
LogLevel warn
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
ServerSignature On
DirectoryIndex index.php index.html index.php home.shtml index.cgi
<Directory "/var/www/drupal6">
Options +Indexes
allow from all
AllowOverride All
</Directory>
</VirtualHost>
i. Reboot del Apache
j. Lanzar http://www.sitio1.com/install.php
3. Repetir la operación 2 para sitio2.con y sitio3.com ....
Que te parece? Está correcto así? FIJATE EN LAS recomendaciones que hice (no a sitio default )
Síntesis
no toques el dir default no crees el archivo settings.php en sites/default/ porque cuando estes creando un site en modo multisite y tengas algo mal configurado drupal buscara en default para configurar el sitio. si no encuentra settings.php ahi te daras cuenta de que algo estas haciendo mal.
Vos empezas el multisite con como en este caso sitio1.com (el primer y todos los sitios posteriores tendran para drupal igual situacion , no existe un sitio contenedor ni nada por el estilo)
En sintesis punto 2
creas el directorio sites/sitio1.com ,
Crea la base de datos (con el user y pwd que vas a usar para ese sitio
Lanzas el proceso de instalacion http://sitio1.com/install.php
De ahi repetis estos pasos para todo posterior sitio a crear
Propuesta: No sería mejor crear todos los vhost en una operación inicial, digamos operación 0 en este caso?
Saludos...
Si podes crear todos vhost que quieras desde el comienzo y crear todas las bases de datos .
Pero para que vos tomes mas certeza empeza creado sitio1.com y tendrás mas confianza para los próximos sitios.-
Coméntame si hay algo que no te resulta.
Saludos
Resumiendo
Gustavo,
Como se va aclarando la cosa. Gracias !!
OK. Ahora si entiendo bien, el directorio /var/www/drupal6/ es un repositorio de código fuente cómun (en realidad el core de Drupal) y no un repositorio de datos. Allí estará el código (core) que servirá a cada instalación de los sitios (o multisitios) como tambíen los módulos y temas comunes a todos los sitios. Es por ello que no hay ninguna base de datos a configurar para este repositorio? (parece lógico)
Resumiendo las operaciones antes de hacer una doc completa para el grupo.
Objetivo: Multisitios (multidominios) con datos (BD) independientes pero con un código (core) común.
Permite tener en un solo lugar el core de Drupal, módulos contrib. y temas necesarios para varios sitios; lo que simplifica las tareas de mantenimiento de seguridad y upgrade.
1. Crear el Core o repositorio de código cómun.
Copiar el código fuente de Drupal (Drupal core) en /var/www/drupal6/ (no tocar nada, dejarlo como está)
Copiar los módulos contrib. comunes para todos los sitios en /var/www/drupal6/sites/all/modules/
Copiar los temas comunes para todos los sitios en /var/www/drupal6/sites/all/themes/
2. Crear la estructura para el sitio: sitio1.com
Crear una BD para sitio1.com (BD: bd_sitio1, user: user_sitio1, pwd: pwd_sitio1)
Crear un directorio /var/www/drupal6/sites/sitio1.com/
Copiar /var/www/drupal6/sites/default/default.settings.php en /var/www/drupal6/sites/sitio1.com/default.settings.php
Crear un directorio /var/www/drupal6/sites/sitio1.com/files/
Crear el vhost para sitio1.com
Lanzar la instalación del sitio1 con http://sitios1.com/install.php
En caso de requerir módulos y/o temas particlares para sitio1.com:
crear el directorio /var/www/drupal6/sites/sitio1.com/modules/
crear el directorio /var/www/drupal6/sites/sitio1.com/themes/
Dime si está bien para que empezemos la doc. y donde te puedo mandar los avances de la doc.
Karim,
Multisite en Linux, Apache, Mysql, PhP
Hola Karin A fin de poder continuar mas ordenamente la charla,
Resumi paso por paso las tareas para usar drupal en modo multisite asi cuando tengas algun problema en los pasos de instalación no podamos referir a un punto especifico.
En cuando a donde publicar documentación es recomendable a fin de no dispersar esfuerzos lo hagas en
http://drupal.org.es/ y claro tambien en este grupo Argentina en http://groups.drupal.org para publicar y comentar documentacion.-
Publique este tutorial ahi http://drupal.org.es/node/7151
Llegue a comprender multisite gracias al la valiosa ayuda de Osvaldo Suarez, a quien agradezco y hago coparticipe de este pequeño tutorial.-
1) Primer paso
1a) obtener el codigo drupal
wget http://ftp.drupal.org/files/projects/drupal-6.12.tar.gz
1b) descomprimir
Descomprimir el codigo fuente de drupal
tar -xzvf drupal-6.12.tar.gz
de ahi optenemos el codigo drupal.-
ls .
drupal-6.12.tar.gz
drupal-6.12 (directorio con el codigo drupal)
1c) crear directorio para drupal donde se crearan posteriormente los sitios
mkdir /var/www/drupal6
1d) Copiar el codigo fuente de drupal en el directorio creado
cp -a drupal-6.12/* /var/www/drupal6
(se puede copiar o directamente mover todo el directorio mv drupal-6.12 /var/www/drupal6)
Adjudicar al usuario www-data (el usurio que usa Apache ) los archivos de drupal
chown -R www-data:www-data /var/www/drupal6
Ahora tenemos todo el codigo fuente de drupal en el directorio que usaremos para crear los futuros sitios.-
ls /var/www/drupal6
CHANGELOG.txt
COPYRIGHT.txt
cron.php
dir1
includes
index.php
INSTALL.mysql.txt
INSTALL.pgsql.txt
install.php
js
LICENSE.txt
mail
MAINTAINERS.txt
misc
modules
profiles
robots.txt
scripts
sites
themes
update.php
UPGRADE.txt
xmlrpc.php
2) Crear el Vhost para el primer sitio en drupal modo multisite
Para este ejemplo el primer sitio es sitio1.com
Crear el arhivo sitio.conf en
/etc/apache2/sities-avalaibles/sitio1.conf
<VirtualHost *:80>
ServerName www.sitio1.com
ServerAlias sitio1.com
DocumentRoot /var/www/drupal6
LogLevel warn
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
ServerSignature On
DirectoryIndex index.php index.html index.php home.shtml index.cgi
<Directory "/var/www/drupal6">
Options +Indexes
allow from all
AllowOverride All
</Directory>
</VirtualHost>
Para que apache reconozca este nuevo host virtual
a2ensite sitio1.conf (agrega el link a sites-enable)
apachectl restart
3) Crear base de datos , usuario y clave para dicha base , para el primer sitio.
mysqladmin -uroot -proot create db_sitio1
Crear usuario y password para dicha base de datos que usuara drupal para el sitio1.com
mysql -uroot -proot -e"GRANT ALL PRIVILEGES ON $db_sitio1.* TO 'userdb_sitio1'@'localhost' IDENTIFIED BY 'pwddb_sitio1';"
Hasta aqui se hizo todo igual que drupal para simplesite . Hay muchos tutoriales para esto
La unica diferencia es que no se creo el archivo settings.php en sites/default.
4) Crear el directorio de configuracion para el sitio sitio1.com en
En el directorio /var/www/drupal6/sites/
Crear el directorio sitio1.com
mkdir /var/www/drupal6/sites/sitio1.com
cp /var/www/drupal6/sites/default/default.settings.php /var/www/drupal6/sites/sitio1.com
cd /var/www/drupal6/sites/sitio1.com
mv default.settings.php settings.php (en /var/www/drupal6/sites/sitio1.com cambiar nombre al archivo de configuracion)
Copiar sites/default/default.settings.php al directorio creado sites/sitio1.com/default.settings.php
Cambiar en sites/sitio1.com el nombre del archivo default.settings.php a settings.php
debiendo quedar asi
sites/sitio1.com/settings.php
La estructura de directorio quedara algo asi como :
/var/www/drupal6/
/var/www/drupal6/modules/
/var/www/drupal6/sites/
/var/www/drupal6/themes/
/var/www/drupal6/scritps/
/var/www/drupal6/y demas archivos fuentes de drupal ver punto 1 c )
/var/www/drupal6/sites/
/var/www/drupal6/sites/all/modules/ (módulos contrib. comunes los sitios)
/var/www/drupal6/sites/all/themes/ (temas comunes los sitios)
/var/www/drupal6/sites/default/default.settings.php (no se toca nada en este directorio )
/var/www/drupal6/sites/sitio1.com/settings.php
5) Ahora proceder a crear el primer sitio de drupal en modo multisite.
http://sitio1.com/install.php
El scritps de instalacion solo cambiara el archivo de configuracion sites/sitio1.com/settings.php
Siguiendo los pasos llegaras a donde el wizard te preguntara solbre el nombre de la base de datos y usuario y clave de la base
ahi debes introducir los valores puestos en el punto 3 . EN este ejemplo nombre de la base db_sitio1 , usuario userdb_sitio1
password pwddb_sitio1 (repito en el punto 3 creamos la base de datos db_sitio1 con el usuario y password que ahora le señalamos a drupal debe usar para el sitio1)
El scripts de instalacion de drupal por si mismo (si tiene permiso de escritura el usuario www-data sobre sites/sitio1.com/settings.php) cambia los valores de settings.php
Para ello en punto 1d adjudicamos los archivos de drupal al usuario www-data que es el usuario que usa apache. (en debian y las distribuciones relacionadas como ser ubuntu)
Una vez terminado el proceso de instalacion iniciado con http://sitio1.com/install.php tendras tu primer sitio en drupal modo multisite funcionando.
Luego para crear cualquier sitio repite los pasos 2, 3, 4 y 5 .
En forma analoga claro ,
El vhost de sitio2.com solo cambiara el nombre del ServerName que para el segundo sitio seria sitio2.com (nombre del dominio de ese sitio)
El DocumentRoot sera igual que de sitio1.com Todos los sitios que usen este codigo tendran como DocumentRoot a /var/www/drupal6 .-
6) Cuando el nuevo sitio es con un subdominio el los pasos son iguales salvo
que al crear el directorio de configuracion en drupal debes crearlo con el nombre del subdominio
Para este ejemplo usamos subdominio1.sitio1.com
El directorio de configuración será sites/subdominio1.sitio1.com
Ahi copias default.settings.php con el nombre de settings.php
Creas el vhost para subdominio1.sitio1.com , base de datos , y lanzas el proceso de instalacion
http://subdominio1.sito1.com/install.php
7) Cuando el dominio es un subfolder ejemplo sitio1.com/folder1
Tienes unos pasos mas. Debes tener cuidado al crear el directorio de configuración
7a) en sites debes crear sites/sitio1.com.folder1 (es importante observar esto no va barra sino punto en el nombre del directorio de configuracion) ,
7b) ahi copias default.settings.php con el nombre de settings.php
7c) el punto 2 no se aplica aqui, no tienes que hacer nada con vhost ya sabe el servidor que cuando alguien solicite http://sitio1.com/ su DocumentRoot es /var/www/drupal6.
7d) Si tienes que crear la base de datos para este nuevo sitio. ver punto 3
7e) Tienes que crear un link entre el nombre folder1 (nombre de subfolder que usaras) y /var/www/drupal6
cd /var/www/drupal6
ln -s ../drupal6 folder1 ( folder1 es el nombre de la subfolder que usaras )
ls /var/www/drupal6/
ahora te aparecra un nuevo symlink
folder1 --> ../drupal6
Resumiendo
Gustavo,
Ahora creo que está mucho más claro. Voy a resumir en un primer tiempo, para ver si todo está OK y despúes iremos desglsando.
Objetivo: Multisitios (multidominios) con datos (BD) independientes pero con un código (core) común a todos.
Permite tener en un solo lugar el core de Drupal, módulos contrib. y temas necesarios para varios sitios; lo que simplifica las tareas de mantenimiento de seguridad y upgrade.
Filosofía: Con este tipo de instalación, tendremos un solo "código común" a varios sitios. Por código común entendemos el código fuente de la versión actual de Drupal (el core de Drupal), algunos módulos contrib. que serán disponibles (pero NO habilitados por defecto) para todos los sitios (por ej. CCK, Views, Pathauto...) y en fin algunos temas contrib. que también serán disponibles para todos los sitios de la instalación.
Cada sitio compartirá este código común pero tendrá sus propios datos (su propia base de datos), sus propios módulos contrib. y sus propios temas.
1. Crear el Core o repositorio de código común.
(El core de la instalación multisitios no tiene otra función que ofrecer un código común (y no datos) a todos los sitios de la instalación.
Por ello no se crea un DB asociada a este core.)
1a) Obtener el código fuente de la versión actual de Drupal
1b) Descomprimir este código fuente
1c) Crear directorio para Drupal donde se crearan posteriormente los sitios (/var/www/drupal6/)
1d) Copiar el código fuente de Drupal (Drupal core) en /var/www/drupal6/ (no tocar nada, dejarlo como está)
1e) Copiar los módulos contrib. comunes para todos los sitios en /var/www/drupal6/sites/all/modules/
1f) Copiar los temas comunes para todos los sitios en /var/www/drupal6/sites/all/themes/
En este momento, no hemos lanzado ninguna instalación. No hemos instalado ninguna base de datos, no hemos tocado ni modificado ningún scripts, no hemos lanzado ningún script de instalación. Sólo hemos creado (copiado en realidad) un core de código sobre el cual los sitios de la instalación multisitios se van a instalar.
2. Crear la estructura para el sitio: sitio1.com
En esta fase, visto que ya tenemos el código fuente de Drupal "disponible" en el core, sólo deberemos enfocarnos en:
- a. crear el vhost del Apache para que sitio1.com apunte a /var/www/drupal6/
- b. crear la base de datos para sitio1.com
- c. crear el directorio de configuración de sitio1.com: /var/www/drupal6/sites/sitio1.com/
- d. instalar Drupal para sitio1.com
2a) Crear el host virtual para sitio1.com
Crear el archivo sitio1.conf en /etc/apache2/sities-avalaibles/sitio1.conf
Con ello, para sitio1.com, el servidor Apache apuntará directamente a /var/www/drupal6/. En realidad, Apache pasará la mano a Drupal para que encuentre donde está el sitio1.com. En este caso Drupal buscará en /var/www/drupal6/sites/ para ver si tiene algo para sitio1.com
Para que apache reconozca este nuevo host virtual
a2ensite sitio1.conf (agrega el link a sites-enable)
apachectl restart
2b) Crear una BD para sitio1.com (BD: db_sitio1, user: userdb_sitio1, pwd: pwddb_sitio1)
2c) Crear el directorio de configuración de sitio1.com
Crear el directorio /var/www/drupal6/sites/sitio1.com/
Es alli que Drupal buscará cuando Apache apuntará a /var/www/drupal6/ para sitio1.com (como lo hemos definido en sitio1.conf)
Crear el archivo settings.php
Copiar /var/www/drupal6/sites/default/default.settings.php en /var/www/drupal6/sites/sitio1.com/
Renombrar el nuevo archivo /var/www/drupal6/sites/sitio1.com/default.settings.php en /var/www/drupal6/sites/sitio1.com/settings.php
2d) Instalar Drupal para sitio1.com
Lanzar desde el navegador: http://sitio1.com/install.php
El scritps de instalacion (install.php) solo cambiará el archivo de configuracion /var/www/drupal6/sites/sitio1.com/settings.php
Siguiendo los pasos llegará a donde el wizard preguntaáa sobre el nombre de la base de datos y usuario y clave de la base. Ahí debes introducir los valores puestos en el punto 2b) . EN este ejemplo nombre de la base db_sitio1 , usuario userdb_sitio1, password pwddb_sitio1 (repito en el punto 2b) creamos la base de datos db_sitio1 con el usuario y password que ahora le señalamos a drupal debe usar para el sitio1)
Una vez terminado el proceso de instalación iniciado con http://sitio1.com/install.php tendrá su primer sitio en Drupal modo multisite funcionando.
Luego para crear cualquier sitio repite el paso 2 por completo
En forma análoga claro , el vhost de sitio2.com solo cambiará el nombre del ServerName que para el segundo sitio seria sitio2.com (nombre del dominio de ese sitio). El DocumentRoot sera igual que de sitio1.com Todos los sitios que usen este código tendrán como DocumentRoot a /var/www/drupal6 .-
Así te parece bien?
Saludos y gracias por tu tiempo !!!
Karim,
ok
Ok tenes todo listo ahora proba en tu maquina la instalación
Saludos
me funciona 100%. Gracias !!
Gustavo.
Ya hice todas las pruebas en local y en producción y…. me funciona 100%. Gracias !! (Se ve que la comunidad Drupal funciona de verdad…)
Hice también pruebas con cpanel (basándome en este post: http://drupal.org/node/348619), y te cuento que lo veo más sencillo. Basta utilizar la opción “Addon Domains” y allí apuntar hacía el directorio /drupal6/ (bueno en este caso con cpanel es /public_html/drupal6/
El único problema con cpanel, es que se requiere un dominio que apunte hacía /public_html/ (imaginamos el dominio: loquesea.com). Debido a ello, el directorio /public_html/drupal6/ es accesible mediante http://www.loquesea.com/drupal6/ , lo que puede llevar a serios problemas de seguridad. Existe una manera de evitar esto?
Saludos.
Fijate si te sirve
No uso cpanel por ello no puedo opinar mucho sobre el tema
pero fijate si te sirve http://drupal.org/node/125539
Saludos
gustavo
Pregunta.
Buenas, primero quiero agradecer a Gustavo por el escrito. Me quito un monton de dudas y hacia tiempo venia leyendo en distintos lugares cosas similares para hacer esto y estaba muy perdido.
Segundo, alguno sabria como hacer un script bash que realize los pasos 2, 3, 4 y 5 a partir de los datos necesarios pasado por la linea de comandos al ejecutarlos?
Pero con PostgreSQL, por que vi uno similar que utiliza MySQL y no se como modificarlo para Postgre.
Desde ya muchas gracias,
Saludos.
alguien pidio un script?
la mujer de quien?.... alguien dijo que necesitaba un script? ;)
me hizo acordar uno que hice hace un tiempo atrás y aqui va...
#!/bin/sh
echo "creando un nuevo sitio: $1"
[ -n "$1" ] && [ -n "$2" ] && [ -n "$3" ] && [ -n "$4" ] || { echo "usar: $0 dominio database dbuser dbpasswd"; exit 1; }
[ -d "sites/$1" ] && { echo "el sitio $1 ya existe, eliminelo primero"; exit 1;}
mysqladmin -u root -pPassword create $2
echo | mysql -u root -pPassword << EOF
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER
ON $2.*
TO '$3'@'localhost' IDENTIFIED BY '$4';
EOF
mkdir -p sites/$1/files
chown www-data sites/$1/files
cat > sites/$1/settings.php << EOF
<?php
// \$Id: default.settings.php,v 1.8 2007/12/20 09:35:10 goba Exp $
\$db_url = 'mysql://$3:$4@localhost/$2';
\$db_prefix = '';
\$update_free_access = TRUE;
# \$base_url = 'http://www.example.com'; // NO trailing slash!
ini_set('arg_separator.output', '&');
ini_set('magic_quotes_runtime', 0);
ini_set('magic_quotes_sybase', 0);
ini_set('session.cache_expire', 200000);
ini_set('session.cache_limiter', 'none');
ini_set('session.cookie_lifetime', 2000000);
ini_set('session.gc_maxlifetime', 200000);
ini_set('session.save_handler', 'user');
ini_set('session.use_only_cookies', 1);
ini_set('session.use_trans_sid', 0);
ini_set('url_rewriter.tags', '');
EOF
por supuesto, la linea del mysqladmin y el mysql, debe reemplazarse Password por el password del usuario root del mysql.
Adjunto el script, solo hay que descargarlo, quitarle la extension .txt (no se pueden crear adjuntos con extension .sh, clever ;) y darles permisos de ejecucion (chmod 755 newsite.sh seria suficiente).
Seguridad
En el paso 1d se dice de hacer:
chown -R www-data:www-data /var/www/drupal6Este paso es inadecuado ya que el servidor web no necesita ser propietario del core de drupal ni necesita permisos de escritura sobre sus ficheros; al contrario esto abre las puertas a explotar posibles fallos de seguridad del servidor web o alguna de las aplicaciones instaladas en el mismo.
Lo correcto es que /var/www/drupal6/* pertenezca a un usuario distinto al del servidor web y dar a www-data permisos de escritura sólo para los ficheros o directorios que necesita estrictamente. Ejemplo:
chown -R root:root /var/www/drupal6chown -R www-data /var/www/drupal6/sites/sitio.com/files
chown www-data /var/www/drupal6/sites/sitio.com/settings.php
Además el fichero settings.php no debe tener en ningún caso permiso de lectura para others. Drupal se encarga de alertar en el reporte de estado si los permisos de settings.php no son los adecuados.
Multisite y Seguridad
Estoy de acuerdo con lo que expresado .
Hice un paso a paso rápido para poder empezar a trabajar con multisite , que parece ser resulta complicado para muchas personas, como el caso de quien hizo la pregunta al inicio de este post.
Entre los déficit del tutorial esta el de trabajar con usuario root en linux y no con un usuario diferente y con privilegios ciertos privilegios y usando sudo que es o recomendable.-
Pero quise ser rápido y llegar a una primera instalación. Y luego ir corrigiendo el documento en todos los puntos referentes a seguridad . como ser lo permisos de settings.php una vez terminada la instalación.- Y también mejores prácticas ir agregando las mejores prácticas.-
Por ello bienvenido tu aporte y vamos mejorando juntos este documento agregando todos los puntos de seguridad en forma que le resulta fácil de comprender a todos aquellos que no estén familiarizados con linux y estén empezando a trabajar con drupal o estando familiarizados con esta aplicación no lo esten con los detalles de instalación.-
Algunos tienen el doble desafió de aprender linux y drupal junto .-
La comunidad de beneficia con el aporte que cada uno podamos hacer.-
Saludos y gracias.-
web y blog con misma bd en drupal con Multi-site
Hola amigos , soy nuevo en esto de drupal, apenas he hecho algunas cosas, pero me parese genial, estoy intentando hacer una web y un blog que trataran temas diferentes, pero quiero hacerlo utilizando multisite, la misma bd y el mismo vhost de apache, metiendo el blog en un subfolder:
he estado leyendo por aqui, pero para lo que quiero hace aun no lo tengo bien claro, veamos:
1 Obtener el código fuente de la versión actual de Drupal
2 Descomprimir este código fuente
3 Crear directorio para Drupal donde se crearan posteriormente los sitios (/var/www/drupal6/)
4Copiar el código fuente de Drupal (Drupal core) en /var/www/drupal6/ (no tocar nada, dejarlo como está)
5 Copiar los módulos contrib. comunes para todos los sitios en /var/www/drupal6/sites/all/modules/
6 Copiar los temas comunes para todos los sitios en /var/www/drupal6/sites/all/themes/
Crear la estructura para la web y el blog sitio:
Crear el archivo settings.php
Copiar /var/www/drupal6/sites/default/default.settings.php en /var/www/drupal6/sites/sitio1.com/
Renombrar el nuevo archivo /var/www/drupal6/sites/sitio1.com/default.settings.php en /var/www/drupal6/sites/sitio1.com/settings.php
Ahora instalar Drupal:
luego crear el subfolder para el blog: /site1.com/blog <=== subfolder
en fin! al final lo que quiero es que:
www.midominio.com <========Sea el site1
www.midominio.com/blog <====Seal el blog o site2
todo esto utilizando la misma BD.
Ayudenme a aclara un poco mas todo esto.