Spip-Cli en Mutualisation

Spip-Cli dispose d’un exécutable spipmu qui permet d’exécuter une même commande sur un ensemble de sites SPIP mutualisés.

Préambule

Cet outil s’utilise actuellement dans le cadre d’une mutualisation habituelle de SPIP (par exemple avec le plugin Mutualisation) qui s’appuie sur la variable d’environnement HTTP_HOST pour déterminer le site à démarrer. La constante _DIR_SITE doit être définie sur le chemin du site démarré ainsi.

Le répertoire qui héberge les sites doit se nommer sites et se situer à la racine du SPIP (à côté donc des répertoires ecrire/ ou plugins-dist/). Cependant, ce peut être un lien symbolique vers un autre dossier en dehors de SPIP.

Installation

Si ce n’est pas fait, lier le binaire pour accéder directement à la commande spipmu :

cd /opt/spip-cli/bin
ln -s $(pwd)/spipmu /usr/local/bin/

Usage

L’usage est simple avec 2 paramètres :
-  [glob] : tel que "*" ou "*.domaine.tld" indique sur quels sites appliquer la commande, à partir du nom de leur répertoire. Notons que cet argument doit être la plupart du temps entouré de guillemets, car l’étoile est remplacée en terminal par la liste des fichiers du répertoire en cours, ce qui provoquerait une erreur de commande.
-  [commande] : indique la commande à exécuter. Entourez de guillemets aussi s’il y a des options ou des arguments.

spipmu [glob] [commande]
spipmu "*" test:spip
spipmu "*.domaine.tld" "plugins:lister --export"
spipmu demo.domaine.tld "plugins:activer saisies yaml z-core"

Fonctionnement

Pour chaque répertoire validant la recherche glob, le script tente de se connecter à la base de données du site pour récupérer son URL (le champ adresse_site dans la table spip_meta).
Une valeur de host est calculée à partir de cette URL, si on arrive à l’obtenir.

Pour chaque site valide, on exécute la commande SPIP-Cli demandée en sous-tâche, en transmettant la variable d’environnement HTTP_HOST que l’on avait calculé. Ainsi le SPIP démarre sur le site adéquat.

Si la commande lancée nécessite des interactions en console (par exemple pour valider une action), il faudra valider l’action pour chaque site.

L’ensemble des commandes Spip-Cli sont donc accessibles, mais il convient de préciser que certaines ne fonctionneront pas forcément dans le cadre d’une mutualisation.

Facilités avec la commande spip

Utiliser directement la commande spip

Vous pouvez aussi utiliser sur un site précis directement la commande spip, soit en connaissant le host et en le transmettant en variable d’environnement, soit en exécutant la commande depuis le répertoire du site :

cd /var/www/spip_mutualise
# host transmis, la mutualisation démarrera dessus
HTTP_HOST="sous.domaine.tld" spip test:spip
# sinon aller dans le répertoire
cd sites/sous.domaine.tld
spip test:spip

Lorsque la commande spip est exécutée depuis un répertoire d’un Spip mutualisé, la variable d’environnement HTTP_HOST sera calculée (à partir de l’URL du site en base de données) avant de démarrer SPIP.

Exemple de sortie

spipmu "cite*" test:spip

Note : les données sont remplacées par des petits xxx ici.

spipmu *cite* test:spip

Spip Cli Mutualisation
======================

  ✔ SPIP trouvé.
  ✔ Répertoire sites trouvé.
  ✔ 2 sites correspondent au critère *cite*
  ✔ 2 sites valides

 * www.cite-a-xxxxxx.fr
 * www.cite-b-xxxxxx.fr

www.cite-a-xxxxxx.fr
----------------------------------------------------


Vérifier notre accès à SPIP
===========================

  ✔ SPIP est trouvé
  ✔ SPIP est démarré
  ✔ PDO Accessible

 Nom du site : XXX
 Adresse du site : http://www.cite-a-xxxxxx.fr

  ✔ 2 webmestre·s sur ce site (via PDO)
  ✔ 2 webmestre·s sur ce site (via SPIP)
 ------ ---------------- ----------------------------------
  id     nom              email
 ------ ---------------- ----------------------------------
  1      Administrateur   xxx@xxxx
  1234   XXXXX            xxx@xxxx
 ------ ---------------- ----------------------------------




