lundi 4 mai 2020

Création d’un serveur DokuWiki

Attention, gros guide de barbu ! :)

Cela fait près de cinquante jours que notre pays fonctionne au ralenti au rythme de l’évolution de la pandémie de Covid-19. Notre mode de vie a été bousculé et j’avoue que d’avoir levé le pied de l’accélérateur a aussi ses bons côtés. Le confinement donne l’occasion de faire des choses sur lesquelles nous n’aurions eu ni le temps, ni l’envie, ni le besoin… Ni même l’idée de se pencher.

C’est ainsi qu’a germé dans ma tête l’idée de me faire une petite base de connaissances personnelles, à l’instar de celles que l’on peut trouver dans les entreprises. Pour cela, quoi de mieux que de concevoir un wiki ? Bien entendu, il ne s’agit pas de concurrencer Wikipedia, mais d’avoir un outil facile à gérer et des informations centralisées.

Comme souvent avec ce genre de projets, je vois ma collection de Thinkpads et je me dis « Lequel d’entre eux pourrait s’en acquitter ? ». Un – gros – petit tour de courte-paille plus tard et c’est le X61t qui est désigné volontaire. La batterie étant totalement vide depuis des années, je ne peux pas compter dessus pour m’accompagner lors de mes sorties (quelles sorties Wilou ? Nous sommes confinés !). Et  qui dit ultraportable dit consommation raisonnable et encombrement réduit. Que demander de mieux ?

C’était une machine de guerre quand elle est sortie, mais aujourd’hui, elle n’est plus vraiment suffisante pour un usage quotidien. Ou alors avec pas mal de restrictions. Mais son Core 2 Duo L7500 épaulé par 2 Go de DDR2-RAM feront très bien l’affaire pour ce nouvel outil. J’ai décidé d’y monter un disque dur de 320 Go à 7200 tours par minute sur lequel j’ai fait une installation minimale de Debian 10 « Buster ». Quand je dis minimale, cela signifie que lors de l’installation, je n’ai coché que « Utilitaires usuels du système » et « Serveur Web ». Exit les environnements de bureau et tout le reste. J’ai vérifié une fois le serveur installé combien de mémoire vive était utilisée et j’ai été agréablement surpris en voyant une occupation mémoire de 210 Mo. Il y a donc de la marge.

Une fois l’installation finie, on redémarre et on arrive forcément sur la console. Il s’agit de s’y connecter en tant qu’administrateur (« root ») puis de renseigner le mot de passe associé (on l’a défini lors de l’installation du système).

C’est maintenant que les choses sérieuses commencent. Nous allons installer Apache (le serveur HTTP), PHP (le langage de programmation) et, pour finir, Dokuwiki. Il y aura naturellement un peu de configuration, mais cela reste assez simple.

Le système est théoriquement à jour, mais il n’est jamais superflu de commencer par taper apt-get update puis ensuite apt-get upgrade.

Puis il nous faut installer Apache et pour cela nous taperons apt-get install apache2.
Pour s’assurer que l’installation s’est bien déroulée, nous pouvons faire deux choses :
  • taper systemctl status apache2. Quelques lignes s’affichent, validant le bon déroulement de l’installation. À la fin du rapport et en surbrillance s’affiche lines 1-15/15 (END). Pour reprendre la main et retourner sur l’invite de commande, il suffit de taper sur <Ctrl>+<C> ;
  • dans la barre d’adresses du navigateur d’une des machines de votre réseau, il est possible également de taper l’adresse IP du serveur puis valider pour obtenir l’affichage d’une page intitulée Apache2 Debian Default Page, avec un rassurant It works! inscrit dans un bandeau rouge du plus bel effet. Cette page est sur le serveur : /var/www/html/index.html.
Mais comment connaît-on cette fameuse adresse IP de notre serveur ? Il suffit de taper tout simplement ip a à l’invite de commandes. Cela liste les interfaces réseau de la machine. La boucle locale (lo) ne nous intéresse pas. Si l’on dispose d’une connexion en RJ-45 alors il y a une entrée « enp0s… » et si la machine est connectée en Wi-Fi alors ce sera « wls… ».

Il est bien entendu préférable de configurer une adresse IP statique car si nous sommes en DHCP ladite adresse risque de changer au gré des redémarrages. La configuration prend place dans le fichier /etc/network/interfaces. Dans un précédent billet, je décrivais la manipulation sur un système doté d’une interface graphique. En mode console, gedit n’est pas installé et il est possible d’utiliser nano ou vi à la place (ma préférence va à nano).

Apache étant installé, nous allons désormais nous pencher sur PHP. L’installation est très similaire à celle d’Apache et nous allons dans la sempiternelle console taper cette fois-ci apt-get install php. À l’heure où je rédige le billet, la version de PHP dans les dépôts de Debian est la 7.3 (à bien noter pour la suite). Des modules complémentaires peuvent être également ajoutés. C’est ainsi qu’une fois PHP installé, j’ai continué avec une nouvelle commande :

