====== Dokuwiki, ferme de wiki ======
Nous avons installé [[doku>|Dokuwiki]] comme wiki, un CMS pratique, simple à maintenir et riche en possibilités quand on a envie de bidouiller, bref de quoi faire plaisir à tout le monde.
Nos wikis sont organisées en //ferme// : un wiki principal qui sert à l'installation des divers plugins, thèmes ; des wikis animaux qui n'ont que les articles et font appel au wiki maitre pour leurs fonctionnalités. Cela permet de différencier les espaces : on peut mettre des administrateurs différents suivant les wikis, des thèmes, désactiver ou activer certains plugins, gérer les arborescences de façons différentes...
Cela permet de mettre à jour l'ensemble des wikis via la seule mise à jour du wiki maitre. Les plugins sont les mêmes pour chaque wiki.
La procédure simplifiée pour installer un nouvel "animal" est [[fr:dokuwiki_farm#resume|indiquée plus bas]].
L'architecture de la ferme :
* wiki-maître physiquement situé à ~/www/dokuwiki ;
* wiki-animaux physiquement situés dans ~/www/farm :
* ./_animal : répertoire à copier pour créer un nouvel animal. Ne pas effacer !
* ./wikhan : un des wikis (par exemple) ; on peut en créer autant qu'on veut.
===== Installation du wiki-Maitre =====
Le wiki-maître se trouve à l'adresse ''/var/www/dokuwiki''. C'est une [[doku>start?id=fr:install|installation standard de Dokuwiki]], avec quelques modifications ensuite pour le mettre apte à gérer la ferme.
Il existe un plugin pour faciliter la mise à niveau : [[doku>plugin:upgrade]] ; même si ça permet d'assister la mise à jour, il faut bien faire le backup et les tests avant ! Et vérifier que cela ne perturbe pas la ferme.
==== Installation de base ====
Téléchargez la dernière version sur [[http://download.dokuwiki.org/]]. Désactivez le support des diverses langues en dehors de l'anglais et du français sauf si vous comptez les utiliser (sinon ça prend quand même de la place) ; choisissez la version stable ; cochez les divers plugins de base qui vont vous servir (sinon, on peut les ajouter par la suite).
Mettez ce dossier décompressé dans ''/var/www''. Changez les permissions :
chmod -R g+rw /var/www/dokuwiki
Allez à l'adresse web http://monsite.com/dokuwiki/install.php et procédez à l'installation.
Pour plus de sécurité, installez le dokuwiki-maître à une autre adresse. Cependant, il faut adapter le reste du tutoriel. J'ai souvent eu des soucis en tentant de le mettre ailleurs.
--- //[[user:zatalyz| zatalyz]] 2016/01/31 21:03//
=== Réécriture des URL ===
Les wikis de Khaganat sont configurés pour faire des jolies adresses lisibles, mais cela demande un peu de bidouille en plus. Si cette doc ne suffit pas, voir, entre autre, [[doku>fr:rewrite| Dokuwiki : Réécriture d'URL]].
Allez dans le panneau d'administration. Dans "Paramètres avancés", ''Utiliser des URL esthétiques'', sélectionnez ''Fichier .htaccess'', enregistrez, pleurez parce que le wiki n'est plus accessible.
Puis rendez-vous dans le dossier ''/var/www/dokuwiki'', copiez ''.htaccess.dist'' (fichier caché) en ''.htaccess'', et modifiez ce dernier de cette façon :
## Enable this to restrict editing to logged in users only
## You should disable Indexes and MultiViews either here or in the
## global config. Symlinks maybe needed for URL rewriting.
#Options -Indexes -MultiViews +FollowSymLinks
## make sure nobody gets the htaccess, README, COPYING or VERSION files
Order allow,deny
Deny from all
Satisfy All
## Uncomment these rules if you want to have nice URLs using
## $conf['userewrite'] = 1 - not needed for rewrite mode 2
RewriteEngine on
#
RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L]
RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1 [QSA,L]
RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_$1&id=$2 [QSA,L]
RewriteRule ^$ doku.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku.php?id=$1 [QSA,L]
RewriteRule ^index.php$ doku.php
#
## Not all installations will require the following line. If you do,
## change "/dokuwiki" to the path to your dokuwiki directory relative
## to your document root.
RewriteBase /dokuwiki
#
## If you enable DokuWikis XML-RPC interface, you should consider to
## restrict access to it over HTTPS only! Uncomment the following two
## rules if your server setup allows HTTPS.
RewriteCond %{HTTPS} !=on
RewriteRule ^lib/exe/xmlrpc.php$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
Bien lire ce fichier et adapter aux cas particuliers ! Ainsi les deux dernières options concernent un site avec certificat ssl (https) ; décommentez-les sinon.
RewriteBase est à adapter au chemin vers votre wiki-maitre : ici, cela correspond au dossier se situant précisément à ''/var/www/dokuwiki''
S'il y a Apache2 sur le serveur (et en principe c'est le cas), alors on a une belle "erreur 500" quand on essaie d'aller sur le wiki, si la réécriture des URLs n'a pas été activée. C'est normal : apache2 est un peu plus contraignant que son prédécesseur pour réécrire les urls (déjà que c'était pas un cadeau...). Faire la manipulation décrite [[fr:lamp#activer_la_reecriture_des_urls|ici]].
=== Fignoler ===
En principe, à partir de là, le wiki-maître est opérationnel. On peut copier d'une sauvegarde précédente les fichiers suivants :
* tout le dossier data
* /conf/local.php
* /conf/acl.auth.php
* /conf/user.auth.php
* /conf/interwiki.conf
Et remettre les plugins, thèmes, etc.
==== Plugins installés ====
Nous avons installé les plugins suivants sur Khaganat : [[fr:wikitools:fonctionnalite]].
La liste des plugins pour Dokuwiki [[doku>plugins|est disponible ici.]]
Et sinon en une seule liste :
* Av Task Box
* Captcha
* Catlist
* Cloud
* Color
* Comment Plugin
* Custombuttons
* dir
* fontsize2
* Gallery
* Hidden
* Include
* InlineToc
* issuetracker
* Move
* Orphanswanted
* Pagelist
* pagequery
* searchindex
* Source
* Tag
* tagfilter
* Translation Plugin
* Translationbuddy
* user history manager
* Video Share Plugin
* Wrap
===== Installer les animaux de la ferme de wiki =====
==== Résumé ====
* Dans le wiki-maître, modifiez ''/inc/preload.php'' (voir les détails plus bas).
* Se mettre dans ''/var/www/farm''
* Copier ''_animal'' en ''nomduwiki''
* Donner le dossier à //www-data//
sudo chown -R www-data: **nom de l'animal**/
sudo chmod -R g+w /var/www/farm/**nom de l'animal**
* Configurer/copier le fichier local.php (ou via l'admin) pour les thèmes, langues, etc. mais surtout pour que le wiki soit accessible.
* Activer/désactiver plugins au besoin
* Copier ou créer les datas
* Ajouter un [[fr:lamp#modifier_les_urls_pour_aller_aux_dossiers_alias|alias à apache]] pour accéder au wiki-animal
* Vérifier les droits d'accès en écriture au wiki ! Pour ne pas laisser les robots spammer.
==== Détail ====
=== Paramétrage de base de preload.php ===
Dans le dokuwiki-maître, copiez ''./inc/preload.php.dist'' en ''./inc/preload.php''. Ce fichier ''./inc/preload.php'' va surcharger certains paramètres par défaut pour permettre à la ferme de fonctionner.
Avant tout, les aspects concernant la ferme elle-même :
// set this to share some config : DOKU_CONF_SHARED = path to farmer conf = /var/www/dokuwiki/conf/
if(!defined('DOKU_CONF_SHARED')) define('DOKU_CONF_SHARED', '/var/www/dokuwiki/conf/');
// set this to your farm directory
if(!defined('DOKU_FARMDIR')) define('DOKU_FARMDIR', '/var/www/farm/');
// include this after DOKU_FARMDIR if you want to use farms
include(fullpath(dirname(__FILE__)).'/farm.php');
Adaptez les chemins à votre installation.
=== Permettre de surcharger les traductions ===
On peut créer des chaînes de traduction personnalisés dans Dokuwiki (voir [[dokuwiki>start?id=localization&go=%E2%86%92#changing_some_localized_texts_and_strings_in_your_installation|la doc officielle]]) mais cela ne marche dans une ferme qu'à condition d'ajouter le chemin absolu suivant vers les fichiers de langue dans ''./inc/preload.php'' :
$config_cascade['lang'] = array(
'core' => array(DOKU_CONF_SHARED . 'lang/'),
'plugin' => array(DOKU_CONF_SHARED . 'plugin_lang/'),
'template' => array(DOKU_CONF_SHARED . 'template_lang/')
);
=== Une seule authentification ===
L'option suivante permet de partager le même fichier d'utilisateurs sur les animaux. Chaque animal peut avoir sa propre base d'utilisateurs (le fichier ''farm/animal/conf/users.auth.php'') mais, si les divers wikis sont utilisés par les mêmes personnes, on peut utiliser un seul fichier, ce qui simplifie en cas de changement de mot de passe.
Toujours dans ''./inc/preload.php'', ajoutez :
$config_cascade['plainauth.users'] = array(
'default' => DOKU_CONF_SHARED . 'users.auth.php',
);
Dans ce cas, mieux vaut aussi s'identifier une seule fois pour toute la ferme. Il faut donc paramétrer le cookie différemment((Merci à IsilinBN pour l'astuce ; la [[https://simnomceu.tuxfamily.org/welcome/start?id=fr:authentication|source est ici]])).
Modifiez ''dokuwiki/inc/init.php'' et cherchez la ligne
define('DOKU_COOKIE', 'DW' . md5(DOKU_REL . (($conf['securecookie']) ? $serverPort : '')));
Remplacez-la par
define('DOKU_COOKIE', 'DW' . md5(commoncookie));
Pour plus de contexte : le bout de code complet une fois modifié est
// define cookie and session id, append server port when securecookie is configured FS#1664
if (!defined('DOKU_COOKIE')) {
$serverPort = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : '';
// define('DOKU_COOKIE', 'DW' . md5(DOKU_REL . (($conf['securecookie']) ? $serverPort : '')));
define('DOKU_COOKIE', 'DW' . md5(commoncookie));
unset($serverPort);
}
''DOKU_REL'' est une variable relative concernant le dossier du wiki et des animaux. On va simplement mettre à la place un chemin absolu. On supprime des bouts qui ne semblent servir à rien et nous foutent le bordel ; éviter ça si vous permettez la connexion en http (sans forcer en https). Mais pour quelle raison feriez-vous ça ?
Je laisse ce message ici, si vous avez des soucis ; cependant dans Igor, laisser DOKU_REL à cet endroit ne semble pas poser de souci au cookie, donc vous pouvez ne pas changer ce morceau.
Il faut aussi modifier cette valeur dans ''dokuwiki/inc/auth.php''. Il faut modifier deux fois la valeur dans ce fichier, à chaque fois avec la même ligne :
// $cookieDir = empty($conf['cookiedir']) ? DOKU_REL : $conf['cookiedir'];
$cookieDir = empty($conf['cookiedir']) ? '/' : $conf['cookiedir'];
Ajoutez ou modifiez la valeur ''$conf['cookiedir']'' dans ''dokuwiki/conf/local.php'' :
$conf['cookiedir'] = '/';
Il faudra aussi modifier le fichier ''local.php'' des animaux mais on voit ça après.
=== Dossier des animaux ===
Créer le dossier ''/var/www/farm/'', se mettre dedans, y télécharger [[https://www.dokuwiki.org/_media/dokuwiki_farm_animal.zip|l'animal de base]]. Dézipper ce dossier, ''_animal'', puis le copier en ''nomduwiki''.
Ajouter dans le dossier ''farm'' un .htaccess contenant ceci :
RewriteEngine On
RewriteRule ^/?([^/]+)/(.*) /dokuwiki/$2?animal=$1 [QSA]
RewriteRule ^/?([^/]+)$ /dokuwiki/?animal=$1 [QSA]
Options +FollowSymLinks
=== Vérification des droits ===
Il faut vérifier les droits sur ce dossier. Apache ne tourne pas en tant qu'utilisateur "lambda", mais en tant qu'utilisateur "www-data". Donc, quand tous les fichiers n'appartiennent qu'à "lambda", Apache n'a pas le droit d'y écrire.
Il faut placer les fichiers dans le groupe "www-data", et donner les droits d'écriture au groupe :
sudo chown -R www-data: /var/www/farm/**nom de l'animal**
sudo chmod -R g+w /var/www/farm/**nom de l'animal**
La première commande change le propriétaire et le groupe pour www-data : le double-point après le nom du propriétaire indique à chown qu'il faut aussi changer le groupe. L'option "-R" (c'est l'option courte de "--recursive") indique qu'on ne veut pas changer le propriétaire/groupe uniquement pour le dossier, mais aussi pour tout son contenu. "www-data" est le groupe d'Apache, et il faut remplacer "/var/www/farm/dog/data" par le dossier que tu veux rendre accessible à Apache.
La deuxième commande indique au système que c'est OK pour quelqu'un qui appartient au groupe ("g") d'écrire ("+w") dans les fichiers.
=== Paramétrer un animal ===
Modifier ''/var/www/farm/nomduwiki/conf/local.php'' et paramétrer ces informations :
#Mettre le nom de son wiki, c'est plus joli
$conf['title'] = 'Titre du wiki';
#Indiquer le chemin depuis /var/www pour arriver à l'animal
$conf['basedir'] = '/farm/nomduwiki/';
#Vu qu'on a activé la réécriture des URLs, on doit le faire partout, sinon ça fait des sales bugs.
$conf['userewrite'] = '1';
# Pour utiliser le même cookie sur toute la ferme
$conf['cookiedir'] = '/';
La variable ['basedir'] se base sur ce qui est configuré dans Apache. Donc, s'il y a un alias du genre
/animal /var/www/farm/animal
Il faut indiquer l'alias
$conf['basedir'] = '/animal/';
Prendre aussi le temps de vérifier les options (et entre autre qui peut poster !) dans l'administration.
=== Alias ===
[[fr:lamp#modifier_les_urls_pour_aller_aux_dossiers_alias|Créez des alias pour accéder aux animaux]], c'est plus élégant. Par exemple, dans ''/etc/apache2/sites-available/000-default.conf'', ajoutez ceci :
Alias /wikhan /var/www/farm/wikhan
Alias /mediateki /var/www/farm/mediateki
Options FollowSymLinks
AllowOverride All
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
===== Bug sur les flux des derniers changements =====
Pour une raison que je ne comprends pas, parfois le fichier des derniers changements est corrompu. Trop de changements mineurs, entre autre.
Dans ce cas, il faut se mettre dans le dossier du wiki incriminé (par exemple ''www/farm/wikhan'') et lancer la commande suivante :
find data/meta -name '*.changes' ! -name '_media.changes' -exec cat '{}' \; | sort -u > data/meta/_dokuwiki.changes
Pour modifier le nombre de derniers changements affichés, c'est dans l'administration, Gestionnaire de configuration, Paramètres d'affichage, les options "recent" et "recent_days"
==== Cas des VM ====
Dans certains cas, et typiquement dans les VM sur Xen, si on essaie de récupérer un flux rss situé sur la même VM, ça bloque.
Dans ce cas, il faut modifier ''/etc/hosts'' afin d'ajouter l'ip interne associée au nom de domaine((Ici, en exemple, la VM a l'ip 192.168.20.39 sur le réseau interne, et on ajoute aussi une autre VM présente sur le réseau interne.)) :
127.0.0.1 localhost
192.168.20.39 jukni3 jukni3
192.168.20.39 khaganat.net
192.168.20.43 git.khaganat.net
Note : à ce stade, on ne récupère que les flux en http, pas en https. Activer un certificat autosigné et le ssl sur la VM ne suffit pas.
Pour les flux sur le reste du web, tout va bien.
===== Mise à jour =====
Il suffit de mettre à jour le wiki principal. Attention, certaines choses peuvent casser, il convient de sauver le dossier avant la mise jour !
Sur Khaganat, les fichiers suivants ont été modifiés et sont écrasés par la mise à jour.
* ''dokuwiki/inc''
* auth.php
* init.php
* ''dokuwiki/inc/lang/fr''
* denied.txt
* edit.txt
* lang.txt
Les fichiers modifiés dans le dossier ''conf'' sont de la forme "*.local.php" : cela les préserve lors des mises à jour.
==== Mise à jour de Hogfather vers Igor ====
Dokuwki ajoute le dossier ''data/log/'', nécessaire pour fonctionner. Pour l'ajouter dans tous les animaux du wiki, un script pour récupérer les commandes et automatiser la tâche :
cd farm/
cp -r ../dokuwiki/data/log _animal/data/log
for farm in * ; do echo "sudo cp -r _animal/data/log $farm/data/log" ; echo "sudo chown -R www-data: $farm/data/log" ; done
On nettoie, dans ce qu'on récupère, ce qui n'est pas une ferme qu'on veut mettre à jour (genre, si on a mis un index.php dans le coin), on vérifie que tout va bien puis on lance le lot de commande.
Le processus d'authentification a changé aussi, mais la page ici est mise à jour. Il suffit de modifier ''dokuwiki/inc/init.php'' et tout ira bien.
Il faut aussi modifier le .htaccess et indiquer le passage suivant :
Require all denied
Order allow,deny
Deny from all
===== Nginx =====
EN COURS DE TEST
server{
listen 80;
listen [::]:80;
server_name khaganat.net;
access_log /var/log/nginx/dokuwki_access_log;
error_log /var/log/nginx/dokuwiki_error_log;
root /var/www;
index doku.php index.php index.html;
client_max_body_size 4M;
client_body_buffer_size 128k;
location / {
try_files $uri $uri/ @dokuwiki;
}
location /bienvenue {
return 301 http://$host/farm/bienvenue/doku.php;
}
location /wikhan {
return 301 http://$host/farm/wikhan/doku.php;
}
location /rc {
#return 301 http://$host/rc;
alias /var/www/rc2/dev.ryzom.com/projects/ryzom/wiki;
}
location ~ /farm {
index index.php;
autoindex on;
rewrite ^/farm/?([^/]+)/(.*) /dokuwiki/$2?animal=$1;
rewrite ^/farm/?([^/]+)$ /dokuwiki/?animal=$1;
}
location @dokuwiki {
rewrite ^/dokuwiki/_media/(.*) /lib/exe/fetch.php?media=$1 last;
rewrite ^/dokuwiki/_detail/(.*) /lib/exe/detail.php?media=$1 last;
rewrite ^/dokuwiki/_export/([^/]+)/(.*) /index.php?do=export_$1&id=$2 last;
rewrite ^/dokuwiki/(?!lib/)(.*) /index.php?id=$1&$args last;
}
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
include snippets/fastcgi-php.conf;
}
location ~ /(data|conf|bin|inc)/ {
deny all;
}
location ~* \.(png|ico)$ {
expires 90d;
}
}
===== Annexes =====
==== preload.php dans nos installations ====
Voici le contenu complet de ''inc/preload.php'', modifié pour correspondre à nos usages (partage de la plupart de la config) :
DOKU_CONF_SHARED . 'users.auth.php',
);
$config_cascade['lang'] = array(
'core' => array(DOKU_CONF_SHARED . 'lang/'),
'plugin' => array(DOKU_CONF_SHARED . 'plugin_lang/'),
'template' => array(DOKU_CONF_SHARED . 'template_lang/')
);
{{tag>Tutoriel web}}