www.cite-b-xxxxxx.fr
--------------------------------------------------------


Vérifier notre accès à SPIP
===========================

  ✔ SPIP est trouvé
  ✔ SPIP est démarré
  ✔ PDO Accessible

 Nom du site : XXXXXXXX
 Adresse du site : http://www.cite-b-xxxxxx.fr

  ✔ 1 webmestre·s sur ce site (via PDO)
  ✔ 1 webmestre·s sur ce site (via SPIP)
 ---- ----------- ----------------------------------
  id   nom         email
 ---- ----------- ----------------------------------
  1    AdminSpip   xxx@xxxx
 ---- ----------- ----------------------------------

Discussion

3 discussions

  • Bonjour,
    Je reviens vers vous car mon ancien problème est corrigé ! L’erreur venait bien du config.php qui contenait une erreur...
    Aujourd’hui, je voulais activer plusieurs plugins sur mes sites mutualisés mais quand j’écris la commande « spipmu "site*" plugins:activer nomplugin », j’obtiens le message suivant :

    [Symfony\Component\Console\Exception\RuntimeException]
    Too many arguments, expected arguments "glob" "spip-cli-command".
    Batch [<glob>] [<spip-cli-command>]

    Le problème venait de ma syntaxe qui était fausse...
    Il faut écrire : « spipmu "site*" "plugins:activer nomplugin" » !

    Si ça peut aider...
    Didier.

    Répondre à ce message

  • 5

    Merci de m’aider.
    Quelle que soit la commande spipmu "fo*" test:spip dans le dossier racine de spip, ou spip test:spip dans le dossier sites/formation10), j’obtiens le résultat suivant (sans le début pour la deuxième solution) l’option -vvv ne donne rien de plus :

    Spip Cli Mutualisation
    ======================
     ✔ SPIP trouvé.
     ✔ Répertoire sites trouvé.
     ✔ 1 sites correspondent au critère fo*
     ✔ 1 sites valides
    
     * formation10.tice.ac-orleans-tours.fr
    
    formation10.tice.ac-orleans-tours.fr
    ------------------------------------
    <!DOCTYPE html>
    <html class='ltr fr no-js' xmlns='http://www.w3.org/1999/xhtml' lang='fr' dir='ltr'>
    <head>
    <title>Site en travaux</title>
    <meta name='viewport' content='width=device-width' />
    <link rel='stylesheet' href='prive/themes/spip/reset.css' type='text/css' />
    <link rel='stylesheet' href='prive/themes/spip/clear.css' type='text/css' />
    <link rel='stylesheet' href='prive/themes/spip/minipres.css' type='text/css' />
    </head>
    <body class='minipres'>
            <div id='minipres'>
            <h1>Site en travaux</h1>
            <div>
    <p style='text-align: center;'>Ce site n&#8217;est pas encore configur&#233;. Revenez plus tard...</p>
            </div>
            </div>
    </body>
    </html>
    • Je viens de me réinstaller une mutualisation rapidement en local et je n’ai aucun problème pour ma part.

      Peut être est-ce un problème de droits sur les fichiers, le PHP utilisé en Cli n’est pas le même souvent que celui utilisé en web.

      Tu as une configuration particulière pour les sites ?
      Le site SPIP en mutualisation est il effectivement configuré et fonctionnel ?

    • Oui, a priori le SPIP contient la base de données au moins, et il arrive à la lire lorsqu’il lance « spipmu » (avec le connecteur PDO de PHP ; c’est pas le même que SPIP à cet endroit, mais ça lit bien le fichier config/connect.php). Donc ce n’est pas l’absence de bdd qui pose souci.

    • La fichier de configuration de démo fournit avec le plugin mutualisation utilise pour tester le site en cours la variable d’environnement $_SERVER['HTTP_HOST'], et c’est elle qui est générée automatiquement pas Spip-cli avant d’exécuter SPIP.

      Ta mutualisation (dans /config/mes_options.php ) utilise cette variable aussi pour définir le site à charger ? autre chose ?

    • Bonjour Matthieu,
      Je me remets sur la mutualisation... Un peu de vacances étaient nécessaires pour relâcher la pression et faire un peu le vide.
      Merci d’avoir pris du temps pour me répondre.
      Pour info, nous n’utilisons pas le plugin « mutualisation ».
      Dans le fichier mes_options.php, on utilise bien la variable $_SERVER[’HTTP_HOST’] pour définir l’URL du site.

    • Bonjour,
      J’ai remarqué que dans le cas d’une mutualisation (et sans le plug-in « mutualisation »), spipmu « * » test:spip ne fait que pointer (pour chaque site) vers le site racine et non sur les sites situés dans le dossier « sites ».
      Il en est de même lorsque je lance spip test ;spip depuis un dossier situé dans « sites ».

    Répondre à ce message

  • 6

    Bonjour,
    Je suis en train de tester Spip-cli en mutualisation et j’ai le soucis suivant :
    Quand je fais un spipmu « * » test:spip , j’obtiens systématiquement ceci pour tous les sites :

        <!DOCTYPE html>
        <html class='ltr fr no-js' xmlns='http://www.w3.org/1999/xhtml' lang='fr' dir='ltr'>
        <head>
        <title>Site en travaux</title>
        <meta name='viewport' content='width=device-width' />
        <link rel='stylesheet' href='prive/themes/spip/reset.css' type='text/css' />
        <link rel='stylesheet' href='prive/themes/spip/clear.css' type='text/css' />
        <link rel='stylesheet' href='prive/themes/spip/minipres.css' type='text/css' />
        </head>
        <body class='minipres'>
                <div id='minipres'>
                <h1>Site en travaux</h1>
                <div>
        Attention&#160;: un probl&#232;me technique (serveur SQL) emp&#234;che l&#8217;acc&#232;s &#224; cette partie du site. de votre compr&#233;hension.
                </div>
                </div>
        </body>
        </html>

    Quelqu’un aurait-il une idée d’où vient l’erreur ?
    Merci.

    • Je me réponds à moi-même.
      Je suis sur un Spip 3.0.24... Sur un Spip 3.2, ça fonctionne !

    • Bonjour,
      Bon, en fait, ça ne fonctionne toujours pas (sauf sur un site sans mutualisation).
      Dès que je passe sur des sites mutualisés, je retrouve le même message d’erreur... Que je lance spipmu depuis le dossier spip ou que je lance spip depuis le dossier du site, j’ai toujours ce problème.
      J’ai un des sites mutualisés qui est totalement passé sous spip 3.2.7 (mise à jour de la bdd ok !) mais toujours pas accessible par spip-cli !
      Je suis preneur de toute idée !
      Merci.

    • Alors, voici quelques commandes que j’utilise très régulièrement en mutualisation, depuis la racine du SPIP :

      spipmu "*" "cache:vider"
      spipmu "*" "plugins:maj:bdd"
      

      Noter les guillemets !

    • Bonjour,
      Quelle que soit la commande (en respectant bien la syntaxe), j’obtiens toujours le message (minipres affiché par le inc_version.php) qui considère que mon site n’est pas encore installé (site en travaux).
      Il semblerait qu’il y ait _FILE_CONNECT non défini... d’où le message...

    • Mais c’est juste spipmu qui ne fonctionne pas, ou aussi spip-cli en général (regarde les autres commandes (spip test:spip) en indiquant le HTTP_HOST ou en passant par sites/x/... ?

      Tu as quoi comme sortie avant le HTML ?
      Tu as quoi comme sortie (sans le html) si tu fais quelque chose comme (où spip est le nom de ta commande spip-cli) :

      cd sites/xxx.fr
      spip test:spip -vvv
    • Oups, je n’ai pas fait répondre... nouvelle question...

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom