Exemples de services WEB

Cette section propose des exemples de services que vous pouvez auto-héberger.

⚠ Puisque les applications sont régulièrement mises à jour, il conviendra de ne pas reproduire tête baissée les procédures indiquées, et de vérifier que la démarche correspond à la version du service que vous souhaitez installer.

Après l'installation, il est vivement conseillé de suivre les publications et nouveautés concernant ces applications pour mettre à jour vers les versions plus récentes disponibles.

Comme vous le constaterez, la méthode d'installation est sensiblement toujours la même:

⚠ On suppose ici que vous avez déjà procédé à l'installation de httpd et de PHP.

Un cloud avec NextCloud

NextCloud est un service qui vous permet de synchroniser vos documents, contacts, rendez-vous sur n'importe quelle machine grâce à ses multiples clients. Vous pouvez bien entendu installer entièrement nextcloud à partir de l'archive publiée sur leur site, mais on va présenter l'installation à partir du port OpenBSD qui dispose de quelques révisions de sécurité, bien que peut-être un peu moins à jour.

NextCloud

Installation de Nextcloud

Installez le paquet nextcloud, puis lisez le contenu de /usr/local/share/doc/pkg-readme/nextcloud. 😁

Ok, je détaille. 😊 Notez que sera en fait répété ici le contenu du fichier ci-dessus.

Nextcloud est maintenant installé dans /var/www/nextcloud.

On peut désormais éditer le fichier /etc/httpd.conf afin d'ajouter une section pour nextcloud qui permet d'augmenter la taille maximale des données uploadées. Cette configuration est longue, mais assure une sécurité optimale pour limiter les accès à votre installation.

server "cloud.chezmoi.tld" {
        listen on * port 80
        block return 301 "https://$SERVER_NAME$REQUEST_URI"
}

server "cloud.chezmoi.tld" {
        listen on egress tls port 443
        root "/htdocs/nextcloud" 
        directory index index.php
        hsts
        tls {
            certificate "/etc/ssl/chezmoi.tld.crt"
            key "/etc/ssl/private/chezmoi.tld.key"
        }

        # Set max upload size to 513M (in bytes)
        connection max request body 537919488
        connection max requests 1000
        connection request timeout 3600
        connection timeout 3600

        block drop

        # Ensure that no '*.php*' files can be fetched from these directories
        location "/nextcloud/config/*" {
                block drop
        }

        location "/nextcloud/data/*" {
                block drop
        }

        # Note that this matches "*.php*" anywhere in the request path.
        location "/nextcloud/*.php*" {
                root "/nextcloud"
                request strip 1
                fastcgi socket "/run/php-fpm.sock"
                pass
        }

        location "/nextcloud/apps/*" {
                root "/nextcloud"
                request strip 1
                pass
        }

        location "/nextcloud/core/*" {
                root "/nextcloud"
                request strip 1
                pass
        }

        location "/nextcloud/settings/*" {
                root "/nextcloud"
                request strip 1
                pass
        }

        location "/nextcloud" {
                block return 301 "$DOCUMENT_URI/index.php"
        }

        location "/nextcloud/" {
                block return 301 "$DOCUMENT_URI/index.php"
        }

        location "/.well-known/carddav" {
                block return 301 "https://$SERVER_NAME/nextcloud/remote.php/dav"
        }

        location "/.well-known/caldav" {
                block return 301 "https://$SERVER_NAME/nextcloud/remote.php/dav"
        }

        location "/.well-known/webfinger" {
                block return 301 "https://$SERVER_NAME/nextcloud/public.php?service=webfinger"
        }

        location match "/nextcloud/oc[ms]%-provider/*" {
                directory index index.php
                pass
        }
        location "/.well-known/acme-challenge/*" {
            root "/acme"
            request strip 2
        }
}

Éditez la configuration de php dans /etc/php-*.ini pour y mettre :

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Configurez une base de données. Ici, on part du principe que cette base sera SQLite. Vous n'avez rien de plus à faire que configurer php en conséquence.

Pour configurer nextcloud, retenez que les chemins ne doivent pas tenir compte de /var/www puisque l'installation est dans un chroot.

*/15  *   *   *   *   su -m www -c "/usr/local/bin/php-7.4 -f /var/www/nextcloud/cron.php"

Enfin, installez redis

# pkg_add redis
# rcctl enable redis
# rcctl start redis

puis ajoutez les lignes suivantes dans /var/www/nextcloud/config/config.php, juste avant le dernier "),"

'filelocking.enabled' => true,
'memcache.local' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
'timeout' => 0.0,
'password' => '', // Facultatif

Enfin, créez le fichier "CAN_INSTALL" pour permettre l'installation de nextcloud à partir d'un navigateur :

# touch /var/www/nextcloud/config/CAN_INSTALL

Rechargez httpd et php

# rcctl reload httpd
# rcctl restart php73_fpm

Pour terminer l'installation, ouvrez un navigateur à l'adresse de votre cloud, par exemple https://cloud.chezmoi.tld/nextcloud.

Si vous avez des erreurs à propos de l'UTF-8 qui apparaissent, lancez les commandes suivantes pour résoudre ce problème dû au chroot :

# mkdir -p /var/www/usr/share/locale/UTF-8/
# cp /usr/share/locale/UTF-8/LC_CTYPE /var/www/usr/share/locale/UTF-8/

Autre remarque, afin d'augmenter la limite en taille des fichiers que vous aurez à envoyer, vous devez modifier le fichier /etc/php-7.3.ini pour changer les valeurs dans les variables suivantes :

post_max_size = 513M
upload_max_filesize = 513M

Ces limites sont relativement élevées. N'hésitez pas à réduire ces valeurs selon vos besoins.

Si vous voulez utiliser un accès webdav, c'est bien expliqué dans le manuel d'utilisation de Nextcloud.

https://docs.nextcloud.com/server/stable/user_manual/files/access_webdav.html

Avec l'installation décrite ci-dessus, ça revient à utiliser cette URL :

https://cloud.chezmoi.tld/nextcloud/remote.php/webdav/

Webmail avec RainLoop

Le webmail vous servira à consulter votre messagerie à partir d'un navigateur web.

RainLoop est un excellent webmail qui est facile à installer et à mettre à jour. Il permet non seulement de consulter les messages présents sur votre serveur mais aussi ceux présents chez d'autres hébergeurs, un peu comme le fait Thunderbird. De plus, il intègre par défaut un support pour le chiffrement PGP, bien que partiel.

RainLoop
Thunderbird

Pour que RainLoop fonctionne correctement, vous devrez installer l'extension php-curl et l'activer comme avant.

Nous allons mettre RainLoop dans un dossier /var/www/htdocs/webmail que nous allons créer et dans lequel nous nous plaçons :

# mkdir -p /var/www/htdocs/webmail
# cd /var/www/htdocs/webmail

On télécharge l'archive puis on la décompresse :

# ftp "https://www.rainloop.net/repository/webmail/rainloop-community-latest.zip"
# unzip rainloop*.zip

Afin d'attribuer des permissions raisonnables aux fichiers de RainLoop, on exécute les commandes suivantes :

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chown -R www:daemon .

Il ne nous reste plus qu'à configurer httpd. Comme d'habitude, on rajoute dans le fichier /etc/httpd.conf une nouvelle section :

server "webmail.chezmoi.tld" {
        listen on * tls port 443
        root "/htdocs/webmail"
        directory index index.php
        # 35M maxi, la valeur par défaut de smtpd
        connection max request body 36700160
        hsts
        tls {
            certificate "/etc/ssl/chezmoi.tld.crt"
            key "/etc/ssl/private/chezmoi.tld.key"
        }
        location "/data*"                { block }

        location "/*.php*" {
                fastcgi socket "/run/php-fpm.sock"
        }
}

On recharge httpd : rcctl reload httpd puis on ouvre dans un navigateur la page d'administration du webmail située à l'adresse suivante : https:/chezmoi.tld/?admin.

Par défaut, le login administrateur est admin et le mot de passe 12345. Changez-les tout de suite.

Pour la gestion des pièces jointes, qui est maximum de 35M par défaut avec le serveur mail smtpd, vous devriez changer les valeurs suivantes dans la configuration avancée de php du fichier php-*.ini.

