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
 ---- ----------- ----------------------------------

updated on 4 December 2018

Discussion

2 discussions

  • 3

    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 ?

    Reply to this 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...

    Reply to this message

Ajouter un commentaire

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom