Pour créer un nouveau wiki géré par Ikiwiki, voici la marche à suivre :
- Créer un nouveau dépôt Git.
- Mettre un premier fichier (
index.mdwn
) dans le dépôt. - Créer un nouvel user système et les répertoires pour le wiki.
- Configurer Ikiwiki.
- Mettre en place le nettoyage du dépot utilisé par Ikiwiki.
- Configurer Nginx.
- Configurer le dépôt Git.
Dans ce qui suit, $WIKI
est à remplacer par le nom du wiki.
Les opérations se passent sur bulbe.nos-oignons.net.
Utilisateur système
On crée un nouvel user système :
adduser --system --home /srv/ikiwiki/wiki-$WIKI \
--group \
--disabled-login --disabled-password \
wiki-$WIKI
Afin que ce compte puisse accéder au dépôt Git, on va générer une nouvelle paire de clés SSH :
sudo -H -u wiki-$WIKI ssh-keygen -t rsa -b 4096 -N ''
Il faut ensuite donner accès au dépôt créé précédemment à ce nouveau compte.
Source et destination
On va ensuite préparer l'espace pour les données d'Ikiwiki.
On commence par faire un clone du dépôt qui est utilisé comme source par Ikiwiki :
sudo -H -u wiki-$WIKI \
git clone ssh://git@bulbe.nos-oignons.net/wiki-$WIKI.git \
/srv/ikiwiki/wiki-$WIKI/src
On crée le répertoire de destination qui sera servi par Nginx :
mkdir /srv/ikiwiki/wiki-$WIKI/dest
chown wiki-$WIKI:www-data /srv/ikiwiki/wiki-$WIKI/dest
chmod 750 /srv/ikiwiki/wiki-$WIKI/dest
Configuration d'Ikiwiki
On va générer un nouveau fichier de configuration avec les réglages par défaut :
ikiwiki --dumpsetup /etc/ikiwiki/wiki-$WIKI.setup
ln -s /etc/ikiwiki/wiki-$WIKI.setup /srv/ikiwiki/wiki-$WIKI/ikiwiki.setup
C'est le moment de faire etckeeper commit
, car on pourra ensuite mieux voir
les différences par rapport à la configuration de base.
Pour faire apparaître la configuration relative à Git, faites :
ikiwiki --changesetup /etc/ikiwiki/wiki-$WIKI.setup \
--rcs git
Pour exemple, voici les changements qui ont été faits dans la configuration du
wiki-admin
:
wikiname: Admin. sys. Nos oignons
adminemail: machines@nos-oignons.net
srcdir: /srv/ikiwiki/wiki-admin/src
destdir: /srv/ikiwiki/wiki-admin/dest
url: https://nos-oignons.net/wiki-admin/
cgiurl: https://nos-oignons.net/wiki-admin/ikiwiki.cgi
cgi_wrapper: /srv/ikiwiki/wiki-admin/dest/ikiwiki.cgi
rcs: git
add_plugins:
- 404
- favicon
- goodstuff
- httpauth
- pingee
- sidebar
- po
disable_plugins:
- passwordauth
discussion: 0
html5: 1
sslcookie: 1
locale: fr_FR.UTF-8
hardlink: 1
umask: public
timezone: Europe/Paris
gitorigin_branch: origin
gitmaster_branch: master
rss: 1
atom: 1
allowrss: 1
allowatom: 1
po_master_language: fr|French
po_translatable_pages: ''
po_link_to: default
tagbase: tags
tag_autocreate: 0
tag_autocreate_commit: 0
Il faut ensuite ajouter aussi le wiki dans la liste qui se trouve dans
/etc/ikiwiki/wikilist
:
wiki-$WIKI /etc/ikiwiki/wiki-$WIKI.setup
On peut enfin construire le wiki en faisant :
ikiwiki-mass-rebuild
Nettoyage du dépot
Ikiwiki maintient un clone du dépot Git contenant le wiki.
Pour des raisons d'efficacité et d'espace, ce dernier doit être nettoyé
mensuellement, à l'aide du script git-gc
.
Ceci est automatisé avec une entrée dans /etc/cron.d/git-gc
:
#m h dom mon dow user command
57 6 22 * * wiki-$WIKI git-gc /srv/ikiwiki/wiki-$WIKI/src
On veillera à ne pas déclancher toutes les tâches de ce genre simultanément.
Configuration de Nginx
C'est Nginx qui s'occupe de rendre le site disponible à travers un navigateur.
Pages web
On va ajouter dans la configuration du serveur une section location
et une
dircetive alias
pour rendre le wiki accessible. Par exemple :
server {
[...]
location /wiki-$WIKI {
alias /srv/ikiwiki/wiki-$WIKI/dest;
}
[...]
}
Exécution du CGI
Pour que les interactions web d'Ikiwiki fonctionnent correctement, il faut indiquer à Nginx d'exécuter le CGI :
server {
[...]
location /wiki-$WIKI {
alias /srv/ikiwiki/wiki-$WIKI/dest;
[...]
location = /wiki-$WIKI/ikiwiki.cgi {
fastcgi_param SCRIPT_FILENAME /srv/ikiwiki/wiki-$WIKI/dest/ikiwiki.cgi;
include snippets/fastcgi.conf;
}
}
[...]
}
Authentification HTTPS
Pour limiter l'accès au wiki en utilisant une authentification HTTP, il faut
créer une nouvelle base avec htpasswd
:
htpasswd -c /etc/nginx/passwd/wiki-$WIKI $USER
Et pour le deuxième, on enlève -c
:
htpasswd /etc/nginx/passwd/wiki-$WIKI $ANOTHER_USER
Pour le confort, on ajoute un lien symbolique :
ln -s /etc/nginx/passwd/wiki-$WIKI /srv/ikiwiki/wiki-$WIKI/passwd
On configure ensuite l'authentification :
server {
[...]
location /wiki-$WIKI {
alias /srv/ikiwiki/wiki-$WIKI/dest;
auth_basic "Description du wiki";
auth_basic_user_file /etc/nginx/passwd/wiki-$WIKI;
[...]
}
}
[...]
}
Avec cette configuration, on active en général le plugin httpauth et on désactive par contre la base d'authentification interne d'Ikiwiki en désactivant le plugin passwordauth.
On peut à ce moment-là tester si le CGI et l'écriture vers le dépôt Git central fonctionnent correctement. Par exemple en allant modifier le bac à sable :
https://nos-oignons.net/wiki-$WIKI/sandbox/
Configuration du dépôt Git
Si l'accès à ikiwiki.cgi
est protégé par une authentification HTTP, il faut
y ajouter un compte pour pouvoir réaliser les pings. On prendra un mot de
passe aléatoire, long et compliqué :
htpasswd /etc/nginx/passwd/wiki-$WIKI pinger
On configure le hook du dépôt Git pour réaliser le ping en prenant en
compte les spécificités de Gitolite. La suite doit donc être
exécutée en tant qu'user git
:
sudo -u git -s -H
On va créer un nouveau répertoire pour nos hooks :
mkdir ~/.gitolite/hooks/wiki-$WIKI
On crée alors un nouveau script ~git/.gitolite/hooks/wiki-$WIKI/post-update
,
en mettant le mot de passe généré précédemment :
#!/bin/sh
at now <<EOF
curl --silent --show-error \
--basic --user 'pinger:$PINGER_PASSWD' \
'https://nos-oignons.net/wiki-$WIKI/ikiwiki.cgi?do=ping' >/dev/null
EOF
L'utilisation de at now
est nécessaire pour éviter un deadlock.
Les explications détaillées se trouvent dans la
procédure d'installation.
On va rendre ce script exécutable, et demander à Gitolite de faire le lien symbolique au bon endroit :
chmod +x ~/.gitolite/hooks/wiki-$WIKI/post-update
cd ~/repositories/wiki-$WIKI.git/hooks
ln -s ../../../.gitolite/hooks/wiki-$WIKI/post-update .
gl-setup
Si tout va bien, le prochain push
vers le dépôt déclenchera la mise à jour du
wiki.