apt-get install php-cgi php-curl php-gd php-imagick php-intl php-json php-mbstring php-memcache php-xml php-zip

Nous allons maintenant nous rendre dans le dossier /var/www/html pour y créer un nouveau fichier (que nous appellerons test.php) afin d’obtenir des informations sur PHP. Pour créer ledit fichier nous allons taper touch test.php.

Puis nous allons l’éditer. Comme lorsque nous avons assigné une adresse IP statique à notre serveur, nous allons utiliser nano et nous tapons donc (nous sommes toujours dans /var/www/html) nano test.php.

Dans l’interface de l’éditeur, taper (sans espace juste après « < » ) :
< ?php
phpinfo();
?>
Pour quitter, on appuie sur <Ctrl>+<X> et pour valider les modifications, on appuie sur « o » (ou « y » si l’on dispose de la version anglaise de nano) puis sur <Entrée>.

Afin de vérifier que tout fonctionne, on retourne sur le navigateur de notre machine distance et dans sa barre d’adresse, on y inscrit « http://adresse.ip.du.serveur/test.php ». La page s’affiche, avec un bandeau violet mentionnant la version de PHP (et tout un tas d’informations dans une liste longue comme un jour sans pain, à la suite).

Revenons sur Apache, que nous allons configurer. Première chose, activons l’URL Rewriting. Pour cela rien de plus simple, tapons la commande a2enmod rewrite. Puis nous redémarrons le service avec la commande systemctl restart apache2.

Il nous faut également sécuriser le trafic et activer SSL (pour ensuite le configurer). Même principe que pour l’URL Rewriting, avec cette fois-ci les commandes a2enmod ssl et a2ensite default-ssl.conf.

Il nous faut alors éditer default-ssl.conf. Vous m’avez sûrement devancé, nous utiliserons nano et nous tapons donc nano /etc/apache2/sites-enabled/default-ssl.conf.

Il conviendra d’ajouter les lignes suivantes sous la ligne DocumentRoot /var/www/html (sans espaces après les « < ») :
 < Directory /var/www/html>
    Options +FollowSymlinks
    AllowOverride All
    Require all granted
< /Directory>
Vous trouverez également une ligne où il est noté < VirtualHost… que nous allons remplacer par (sans espace après « < ») :
< VirtualHost *:443>
Après avoir enregistré le fichier, nous allons en éditer un second (/etc/apache2/sites-enabled/000-default.conf) en ajoutant, toujours sous la ligne DocumentRoot /var/www/html (sans espaces après « < »):
< Directory /var/www/html>
    Options +FollowSymlinks
    AllowOverride All
    Require all granted
< /Directory>

Il faut maintenant redémarrer le service Apache et nous tapons une nouvelle fois systemctl restart apache2. Si l’on retourne sur le navigateur de notre machine distante pour accéder à notre page index.html (celle qui affiche It works! dans un bandeau rouge), nous aurons un avertissement en rapport avec les certificats. Ce qui est bon signe puisque cela signifie que nos réglages sont corrects. On peut bien sûr accepter de se rendre sur notre page afin de vérifier qu’It works! toujours aussi bien ! :)

Continuons avec PHP, dont nous allons activer les variables et définir le fuseau horaire pour qu’il corresponde à celui de notre installation. Lors de l’installation de PHP, j’évoquais qu’il fallait garder dans un coin de la tête la version du paquet. À l’heure où je rédige ce billet, il s’agit de la version 7.3 mais c’est un point qu’il vous faudra vérifier lorsque vous ferez vous-même votre installation.

Nous allons d’abord faire une sauvegarde de notre fichier de configuration (php.ini). Pour cela nous tapons cp /etc/php/7.3/apache2/php.ini{,.backup}.

Puis nous éditons le fichier : nano /etc/php/7.3/apache2/php.ini.

Ce qui s’ensuit est probablement l’opération la plus ennuyeuse à réaliser de tout ce guide : il va s’agir de recherche les entrées que je vais lister ci-dessous et s’assurer de leurs bons réglages (je rappelle que nous sommes sous nano et même si la recherche est efficace, elle est tout de même moins pratique en l’absence d’une souris…). Bref, voici les entrées et le réglage qu’elles doivent avoir :
file_uploads = On
default_charset = UTF-8
memory_limit = 128M
max_execution_time = 300
upload_max_filesize = 100M
short_open_tag = Off
output_buffering = Off
output_handler =
zlib.output_compression = Off
implicit_flush = Off
max_input_time = 60
max_input_vars = 10000
error_reporting = E_ALL & ~E_NOTICE
display_startup_errors = Off
log_errors = On
variables_order = “EGPCS”
register_argc_argv = Off
session.use_cookies = 1
date.timezone = Europe/Paris
Pour ce qui est de la dernière entrée, il faut naturellement l’adapter à votre système et à votre fuseau horaire. Le site de l’éditeur détaille tout cela sur une page dédiée (https://www.php.net/manual/en/timezones.php).

Une fois les modifications effectuées, on enregistre php.ini puis on redémarre Apache (systemctl restart apache2). Si tout s’est bien passé et si l’on relance sur le navigateur de notre machine distante notre fichier test.php alors nous devons voir dans la section date une entrée Default timezone bien configurée (ici Europe/Paris).

Nous allons désormais pouvoir nous atteler à l’installation et au paramétrage de DokuWiki ! Et d’ailleurs, pourquoi DokuWiki ? Eh bien il fonctionne sans base de données. Cela donne donc un outil léger et pratique en terme de sauvegarde. Et comme je ne suis pas du genre à créer des serveurs tous les jours, j’ai trouvé la facilité d'installation séduisante (oui, le guide est long comme le bras, mais il n'est pas très compliqué).