post_max_size = 35M
upload_max_filesize = 35M

RainLoop permet de consulter des messages provenant de serveurs différents. La configuration se déroule à l'adresse chezmoi.tld/?admin. Ainsi, si vous vous dirigez dans l'onglet "Domains", vous pouvez en voir plusieurs pré-configurés.

Nous ajoutons un nouveau domaine (le vôtre) en cliquant sur "+ Add Domain".

Une fenêtre s'ouvre. Complétez le champ "Name" avec le nom de domaine de votre serveur. Pour la configuration IMAP et SMTP, vous pourriez réaliser la même configuration que pour n'importe quel client. J'indique ici une configuration qui fonctionnera avec la mise en place d'un serveur mail telle que décrite dans le présent document.

Cliquez sur "Test" Afin de vérifier que tout fonctionne comme prévu.

Dirigez-vous maintenant vers la page principale (sans le ?admin) de votre webmail pour vous y connecter. Attention, il faut rentrer votre adresse mail complète comme login :

Blog et CMS

Blogotext

Blogotext est un moteur de blog léger et un peu plus 😉. Il pourra vous permettre en outre d'envoyer et partager des fichiers, faire office d'agrégateur de flux RSS, marque page de liens, prise de notes... C'est un outil génial et complet !

https://blogotext.org/

Son installation est très simple et ne nécessite que peu de dépendances, à savoir le paquet sqlite3. Vous y ajouterez php-curl* et php-intl* s'ils ne sont pas déjà installés.

Pour télécharger blogotext, on peut utiliser ftp :

# ftp -o /tmp/blogotext.tar.gz "https://api.github.com/repos/BlogoText/blogotext/tarball/3.7.6"

On décompresse l'archive à partir du dossier /var/www/htdocs :

# cd /var/www/htdocs
# tar xvzf /tmp/blogotext.tar.gz

Un dossier blogotext-3.7.6 est créé. On le renomme en blogotext pour plus de simplicité :

# mv Blogotext-blogotext* blogotext

Maintenant, on modifie les permissions pour que ces nouveaux fichiers appartiennent au serveur web :

# chown -R www:daemon /var/www/htdocs/blogotext

On peut alors éditer le fichier /etc/httpd.conf afin d'ajouter une section pour blogotext :

server "blog.chezmoi.tld" {
    listen on * port 80
    block return 301 "https://$SERVER_NAME$REQUEST_URI"
}

server "blog.chezmoi.tld" {
    listen on * tls port 443
    root "/htdocs/blogotext" 
    directory index index.php

# taille maximale que l'on peut envoyer en bytes
    connection max request body 136700160
    hsts
    tls {
        certificate "/etc/ssl/chezmoi.tld.crt"
        key "/etc/ssl/private/chezmoi.tld.key"
    }

    location "/*.php*" {
        fastcgi socket "/run/php-fpm.sock"
    }
}

Pour prendre en compte ces changements, on recharge httpd avec

# rcctl reload httpd

Vous pouvez maintenant terminer l'installation dans un navigateur à l'adresse de votre blog https://blog.chezmoi.tld/.

Pour poster de nouveaux articles et administrer votre blog, rendez-vous à l'adresse https://blog.chezmoi.tld/admin/auth.php. Notez que par sécurité, vous pouvez renommer le dossier admin sur votre serveur.

Dotclear

Dotclear est un autre moteur de blog. Vous pouvez utiliser n'importe quelle base de données avec ce dernier, mais SQLite reste un choix prudent et simple en auto-hébergement.

Pour installer dotclear, nous allons commencer par préparer la configuration du serveur web (http). À nouveau, nous supposons que vous avez déjà installé PHP.

Dans le fichier /etc/httpd.conf, ajoutez un nouveau site :

server "blog.chezmoi.tld" {
        listen on * port 80
        block return 301 "https://$SERVER_NAME$REQUEST_URI"
}

server "blog.chezmoi.tld" {
        listen on * tls port 443
        root "/htdocs/dotclear" 
        directory index index.php

        # taille maximale que l'on peut envoyer en bytes
        connection max request body 136700160
        hsts
        tls {
            certificate "/etc/ssl/chezmoi.tld.crt"
            key "/etc/ssl/private/chezmoi.tld.key"
        }

        location "/*.php*" {
                fastcgi socket "/run/php-fpm.sock"
        }
}

