Un SPIP para muchos sitios
Publicado el 10 de agosto de 2009 |

Administrar muchos sitios SPIP tiene sus bemoles. Yo administro, fácil, unos 30. Cuando hay que actualizar la versión (por cuestiones de funcionalidad, o bien, como la semana pasada, por cuestiones de seguridad), es un trabajo engorroso y aburrido hacer 30 veces lo mismo. Y el trabajo se vuelve exponencial si hay que actualizar los plugins para cada uno

Para evitar eso existe la Mutualización, que desde la versión 2 es realmente muy fácil.

El concepto es simple: un sólo núcleo de SPIP (/ecrire, /prive, /squelettes-dist, /plugins) se comparte para motorizar diferentes sitios, que tendrán los directorios con contenido propio (/squelettes, /config , /IMG, etc), separado del resto

Así, a la hora de actualizar SPIP sólo tenemos que actualizar una sola instalación, tarea que se vuelve trivial si además usamos svn.

Requisito

En general, la mutualización funciona sin muchos pormenores en un servidor LAMP, pero nuestro servidor de hospedaje debe permitir apuntar diferentes dominios a un mismo directorio publico.

Por ejemplo, mi sitio textosypretextos.com.ar apunta a /home/tin/public_html/spip y nqnwebs.com apunta también a /home/tin/public_html/spip.

Es una configuración simple, pero no todos los servicios de hosting lo permiten.

Puesta en marcha

Zip - 39.2 KB
plugin mutualisation

La "mutualización fácil" funciona a través de este plugin, pero que particularmente debe ser instalado en la raiz del sitio y no en la carpeta /plugins

Al descomprimirlo crea una nueva carpeta, /mutualisation, en la raiz de nuestro SPIP mutualizado

Además, incluye un archivo mes_options.php de ejemplo, pero yo te propongo este, que debe ser instalado en /config

  1. <?php
  2.     if (!defined("_ECRIRE_INC_VERSION")) return;
  3.     require _DIR_RACINE.'mutualisation/mutualiser.php';
  4.  
  5.     if (substr($site = $_SERVER['HTTP_HOST'],0,4)!='www.')
  6.         $site = 'www.' . $site;
  7.    
  8.     define ('_INSTALL_SERVER_DB', 'mysql');
  9.     define ('_INSTALL_HOST_DB', 'server');
  10.     define ('_INSTALL_USER_DB', 'user');  
  11.     define ('_INSTALL_PASS_DB', 'pass');
  12.     define ('_INSTALL_NAME_DB', 'db');
  13.    
  14.     /* Comentario la línea siguiente si utilizará la configuración de prefijos de tabla de más abajo */
  15.    
  16.     //define ('_INSTALL_TABLE_PREFIX', 'granja');
  17.    
  18.     /*
  19.     * Si el nombre del servidor es diferente al DNS ,
  20.     * a veces puede ser problemático y debe ser
  21.     * declarado aquí
  22.     */
  23.     // define ('_INSTALL_HOST_DB_LOCALNAME', 'nom_serveur');
  24.    
  25.     /*
  26.      *  Si el servidor de base de datos no es mysql, debe especificar
  27.      * # define ('_INSTALL_SERVER_DB', 'pg'); // mysql|pg|sqlite2|sqlite3
  28.      *
  29.      * /!\  En PG, es recomendable utilizar la opción creación de usuarios de SQL
  30.      */
  31.    
  32.     /*
  33.      * Crear automáticamente los usuarios SQL (pg|mysql)
  34.      *
  35.      * Esto permite
  36.      * - Tener un usuario root como titular de los derechos de
  37.      * Creación de bases de datos (el usuario con una fase obligatoria de
  38.      * Un nombre es PG - PG no se conecta, sin dar un nombre a BDD)
  39.      * - Para crear los usuarios automáticamente sql
  40.      * Con sólo los derechos de los directores
  41.      * De su base de datos que se creará
  42.      *
  43.      * A continuación, debe sustituir
  44.      *
  45.      * _INSTALL_(USER|PASS)_DB par _INSTALL_(USER|PASS)_DB_ROOT
  46.      *
  47.      * et ajouter dans demarrer_site l'option
  48.      * 'creer_user_base' => true
  49.      */
  50.     # define ('_INSTALL_USER_DB_ROOT', 'mon_root');
  51.     # define ('_INSTALL_PASS_DB_ROOT', '********');
  52.  
  53.     /*
  54.      * Crear las bases de dato via un ping a una URL (metodo AlternC)
  55.      *
  56.      * Il suffit de renseigner l'option url_creer_base, en lui passant les bons parametres :
  57.      * 'url_creer_base' => 'https://bureau.tld/admin/sql_doadd.php?username=USER&password=PASS&dbn='.prefixe_mutualisation($site)
  58.      */
  59.      
  60.      
  61.     /*
  62.      * Transformar en las paginas publicas las URL de imagenes
  63.      * /sites/mon_site/IMG/* -> /IMG/*
  64.      * /sites/mon_site/local/* -> /local/*
  65.      *
  66.      * - Necesita el mod_rewrite (reescritura de url) de apache
  67.      * - Sólo funciona con nombres de dominio mutualización
  68.      * ('http_host' : http://mi_sitio_mutualizado.com)
  69.      * (por lo tanto, no funciona con un subdirectorio - http://mi_sitio_mutualizado.com/misitio/)
  70.      *
  71.      * y añadir en la opción
  72.      * 'url_img_courtes' => true
  73.      *
  74.      * Es posible generar los  .htaccess
  75.      * automaticamente en /IMG y /local
  76.      * gracias a ?var_mode=creer_htaccess_img
  77.      *
  78.      */
  79.    
  80.     /*
  81.      * Indique aqui el nombre del sitio de administración de esta mutualización
  82.      * (o varios, separados por oma)
  83.      * (dpor ejemplo, 'scriibe.net' es el dominio de nivel maximo)
  84.      * para autorizar todos los sitios no definir la constante ;
  85.      * Si el propietario del sitio no se encuentra en los sites/ sino en la razi,
  86.      * escriba '' y agregue 'mutualisation' en $dossier_squelettes
  87.      */
  88.     define ('_SITES_ADMIN_MUTUALISATION', 'nqnwebs.com');
  89.    
  90.     demarrer_site($site,
  91.         array(
  92.             'creer_site' => true,        // Creer ou non le site s'il n'existe pas (defaut: false)
  93.             'creer_base' => false,        // Creer ou non la base de donnee si elle n'existe pas (false)
  94.             'creer_user_base' => false,  // Creer ou non un utilisateur pour la nouvelle base de donnee (false)
  95.             'mail' => '',                // Adresse mail pour recevoir un mail lors d'une creation de site mutualise ('')
  96.             'code' => 'miclave',  // Code d'activation ('ecureuil')
  97.             'table_prefix' => true,     // Definir automatiquement le prefixe de table (false) ... mettre true si tous les sites dans la meme base
  98.             'cookie_prefix' => true,     // Definir automatiquement le prefixe de cookie (false)
  99.             'repertoire' => 'sites',     // Nom du repertoire contenant les sites mutualises ('sites')
  100.             'url_img_courtes' => true,   // Utiliser la redirection des URL d'images courtes dans la partie publique (false)
  101.             # 'utiliser_panel' => false, // Utiliser une table externe pour recuperer des identifiants ... (code, user, pass) permettant a un utilisateur d'installer le site (false)
  102.             'url_creer_base' => ''       // Creer la base de donnees via une URL (methode AlternC)
  103.         )
  104.     );
  105.    
  106. ?>

