Le plugin de Gestion de mutualisation permet de gérer les différents canaux de mediaspip depuis un site maître. Il a pour but de fournir une solution pure SPIP afin de remplacer cette ancienne solution.
Installation basique
On installe les fichiers de SPIP sur le serveur.
On ajoute ensuite le plugin "mutualisation" à la racine du site comme décrit ici.
On customise le fichier mes_options.php
central comme on le souhaite. Voilà pour l’exemple celui de la plateforme mediaspip.net :
- <?php
- require _DIR_RACINE.'mutualisation/mutualiser.php';
- $site = $_SERVER['HTTP_HOST'];
- if ($site != $_SERVER['HTTP_HOST']) {
- include_spip('inc/headers');
- redirige_par_entete('http://'.$site.'/');
- }
- // Autoriser un cache de 50Mo
- $quota_cache = 50;
- // Ne pas autoriser les plugins auto
- include_spip('inc/acces');
- }
- verifier_htaccess('config/');
- demarrer_site($site,
- 'creer_site' => true,
- 'creer_base' => true,
- 'creer_user_base' => false,
- 'mail' => 'contact@mediaspip.net', // Adresse mail pour recevoir un mail lors d'une creation de site
- 'code' => 'password_mutu',// Code d'activation principal
- 'table_prefix' => false,
- 'cookie_prefix' => true,
- 'repertoire' => 'sites',
- 'url_img_courtes' => true,
- 'utiliser_panel' => true, // Utiliser une table externe pour recuperer des identifiants ... (code, user, pass) permettant a un utilisateur d'installer le site (false)
- 'annonce' => '',
- 'url_creer_base' => 'http://domaine.alernc.tld/admin/sql_doadd.php?username=useralternc&password=password_alternc&dbn='.prefixe_mutualisation($site), // Creer la base de donnees via une URL (methode Alternc)
- 'url_hebergeur' => 'http://www.mediaspip.net',
- 'url_contact_hebergeur' => 'http://www.mediaspip.net/spip.php?page=contact'
- )
- );
- ?>
Quelques explications concernant l’exemple ci-dessus :
- nous utilisons Alternc pour gérer nos bases de données, donc nous utilisons également le ping sur une Url pour créer ces bases.
- On a créé au préalable un utilisateur spécifique Alternc (ici
useralternc
) en lui donnant un mot de passe (password_alternc
), en ne limitant pas la création de bases pour cet utilisateur ; - On a également installé le site maître dans le compte de cet utilisateur ;
- Les defines
_INSTALL_USER_DB
et_INSTALL_PASS_DB
doivent être identiques au nom d’utilisateur et mot de passe passés en paramètre de l’Url de PING. Il n’y aura pas de problème de divulgation de mot de passe sur le réseau car le serveur Alternc doit être installé sur le même serveur pour que cela fonctionne et que ces infos ne sortiront donc pas de la machine ;
- On a créé au préalable un utilisateur spécifique Alternc (ici
- Certaines options de la fonction
demarrer_site
sont également importantes :-
url_creer_base
: correspond à l’adresse de ping sur le serveur Alternc ; -
utiliser_panel
: doit être àtrue
pour bénéficier du plugin que nous documentons actuellement ;
-
- Le define
_SITES_ADMIN_MUTUALISATION
doit comporter l’adresse du site définie comme "maître" ;
On peut ensuite procéder à l’installation du site maitre (nous n’allons pas expliquer comment faire pointer vos DNS au bon endroit, cela est abordé dans le premier lien de cet article) et vous rendant avec votre navigateur sur son adresse, vous devrez utiliser pour ce premier site le code
que vous avez utilisé dans la fonction demarrer_site()
.
Une fois la procédure d’installation terminée, SPIP aura créé un sous répertoire dans le dossier sites/
de votre installation comportant les 4 répertoires séparés pour cette instance. Dans le sous-répertoire config/
, on va rajouter un fichier mes_options.php
qui sera spécifique à cette instance et dans lequel on mettra les lignes suivantes :
- <?php
- ?>
Ce define permet de déclarer pour l’instance en question un répertoire de plugins supplémentaire qui ne sera utilisable que par ce site. Vous pouvez y déposer le plugin "Gestion de mutualisation" afin qu’il ne soit pas accessible des autres sites. Vous devez également déposer les fichiers des plugins dont il dépend, nous vous conseillons cependant de les mettre dans le dossier extensions/
à la racine de part leur nature et pour être sûr qu’ils ne seront jamais désactivés.
En activant ensuite le plugin dans votre interface privé, son fonctionnement devient automatique.
Gestion des sites mutualisés dans une table SQL d’un site maître
Ce plugin permet de gérer les différentes instances de mutualisation de SPIP dans une table SQL d’un site dit "maître" permettant de définir à sa création :
- Son titre ;
- Son descriptif ;
- Son administrateur principal (défini par son id_auteur) ;
- Son domaine DNS (ex : mediaspip.net) ;
- Son sous-domaine (ex : canal_test) ;
- Son FQDN complet, défini automatiquement suite aux deux champs précédents (ex : canal_test.mediaspip.net) ;
- Sa date de demande ;
- Sa date de validation ;
- S’il utilise la fonction super_cron ;
Il ajoute également un champ à la table spip_auteurs nb_mutus
définissant le nombre d’instances de mutualisation qu’un auteur a le droit de créer. Le nombre par défaut est réglé à "0" (infini) et est modifiable dans la configuration du plugin ainsi que sur chaque utilisateur individuellement dans le formulaire d’édition de l’utilisateur (ce champ n’est visible que par les administrateurs).
En plus des ces données stockées en base de donnée, il est également possible d’associer un logo à chaque instance de mutualisation. Dans le cadre de l’édition d’une instance dans l’espace privé, on utilise l’API de base de SPIP et cette fonctionnalité est donc toujours présente. Dans le cadre de l’édition de l’instance dans l’espace public, on se sert du plugin Ajaxforms qui permet d’ajouter un formulaire CVT d’édition de logo de n’importe quel objet. Dans le cas où ce plugin n’est pas présent, il ne sera pas possible d’associer un logo à l’instance. L’ajout d’un logo n’est possible qu’après création de l’instance de mutualisation.
Gestion d’instances et notifications
Pour avoir un suivi correct des instances il est nécessaire de notifier régulièrement.
La configuration du plugin
La configuration est relativement simple, elle permet :
- de définir un ou plusieurs domaines complêtement gérés par la mutualisation (ex : mediaspip.net. Ces domaines doivent être correctement configurés au niveau d’Apache pour faire pointer l’ensemble de leurs sous domaines vers le répertoire de la mutualisation) ;
- une série de sous-domaines par domaine configurés ci-dessus, permettant d’éviter la création de mutualisations sur des sous-domaines déjà existants ou réservés (ex : www ;mail ;smtp) ;
- la possibilité de saisie d’un domaine libre, appartenant à l’utilisateur. Dans ce cas c’est à l’utilisateur de faire pointer son domaine ou sous-domaine sur le serveur hébergeant la mutualisation. L’administrateur du serveur devra quant à lui gérer le virtualhost Apache local pour ce nouveau domaine ;
- la possibilité de régler l’intervalle entre deux appels de la fonction super_cron sur les instances de mutualisation (à spécifier en nombre de secondes) ;
La fonction Super Cron
Les taches Cron de SPIP sont réalisée lorsque des visiteurs vont sur le site en question, ce qui peut être relativement ennuyeux lorsque le site est peu fréquenté et que son fonctionnement nécessite la réalisation de tâches à intervalle régulier car elles ne se réaliseront que rarement (encodage de médias, envoi de notification ...).
Pour palier à cela, le plugin de gestion de la ferme a une tâche Cron qui ne s’occupe que de faire fonctionner les Crons des instances mutualisées.
Pour ce faire, il suffit de créer une tâche Cron système sur le serveur appelant le Cron du site maître qui lui, à intervalle régulier, appellera les Crons des instances.
On ouvre donc crontab sur le serveur :
- crontab -e
Puis on y ajoute une ligne qui ressemble à (pensez à modifier www.mediaspip.net
par l’Url de votre site maître) :
- * * * * * curl http://www.mediaspip.net/spip.php?action=super_cron
Ou son équivalent avec wget
:
- * * * * * wget -O - -q -t 1 http://www.mediaspip.net/spip.php?action=super_cron
Cette ligne fera en sorte que le Cron du site maître soit appelé toutes les minutes par le serveur.
Cette fonctionnalité nécessite que le plugin "Job queue" soit installé sur le site maître et les instances de mutualisation.
L’action cron envers les autres sites est planifiée dans le plugin toutes les minutes (60 secondes), cette valeur peut être modifiée dans la le formulaire de configuration. Cette action est également réalisée sur toutes les instances par défaut, il est possible d’annuler cette fonction sur certains sites en les modifiant après création (par un admin).
Le gros avantage de cela est que nous n’avons besoin que de créer une seule tâche planifiée au niveau du serveur, plutôt qu’une pour chaque site.
Intégration dans les squelettes
Menus
Le plugin gestion de la mutualisation fournit un élément de menus supplémentaire possible "Demander une instance de mutualisation" affichant un lien vers une page du type spip.php?page=demander_mutu
fournie par défaut dans le plugin et compatible avec les squelettes de type Zpip (cf plus bas).
Squelettes de type Zpip
Le plugin fournit une page "demander_mutu" accessible à l’adresse spip.php?page=demander_mutu
affichant le formulaire de demande d’instance de mutualisation et la liste des demandes en cours de validation et déjà validées.
Le plugin fournit également une page "mutu" permettant d’afficher les informations liées à une instance de mutualisation.
Les notifications
Intégration à d’autres plugins
Champs extras 2
Le plugin de gestion d’instances de mutualisation crée un objet SPIP spécique "mutu" qui est automatiquement extensible via le plugin champs extras 2 permettant ainsi d’ajouter aisément des champs à la fois dans la table de la base de donnée mais aussi dans le formulaire de création.
Inscription3
Le plugin de gestion de mutualisation est compatible avec le plugin inscription3. Ainsi il est possible d’ajouter dans la configuration d’Inscription3 la possibilité de demander dès l’inscription d’un individu au site maître une instance de mutualisation.
Le visiteur verra alors dans le formulaire de demande de compte une partie "Instance de mutualisation" lui demandant de choisir un titre, un domaine possible, un sous-domaine et de donner un descriptif (optionnel).
Cette partie du formulaire peut être rendue obligatoire (optionnel), le descriptif peut être ajouté et rendu obligatoire également. Le formulaire d’inscription au site vérifiera alors automatiquement la disponibilité du domaine en question et renverra une erreur en cas d’échec.
Lorsque le formulaire de création de compte est validé, la démarche d’octroi d’une instance de mutualisation est identique à celle en passant par le formulaire de demande habituel.
Forums
Depuis que les forums sont sortis du Core de SPIP (version 2.2 et supérieures) ou avec l’extension Forum (en 2.1 au moins mais pas le plugin normal dénommé Forum également), il est dorénavant possible de manipuler des forums sur n’importe quel objet SPIP.
Il est donc possible d’avoir des forums de discussion autour de l’objet "mutu". Il suffit d’ajouter le formulaire de forum (#FORMULAIRE_FORUM
) dans la page d’une mutualisation.
Piwik est un outil de statistiques open-source comparable à Google Analytics.
Si le plugin Piwik est installé sur le site principal et configuré avec un accès administrateur au serveur Piwik, il est alors possible de créer depuis la gestion de la ferme un compte utilisateur pour les détenteurs d’instances de mutualisation et un site analysé sur le serveur Piwik correspondant aux instances.
Pour ce faire, on ajoute un champ dans la tables des auteurs piwik_user
qui correspondra au nom d’utilisateur sur le serveur Piwik et un champ piwik_id
dans la table des instances qui correspondra au numéro du site sur le serveur Piwik.
Ainsi, à l’installation de son instance de mutualisation, l’utilisateur pourra, s’il le souhaite, activer le plugin Piwik et y rentrer ses identifiants pour analyser le trafic de son site.
Les dépendances du plugin
Le plugin de gestion de mutualisation dépend de plusieurs autres donc la liste est la suivant :
- spip_bonux : une boite à outil devenue indispensable ;
- saisies : permettant de créer plus facilement les formulaires ;
- Job Queue : permettant d’optimiser les tâches Cron de SPIP ;
- Vérifier : API de vérification pour les formulaires ;
- Afficher objets : pour avoir des listes d’objets en squelette dans l’espace privé ;
Ces plugins étant des outils de développement, ils sont susceptibles d’être utilisés par beaucoup d’autres plugins, nous vous conseillons de les mettre dans votre dossier extensions/
à la racine du site.
Ce que ce plugin ne fait pas
Il ne gère pas la configuration d’Apache, donc si vous activez plusieurs domaines possibles, c’est à la personne en charge du serveur de créer les virtualhosts apache nécessaires, tout comme dans le cas d’un domaine ouvert.
Ce que ce plugin aimerait faire
Se connecter directement à la base de donnée d’un serveur Alternc ou tout autre panel de gestion de serveur afin de pouvoir gérer de manière autonome :
- l’ajout de domaines et la configuration de sous domaines "libres" ;
- la création et la suppression de comptes ftp;