Ensuite, on crée le dossier qui va accueillir dotclear.

# mkdir -p /var/www/htdocs/dotclear

On télécharge le fichier d'installation de dotclear :

# ftp -o /var/www/htdocs/dotclear/dotclear-loader.php https://download.dotclear.org/loader/dotclear-loader.php

Modifiez les permissions sur le dossier qui contiendra dotclear puis rechargez httpd :

# chown -R www:daemon /var/www/htdocs/dotclear
# rcctl reload httpd

Terminez l'installation dans un navigateur à l'URL suivante :

http://blog.chezmoi.tld/dotclear-loader.php

Si vous avez choisi SQLite, il faudra juste compléter le nom du fichier pour la base en le baptisant à votre souhait.

Vous pouvez lire la documentation officielle de dotclear concernant l'installation.

https://fr.dotclear.org/documentation/2.0/admin/install

Une fois celle-ci terminée, pensez à supprimer le fichier d'installation :

# rm /var/www/htdocs/dotclear/dotclear-loader.php 

PluXML

PluXML est une application très légère qui ne nécessite aucune base de données mais qui pourtant s'avère efficace dans la création d'un site.

http://www.pluxml.org/

Son installation est des plus simples comme vous pourrez le constater.

On commence par télécharger l'archive contenant PluXML après s'être placés dans un dossier temporaire :

# cd /tmp
# ftp -o pluxml.zip "https://www.pluxml.org/download/pluxml-latest.zip"

Vous avez récupéré une archive .zip que l'on décompresse :

# unzip pluxml.zip

Cela nous permet maintenant de déplacer le dossier contenant PluXML à un emplacement approprié pour httpd :

# mv PluXml /var/www/htdocs/pluxml

N'oublions pas de modifier les permissions :

# chown -R www:daemon /var/www/htdocs/pluxml

Il ne nous reste plus qu'à ajouter un nouveau site dans la configuration de httpd. Éditez le fichier /etc/httpd.conf pour y mettre :

server "chezmoi.tld" {
    listen on * port 80
    block return 301 "https://$SERVER_NAME$REQUEST_URI"
}

server "chezmoi.tld" {
    listen on * tls port 443
    root "/htdocs/pluxml/"
    directory index index.php
    hsts
    tls {
        certificate "/etc/ssl/chezmoi.tld.crt"
        key "/etc/ssl/private/chezmoi.tld.key"
    }

    location "*.php*" {
        fastcgi socket "/run/php-fpm.sock"
    }
    # Permet l'envoi de fichier de 35M (en bytes)
    connection max request body 36700160

    # On cache le fichier version:
    location "/version" { block }

    # Ligne très importante pour éviter le vol de mot de passe
    location "/data/configuration/users.xml" { block }
}

Parfait ! Maintenant, il ne vous reste plus qu'à recharger httpd puis à consulter votre site dans un navigateur pour achever l'installation :

Une fois terminée, pensez à supprimer le fichier d'installation de PluXML :

# rm /var/www/htdocs/pluxml/install.php

Vous pouvez désormais ajouter de nouveaux articles ou des pages statiques pour créer votre site. N'hésitez pas à échanger avec la communauté sur le forum de PluXML.

forum de PluXML

CardDAV et CalDAV avec Baïkal

Baïkal est un serveur Cal et CardDAV permettant de synchroniser votre calendrier et vos contacts. Il ne fait que ça, c'est pourquoi il le fait bien tout en restant léger.

Baïkal

Vous aurez besoin pour l'utiliser de PHP et de SQLite.

Vérifiez quelle est la dernière version de Baikal. Vous pouvez ensuite la télécharger avec ftp:

https://github.com/fruux/Baikal/releases
# ftp -o /tmp/baikal.zip "https://github.com/fruux/Baikal/releases/download/0.7.2/baikal-0.7.2.zip"

On se déplace dans le dossier web pour décompresser baikal et modifier les droits sur les fichiers :

# cd /var/www/htdocs/
# unzip /tmp/baikal.zip
# chown -R www:daemon baikal