La première chose à faire est de télécharger l'outil, mais… Comment faire sans navigateur ? C’est simple. Grâce à l’utilitaire wget (apt-get install wget s’il n’est pas déjà présent sur le système).

L’adresse de l’archive à télécharger est la suivante : https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz

Il nous suffit donc juste de taper wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz.

Et puisqu’il s’agit d’une archive nous allons la décompresser et pour cela taper tar xzvf dokuwiki-stable.tgz.

Au passage, il nous faut nous débarrasser de la page d’accueil d’Apache et pour cela, nous allons devoir taper trois commandes :
  • cd /var/www/html/ ;
  • ls (afin de visualiser le contenu du dossier). Nous devons y voir index.html et test.php ;
  • rm index.html.
On peut aussi en profiter pour supprimer test.php : rm test.php.

J’avais tout à l’heure attiré l’attention sur la version de PHP et le conseil est aussi valable pour DokuWiki. En effet, le nom du répertoire change en fonction de la version. Lors de la décompression de l’archive, mes fichiers se sont écrits dans /dokuwiki-2018-04-22c. C’est donc ce répertoire que j’utilise pour les opérations qui suivent.

Les opérations vont consister à copier le contenu de l’archive décompressée dans l’arborescence du serveur web. Pour cela, deux commandes à taper :
  • cp -rf dokuwiki-2018-04-22c/* /var/www/html/ ;
  • cp dokuwiki-2018-04-22c/.htaccess.dist /var/www/html/.
La seconde commande permet de copier .htaccess.dist qui est un fichier caché (d’où le nom commençant par un point) et qui n’est pas pris en compte lors de la saisie de la première commande.

Il nous faut maintenant modifier les permissions afin de permettre à Apache d’écrire si nécessaire dans les nouveaux répertoires. Pour cela, deux nouvelles commandes à exécuter :
  • chown -R www-data:www-data /var/www/html/ ;
  • ls –al /var/www/html/ (à des fins de vérification).

Nous approchons du but car nous allons pouvoir nous connecter à DokuWiki ! Pour cela nous nous rendons dans le navigateur de notre machine distante et nous tapons « https://adresse.ip.du.serveur/install.php ». L’interface d’installation du wiki apparaît et nous pouvons y renseigner son nom, cocher (c’est normalement déjà le cas) Enable ACL et remplir les zones présentes dessous.

Tout est décrit sur le site de l’éditeur : https://www.dokuwiki.org/fr:installer. Une fois les informations renseignées, il ne reste plus qu’à cliquer sur le bouton <Save>.

Nous devons également sécuriser l’installation côté serveur et pour cela nous allons supprimer install.php que nous venons d’utiliser puis modifier les permissions des fichiers de configuration de DokuWiki. Pour cela, il faut taper les commandes suivantes :
  • rm -rf /var/www/html/install.php ;
  • chown -R root:root /var/www/html/ ;
  • chown -R www-data:root /var/www/html/data/ ;
  • chown -R www-data:root /var/www/html/lib/plugins/ ;
  • chown -R www-data:root /var/www/html/lib/tpl/ ;
  • chown -R www-data:root /var/www/html/conf/local.php* ;
  • chown -R www-data:root /var/www/html/conf/users.auth.php ;
  • chown -R www-data:root /var/www/html/conf/acl.auth.php ;
  • chown -R www-data:root /var/www/html/conf/plugins.local.php*.

Encore quelques dernières petites modifications et cette fois-ci, nous allons devoir éditer .htaccess :
  • cp /var/www/html/.htaccess.dist /var/www/html/.htaccess (on réalise une copie de sauvegarde) ;
  • nano /var/www/html/.htaccess (on édite le fichier avec nano).

Une fois dans .htaccess, on ajoute :
#Modify PHP settings
php_value session.use_trans_sid 0
php_value register_globals 1
php_value upload_max_filesize 100M
php_value post_max_size 100M


L’installation est désormais terminée ! Il ne reste plus qu'à se déconnecter du compte administrateur dans lequel nous étions depuis le début de ce guide pour se reconnecter ensuite en tant que simple utilisateur. :)


Sources : Youtube, Howtoforge.

Aucun commentaire:

Enregistrer un commentaire