Este mes_options.php (retocado por mi) permite que los sitios funcionen con o sin ’www’. También apunta a una única base de datos, donde se encargará de crear las tablas necesarias para cada sitio, diferenciadas por un prefijo.

Sólo resta crear la carpeta /sites en la raiz del sitio, donde irán nuestros diferentes sitios mutualizados.

Al acceder via web a un dominio de un sitio sobre esta mutualización, lo primero que aparecerá es una solicitud de contraseña, definida en array de configuración de mes_options.php (en el ejemplo, la contraseña es miclave)

Luego siguen dos etapas que nos crean la estructura de directorios para este sitio dentro de /sites y las tablas para este sitio en la base de datos compartida. Lo que sigue es el proceso de instalación estándar de SPIP.

¡Listo!

Hay que tener en cuenta que ahora los archivos para nuestro sitio estarán dentro de /sites/dominio/ y es allí donde deberán subirse los esqueletos y demás.

Mutualizar un sitio en producción

¿Qué pasa si el sitio que quiero mutualizar ya está funcionando sobre un spip propio? No problem.

Basta indicar (desde el panel, o solicitando al administrador del hosting) que nuestro dominio debe apuntar ahora a la carpeta donde tenemos el spip mutualizado (en mi ejemplo /home/tin/public_html/spip ), crear el directorio /sites/dominio (donde dominio es la url del sitio que queremos migrar) y mover alli las carpetas /config, /IMG, /squelettes, /local y /tmp (o crear una /tmp nueva) del SPIP en uso al nuevo directorio. [[Estas carpetas, bien podrian ser link simbólicos]. Magia!

Conclusión

Si administrás más de dos sitios spip sobre el mismo servidor, esta configuración te ahorrará trabajo. Avanti: ¡Todos para uno y uno para todos!

blog comments powered by Disqus


NqN/webs :: Desarrollo, Diseño y Hosting de Sitios Web por Martín Gaitán
Neuquén & Córdoba - Argentina - © Año 2004/2009 - Tel (+54) 0351 460·1524 - Celular: (+54) 351 153·308454
Contacto | Pagos | RSS | SPIP | Usa Firefox