Ajoutez une nouvelle section dans le fichier /etc/httpd.conf pour configurer httpd. Notez qu'on ne configure ici qu'un accès via une adresse en "https" :

server "dav.chezmoi.tld" {
    listen on * tls port 443
    root "/htdocs/baikal/html" 
    directory index index.php
    hsts
    tls {
        certificate "/etc/ssl/chezmoi.tld.crt"
        key "/etc/ssl/private/chezmoi.tld.key"
    }

    location "/.well-known/caldav" { 
        block return 301 "https://$SERVER_NAME/dav.php" 
    }
    location "/.well-known/carddav" { 
        block return 301 "https://$SERVER_NAME/dav.php" 
    }

    location "/.ht*" { block }
    location "/Core*" { block }
    location "/Specific*" { block }

    location "*.php*" {
        fastcgi socket "/run/php-fpm.sock"
    }
}

Reste à recharger httpd avec rcctl reload httpd. Vous pouvez désormais vous rendre à l'adresse https://dav.chezmoi.tld pour terminer l'installation.

baikal 1 baikal 2 baikal 3

Baïkal et Thunderbird

Pour utiliser votre calendrier, vous pouvez récupérer l'excellente extension lightning pour Thunderbird.

https://addons.mozilla.org/en-US/thunderbird/addon/lightning/

Enregistrez le fichier .xpi puis ouvrez-le dans Thunderbird à partir du menu des modules accessible dans le menu de Thunderbird remarquable par ses 3 traits horizontaux en haut à droite.

Il faudra cliquer sur le petit engrenage pour choisir d'installer à la main l'extension précédemment téléchargée :

Ci-dessous, vous pourrez lire des instructions issues de guillaume-leduc.fr pour utiliser votre instance de Baïkal avec Thunderbird.

guillaume-leduc.fr

Vous pouvez créer un nouvel agenda en faisant un clic-droit dans la zone où sont listés tous les calendriers.

lightning4

Lors de la configuration de votre agenda CalDAV, vous devrez renseigner l'adresse suivante pour un agenda "sur le réseau" :

https://dav.chezmoi.tld/cal.php/calendars/UTILISATEUR/ID_AGENDA/

Vous remplacerez UTILISATEUR et ID_AGENDA selon l'adresse visible dans votre navigateur. N'oubliez pas le / final. Dans l'exemple ci-dessous, ça donne une URL qui se termine par /toto/default/ :

url baikal

Pour un carnet d'adresses, l'URL à renseigner est la suivante :

https://dav.chezmoi.tld/card.php/addressbooks/UTILISATEUR/CARNET/

Baïkal et RainLoop

Si vous utilisez le webmail RainLoop, sachez qu'il est possible d'utiliser la synchronisation des contacts avec votre instance de Baïkal.

Dans l'interface d'administration de Rainloop, allez dans l'onglet "Contacts" puis cochez "Enable contacts" et "Allow contact sync" :

rainloop contact 1

Ensuite, connectez-vous en simple utilisateur. Dans les paramètres de ce dernier accessibles en haut à droite, vous trouverez un onglet "Contact" permettant de préciser l'adresse de votre instance Baïkal sur le même modèle que pour Thunderbird, autrement dit :

https://dav.chezmoi.tld/card.php/addressbooks/UTILISATEUR/CARNET/
rainloop contact 2 rainloop contact 3

Wiki

Il existe tellement de moteurs de wiki qu'il est difficile de faire un choix. Ces derniers sont souvent très configurables et permettent parfois d'en faire des blogs voire des sites complets.

