technique:gravmultisite

Blog en mode multi-sites

FIXME Documentation en cours de rédaction, en cours de tests

L'intérêt d'utiliser le mode multi-sites est qu'il permet de proposer à plusieurs webmasters différents, des sites qui reposent sur la même base, sans avoir à maintenir plusieurs fois le même code. Le moteur du site est commun, seules les données et la personnalisation du site change.

Test avec le CMS Grav : https://getgrav.org/

Installation d'un serveur web sur Ubuntu 16.04 avec les modules requis :

apt install nginx php-fpm php-mbstring php-cli php-opcache php-xml php-zip php-gd php-curl php-apcu php-yaml

Récupération de l'archive de Grav depuis le site, soit en mode brut avec 2 possibilités : Grav (un seul site statique modifiable à la main) ou Grav-admin (avec plugin de gestion de contenu), soit avec un squelette intégré avec le code de grav dedans.
On récupére ce qu'on veut sur le serveur et on l'extrait dans le dossier /var/www/html/grav par exemple.

wget https://getgrav.org/download/core/grav-admin/latest
mv latest grav admin-v1.2.3.zip
unzip grav-admin-v1.3.8.zip
mv grav-admin grav

Il faut s'assurer que les droits sur le dossier grav et ses fichiers sont corrects (644 pour les fichiers, 775 pour les dossiers avec le groupe www-data). Ici avec nginx :

cd /var/www/html/grav
chgrp -R www-data .
find . -type f | xargs chmod 664
find ./bin -type f | xargs chmod 775
find . -type d | xargs chmod 775
find . -type d | xargs chmod +s
umask 0002

Grav est sympa et nous propose des config pour les serveurs web qui nous intéressent.

J'ai prix celui-ci pour nginx et renomme en “grav”.

Ici, j'ai copié/collé le fichier dans /etc/nginx/sites-available/grav avec le lien qui va bien depuis /etc/nginx/sites-enable.

ln -s /etc/nginx/sites-available/grav /etc/nginx/sites-enable/

J'ai modifié les valeurs suivantes du fichier de config grav :

root /var/www/html/grav;
server_name grav;

Et relancé la config de nginx

nginx -s reload

On choisit un port utilisé (ex : 7000) pour le site et on l'ouvre avec son pare-feu :

ufw allow 7000

Pour finir, pour tester, on lance sur le serveur, la commande de lancement de grav :

php -S radios.cemea.org:7000 system/router.php

Et on se loggue sur l'adresse du serveur : http://radios.cemea.org:7000

Et ça marche ! On a là un beau site statique qu'on peut modifier à la main depuis le serveur.

Pour rendre l'installation fonctionnelle défintivement, on tue le processus précédent avec Ctrl C et on lance le php officiellement :

/etc/init.d/php7.0-fpm start

on vérifie la version utilisée, on met à jour et on installe le plugin et on accepte les dépendances (y) :

bin/gpm version -f
bin/gpm selfupgrade
bin/gpm install admin

On réactualise la page du site http://radio.cemea.org:7000 et on tombe sur une page de création de compte admin.

On crée le compte admin et hop, on se retrouve sur l'interface d'admin où on peut faire joujou avec le contenu du site.

Par contre, il faut maintenant s'attaquer à …

La doc détaillée multisites est ici.

Deux options possibles : soit on décide d'accéder aux sites en sous-domaines (lolo.webradios.cemea.org) ou en sous-dossiers (webradio.cemea.org/lolo). Ici c'est la seconde option qui est choisie.

Dans le dossier grav/user, on crée un dossier sites.

mkdir /var/www/html/grav/user/sites

Pour chaque site, il faudra créer un dossier dans sites (ex: test), qui contiendra 4 dossiers vides : config pages plugins themes

cd /var/www/html/grav/user/sites
mkdir test && cd test
mkdir config pages plugins themes

Il suffira de dupliquer ce site pour chaque nouveau compte.

Il est nécessaire de créer un fichier setup.php qui se trouvera dans le dossier grav et qui sera appelé pour chaque site. Il dépend de la configuration du multi-sites (sous-domaines ou sous-dossiers).

Pour les sous-dossiers, il contient ce code-là :

<?php
/**
* Multisite setup for sub-directories or path based
* URLs for subsites.
*
* DO NOT EDIT UNLESS YOU KNOW WHAT YOU ARE DOING!
*/

/**
Code corrigé par Romain :
Au lieu de :
use GravCommonFilesystemFolder;
// Get relative path from Grav root.
$path = isset($_SERVER['PATH_INFO'])
   ? $_SERVER['PATH_INFO']
   : Folder::getRelativePath($_SERVER['REQUEST_URI'], ROOT_DIR);
*/
/** Remplacer par */
use Grav\Common\Filesystem\Folder;

// Get relative path from Grav root.
// $path = isset($_SERVER['PATH_INFO'])
//    ? $_SERVER['PATH_INFO']
//    : Folder::getRelativePath($_SERVER['REQUEST_URI'], dirname($_SERVER['SCRIPT_NAME']));

// FIX: nginx bug Romain ?
$path = $_SERVER['REQUEST_URI'];

// Extract name of subsite from path
$name = Folder::shift($path);
$folder = "sites/{$name}";
$prefix = "/{$name}";

if (!$name || !is_dir(ROOT_DIR . "user/{$folder}")) {
    return [];
}

//Extract name of subsite from path\ $name = Folder::shift($path); $folder = "sites/{$name}"; $prefix = "/{$name}"; if (!$name || !is_dir(ROOT_DIR . "user/{$folder}")) {
return [];
} //  Prefix all pages with the name of the subsite
$container['pages']→base($prefix);

return [
'environment' ⇒ $name,
'streams' ⇒ [
'schemes' ⇒ [
'user' ⇒ [
'type' ⇒ 'ReadOnlyStream',
'prefixes' ⇒ [
'' ⇒ ["user/{$folder}"],
]
]
]
]
];

Commandes utiles dans grav/

bin/gpm list # liste les commandes
bin/gpm update # met à jour le site
bin/gpm selfupgrade -f #m<font inherit/inherit;;inherit;;inherit></font>ise à jour auto
bin/gpm install nomduplugin # instalaltion d'un plugin
bin/gpm install admin #installation du plugin admin
bin/grav list #list les commandes
bin/grav new-project dossier/nomprojet
bin/grav backup #a faire dans un projet
bin/grav clear-cache #vide le cache
bin/grav install # met à jour les dépendances
bin/plugin admin help #aide sur un plugin
bin/plugin login newuser -u joeuser -e joeuser@grav.org -P b -N "Joe User" -t "Site Administrator" -p PASSWORD

Mise à jour sur serveur de Prod

cd /var/www/radios/ && sudo -u radios bin/grav backup
sudo -u radios /var/www/radios/bin/gpm selfupgrade # pour MAJ Grav
sudo -u radios /var/www/radios/bin/gpm update # pour MAJ Plugins Grav

Sur l'interface d'admin…

A suivre…

  • technique/gravmultisite.txt
  • Dernière modification: 2020/05/28 19:07
  • de francoisa