Nous allons nous intéresser ici à l'installation de dokuwiki, un des moteurs les plus connus et les plus pratiques grâce à ses multiples extensions et le peu de dépendances qu'il nécessite : PHP (c'est tout 😋.). Notez qu'il est présent dans les ports et peut-être installé comme n'importe quel paquet.

dokuwiki

L'installation est semblable à la plupart des sites web comme vous pourrez le voir, c'est pourquoi elle ne sera pas exhaustive.

Téléchargement de dokuwiki :

# ftp -o /tmp/dokuwiki.tgz "http://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz"

Extraction de l'archive :

# cd /var/www/htdocs
# tar xvzf /tmp/dokuwiki.tgz

On renomme le dossier et on change les droits :

# mv dokuwiki-* wiki
# chown -R www:daemon wiki

La configuration de httpd peut se réaliser ainsi dans le fichier /etc/httpd.conf:

server "wiki.chezmoi.tld" {
    listen on * port 80
    block return 301 "https://$SERVER_NAME$REQUEST_URI"
    no log
}

server "wiki.chezmoi.tld" {
    listen on * tls port 443
    root "/htdocs/wiki"
    directory index doku.php
    # Set max upload size to 35M (in bytes)
    connection max request body 36700160
    hsts
    tls {
        certificate "/etc/ssl/chezmoi.tld.crt"
        key "/etc/ssl/private/chezmoi.tld.key"
    }

    location "*.php*" {
        fastcgi socket "/run/php-fpm.sock"
    }

    location "/data*"         { block }
    location "/conf*"         { block }
    location "/bin*"          { block }
    location "/inc*"          { block }
    location "/vendor*"       { block }
}

Ajustez les permissions par sécurité :

# chmod 0700 bin/ conf/ data/ inc/ vendor/

Rechargez httpd avec rcctl reload httpd, puis ouvrez dans un navigateur l'adresse de votre wiki vers le fichier install.php pour terminer l'installation.

dokuwiki

Une fois l'installation terminée, supprimez le fichier install.php

# rm /var/www/htdocs/wiki/install.php

Lecteur de flux RSS

Vous pouvez installer sur votre serveur un outil qui vous permettra de lire en un seul endroit les nouveautés publiées sur vos sites favoris grâce à leurs flux RSS. C'est nettement plus pratique que consulter les pages WEB une par une.

RSS

KrISS : simple mais efficace

KrISS est un lecteur de flux qui tient en un seul fichier PHP. Oui, un seul ! Pourtant, il est complet et rapide, tout ce qu'il faut pour une utilisation personnelle.

Ceux qui souhaiteraient proposer un service d'agrégateur de flux à plusieurs personnes pourront très bien installer KrISS dans différents dossiers, un par utilisateur.

L'installation est simple comme tout, il faut télécharger le fichier de KrISS puis le placer sur votre serveur web (http).

server "chezmoi.tld" {
    root "/htdocs/kriss"
    listen on * tls port 443
    hsts
    tls {
    	certificate "/etc/ssl/chezmoi.tld.crt"
    	key "/etc/ssl/private/chezmoi.tld.key"
    }
    location "*.php*" {
    	fastcgi socket "/run/php-fpm.sock"
    }

    location "/kriss/" {
    	directory index index.php
    }
}

Relancez httpd avec rcctl reload httpd puis ouvrez votre navigateur sur l'emplacement de KrISS afin de terminer l'installation.

Profitez 😉

kriss

FreshRSS

Voici une autre application pour lire les flux RSS. Plus complète, elle reste légère et pratique à installer. Elle peut fonctionner avec n'importe quelle base de données. Ici, je choisis SQLite.

https://www.freshrss.org/

On télécharge l'archive, on la décompresse dans /var/www/htdocs/rss puis on ajuste les propriétaires. LA dernière version peut se trouver ici :

https://github.com/FreshRSS/FreshRSS/releases/latest
# cd /tmp
# ftp https://github.com/FreshRSS/FreshRSS/archive/1.17.0.tar.gz
# tar xvzf 1.17.0.tar.gz
# mv FreshRSS-*/ /var/www/htdocs/rss
# chown -R www:daemon /var/www/htdocs/rss
# cd /var/www/htdocs/rss
# find . -type d -exec chmod 750 {} \;
# find . -type f -exec chmod 640 {} \;
# find data -type f -exec chmod 660 {} \;

La documentation indique clairement que seul le dossier "p" doit être exposé. La configuration dans httpd ressemblera donc à ceci :

server "rss.chemoi.tld" {
	root "/htdocs/rss/p"
    listen on * tls port 443
    hsts
    tls {
    	certificate "/etc/ssl/chezmoi.tld.crt"
    	key "/etc/ssl/private/chezmoi.tld.key"
    }
	directory index index.php
    location "*.php*" {
    	fastcgi socket "/run/php-fpm.sock"
    }
}

L'installation ressemble à ça :

Statistiques des visites sur vos sites

Webalizer

Malheureusement, webalizer ne semble plus mis à jour, mais il continue de bien fonctionner.

Webalizer

Webalizer est un outil qui peut générer graphiques et tableaux à partir des logs (journaux) de votre serveur. En un clin d'oeil vous pourrez trouver à propos de votre site :

D'autres outils similaires existent, en particulier matomo. Ce dernier est toutefois moins facile à mettre en place (base de données MySQL) et nécessite l'insertion de code html dans toutes vos pages web. Il est aussi moins efficace si les visiteurs utilisent des addons Firefox comme noscript ou μblock. Cependant, les données récoltées sont plus pertinentes. Vous voudrez donc peut-être compléter l'installation de webalizer avec matomo.

matomo

Quoi qu'il en soit, nous allons voir ici une méthode pour obtenir de belles statistiques avec webalizer.

Comme d'habitude, on commence par l'installer avec la commande magique :

# pkg_add webalizer

Pour le configurer, nous allons utiliser comme base le modèle fourni. On le copie par exemple dans /etc/ :

# cp /usr/local/share/examples/webalizer/sample.conf /etc/webalizer.chezmoi.tld.conf

Éditez ce nouveau fichier pour l'adapter à vos besoins. Voici quelques options pratiques que vous voudrez certainement changer :

HTMLHead HTMLHead body { HTMLHead background: radial-gradient(circle,#2569A0,#000046); HTMLHead } HTMLHead

Vous trouverez un exemple de configuration de webalizer à la fin du document.

Vous pouvez générer une première fois les statistiques avec la commande suivante :

# webalizer -c /etc/webalizer.chezmoi.tld.conf

Et hop, toutes les pages html et les graphiques sont dans le dossier défini par la variable OutputDir, il suffit de vous y rendre avec un navigateur web pour les étudier.

Cependant, vous devrez régler encore quelques petits détails. Par exemple, la partie des "Referers" qui recense les sites sur lesquels le votre est cité doit être bien maigre. Il faut régler la façon dont httpd produit les logs. Rien de bien compliqué, il faut juste ajouter dans le fichier /etc/httpd.conf la ligne suivante dans le site pour lequel on veut des statistiques : log style combined.

Euh, on peut avoir un exemple siouplé? 😎

Voici :

server "chezmoi.tld" {
    listen on * tls port 443
    root "/htdocs/chezmoi.tld"
    directory index index.html
    log style combined

    hsts
    tls {
        certificate "/etc/ssl/chezmoi.tld.crt"
        key "/etc/ssl/private/chezmoi.tld.key"
    }
}

N'oubliez pas de recharger httpd avec rcctl reload httpd.

Mais on doit lancer la commande webalizer manuellement ? C'est nul ce truc !

On n'en reste pas là bien entendu. Afin que les statistiques soient générées par exemple tous les jours, nous pourrions profiter du fichier /etc/daily.local.

De plus, il faut éviter que les logs n'aient été archivés avant d'avoir été traités par webalizer. Nous allons donc modifier la configuration de l'outil qui compresse les logs régulièrement. Il s'agit de newsyslog. On édite le fichier /etc/newsyslog.conf qui ressemble à ça :

# $OpenBSD: newsyslog.conf,v 1.34 2015/10/14 20:54:07 millert Exp $
#
# configuration file for newsyslog
#
# logfile_name      owner:group     mode count size when  flags
/var/cron/log       root:wheel      600  3     10   *     Z
/var/log/aculog     uucp:dialer     670  7     *    24    Z
/var/log/authlog    root:wheel      640  7     *    168   Z
/var/log/daemon                     640  5     30   *     Z
/var/log/lpd-errs                   640  7     10   *     Z
/var/log/maillog                    640  7     *    24    Z
/var/log/messages                   644  5     30   *     Z
/var/log/secure                     600  7     *    168   Z
/var/log/wtmp                       644  7     *    $W6D4 B
/var/log/xferlog                    640  7     250  *     Z
/var/log/pflog                      600  3     250  *     ZB "pkill -HUP -u root -U root -t - -x pflogd"
/var/www/logs/access.log            644  4     *    $W0   Z "pkill -USR1 -u root -U root -x httpd"
/var/www/logs/error.log             644  7     250  *     Z "pkill -USR1 -u root -U root -x httpd"

C'est l'avant-dernière ligne que nous allons changer afin de lancer webalizer avant de faire tourner les logs du serveur web (http). Elle ressemblera à :

/var/www/logs/access.log            644  4     *    $W0   Z "/usr/local/bin/webalizer -c /etc/webalizer.chezmoi.tld.conf && pkill -USR1 -u root -U root -x httpd"

Pour vérifier que tout fonctionne bien, lancez newsyslog en le forçant à archiver les logs et en le faisant parler. Vous devriez obtenir quelque chose de la sorte :

# newsyslog -vF
/var/cron/log ♥Z>: size (KB): 7.24 [10] --> trimming log....
/var/log/authlog <7Z>: age (hr): 88 [168] --> trimming log....
/var/log/daemon <5Z>: size (KB): 0.41 [30] --> trimming log....
/var/log/lpd-errs <7Z>: size (KB): 2.02 [10] --> trimming log....
/var/log/maillog <7Z>: age (hr): 16 [24] --> trimming log....
/var/log/messages <5Z>: size (KB): 0.45 [30] --> trimming log....
/var/log/secure <7Z>: age (hr): -1 [168] --> trimming log....
/var/log/wtmp <7B>: --> trimming log....
/var/log/xferlog <7Z>: size (KB): 0.00 [250] --> trimming log....
/var/log/pflog ♥ZB>: size (KB): 64.26 [250] --> trimming log....
/var/www/logs/access.log <4Z>: --> trimming log....
/var/www/logs/error.log <7Z>: size (KB): 212.87 [250] --> trimming log....
/var/www/logs/mateteestmalade.log <7Z>: size (KB): 3.93 [250] --> trimming log....
Webalizer Xtended RB30 (06-Apr-2014) / [OpenBSD https://www.openbsd.org/] 5.9 amd64 / English
Copyright 2005-2014 by Patrick K. Frei
Based on Webalizer V2.23-08
Using logfile /var/www/logs/access.log (clf)
Using GeoIP Country Edition (/var/db/GeoIP/GeoIP.dat)
GEO-106FREE 20151201 Build 1 Copyright (c) 2015 MaxMind Inc All Rights Reserved
Creating output in /var/www/htdocs/chezmoi.tld/stats
Hostname for reports is 'chezmoi.tld'
Reading history file... webalizer.hist
Skipping bad record (1)
No valid records found!
Generating summary report

Il y a les messages de webalizer qui montrent qu'il a été exécuté.

Et voilà, les statistiques sont générées régulièrement et avant que les logs ne soient archivés.

goaccess

Plus proche de webalizer que de Matomo dans son fonctionnement, goaccess propose une interface plus moderne. Il peut en outre générer des rapports au format html, mais aussi vous laisser consulter les statistiques dans terminal en temps-réel.

goaccess
# pkg_add goaccess

On va éditer le fichier de configuration pour goaccess situé dans /etc/goaccess/goaccess.conf. Vous pouvez lire des exemples pour des logs enregistrés au format "combined" "default". Voici ce à quoi la configuration peut ressembler pour httpd au format combined :

# format des [logs #logs]
time-format %T %z
date-format %d/%b/%Y
log-format %v %h %^ %^ [%d:%t] "%r" %s %b "%R" "%u"
# Base de donnees pour la geolocalisation
geoip-database /var/db/GeoIP/GeoLite2-Country.mmdb
# ne stoppe pas après une erreur
num-tests 0
# Dossier où seront enregistrees les statistiques
db-path /var/goaccessdb/
persist true
restore true

On crée le dossier qui contiendra les données de goaccess : mkdir -p /var/goaccessdb/.

Ensuite, vous pouvez générer les statistiques. Pensez à le faire avant la rotation des logs (voir le paragraphe sur webalizer.

goaccess /var/www/logs/chezmoi.tld.log -o /var/www/htdocs/chezmoi.tld/stats.html
leadership