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 nouvelles concernant ces applications pour mettre à jour si de nouvelles versions sont disponibles.
Comme vous le constaterez, la méthode d'installation est sensiblement la même pour la plupart des applications :
- On crée un dossier pour le nouveau site dans
/var/www/htdocs
; - On télécharge l'application, souvent sous forme d'archive que l'on décompresse ;
- On déplace les fichiers de l'application dans le dossier prévu à cet effet ;
- On change les permissions sur les fichiers :
# chown -R www:daemon /var/www/htdocs/lesite
- On ajoute une section dans
/etc/httpd.conf
; - On recharge httpd avec
rcctl reload httpd
; - On termine l'installation en allant sur le nouveau site.
/!\ 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.
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-fullchain.pem"
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.3 -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.
Avec l'installation décrite ci-dessus, ça revient à utiliser cette URL :
https://cloud.chezmoi.tld/nextcloud/remote.php/webdav/
Webmail
Le webmail vous servira à consulter votre messagerie à partir d'un navigateur web.
Rainloop
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.
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-fullchain.pem"
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
Configuration de RainLoop
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 :
Roundcubemail
Voici quelques notes pour installer le très connu
roundcube. Cette application est complète,
toutefois relativement complexe à installer. Vous voudrez peut-être
installer le paquet roundcubemail
déjà tout prêt, mais peut-être à une
version plus ancienne, et lire le fichier
/usr/local/share/doc/pkg-readmes/roundcubemail
. (C'est toujours une
bonne idée pour notamment vérifier la sécurité de la configuration
d'httpd). Notez que installer à partir de l'achive “officielle” revient
au même.
C'est parti! 😊
# pkg_add roundcubemail
Pour l'exemple, je choisis une base sqlite.
Vous pouvez voir les dépendances s'installer :
# pkg_add roundcubemail
quirks-3.325 signed on 2020-06-29T10:22:37Z
Ambiguous: choose dependency for roundcubemail-1.4.6:
a 0: php-pdo_mysql-7.3.19
1: php-pdo_pgsql-7.3.19
2: php-pdo_sqlite-7.3.19
Your choice: 2
roundcubemail-1.4.6:php-7.3.19: ok
roundcubemail-1.4.6:php-zip-7.3.19: ok
roundcubemail-1.4.6:php-pdo_sqlite-7.3.19: ok
roundcubemail-1.4.6:aspell-0.60.6.1p10: ok
roundcubemail-1.4.6:php-pspell-7.3.19: ok
roundcubemail-1.4.6: ok
The following new rcscripts were installed: /etc/rc.d/php73_fpm
See rcctl(8) for details.
New and changed readme(s):
/usr/local/share/doc/pkg-readmes/php-7.3
/usr/local/share/doc/pkg-readmes/roundcubemail
Notez qu'il faut ajouter dans le fichier /etc/php*.ini
les lignes
suivantes :
[suhosin]
suhosin.session.encrypt = 0
Les fichiers de roundcube sonr dans le dossier /var/www/roundcubemail
.
Nous allons créer la base sqlite pour roundcube.
La commande suivante crée la base :
# cd /var/www/roundcubemail
# sqlite3 -init SQL/sqlite.initial.sql db/sqlite.db
-- Loading resources from roundcube/SQL/sqlite.initial.sql
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
(Tapez .exit pour quitter sqlite3)
sqlite> .exit
Enfin, on modifie les permissions de tous ces nouveaux fichiers :
# cd /var/www/htdocs/
# chown -R www:daemon roundcubemail
# chmod 0775 roundcubemail/db
# chmod 0670 roundcubemail/db/sqlite.db
Dans la configuration de httpd, veillez à restreindre l'accès à certains
fichiers dans le fichier
/etc/httpd.conf
:
# Deny Protected directories
location "/config*" { block }
location "/temp*" { block }
location "/logs*" { block }
location "/README" { block }
location "/INSTALL" { block }
location "/LICENSE" { block }
location "/CHANGELOG" { block }
location "/UPGRADING" { block }
location "/bin*" { block }
location "/SQL*" { block }
location "/db*" { block }
location "*.md" { block }
location "\.*" { block }
Rechargez httpd et PHP puis allez à la page d'installation de votre
nouveau webmail avec un navigateur :
https://webmail.chezmoi.tld/installer
.
Suivez les indications données. La plupart des choses n'ont pas besoin d'être modifiées. Vérifiez tout de même que :
- Pour la base de données, vous choisissez SQLite.
- Le nom de la base de données (Database name) doit être celui-ci
(avec tous les
/
…):////htdocs/roundcubemail/db/sqlite.db
- Les autres champs pour la base de données doivent être vides.
- Pour
smtp_server
, la valeur doit êtrelocalhost
.
Dans le navigateur sera générée la configuration. Enregistrez-la dans le fichier
/var/www/roundcubemail/config/config.inc.php
Vérifiez bien qu'il contient au moins ceci (attention au nombre de /
)
:
$config['db_dsnw'] = 'sqlite:////htdocs/roundcube/db/sqlite.db?mode=0670';
$config['smtp_server'] = 'localhost';
Vous avez une dernière page de test, puis vous pouvez allez à l'URL de votre webmail pour voir que tout fonctionne.
Bien que tout semble être en état de marche, n'oublions pas la sécurité.
Modifiez le fichier config.inc.php
pour désactiver l'installateur.
$config['enable_installer'] = false;
Puis supprimez le dossier d'installation totalement :
# rm -r /var/www/htdocs/roundcubemail/installer
Ça y est, votre webmail est prêt!
À l'avenir, pour mettre roundcube à jour, lisez le fichier UPGRADING
et la section Update manually
.
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 !
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-fullchain.pem"
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-fullchain.pem"
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.
Une fois celle-ci terminée, pensez à supprimer le fichier d'installation :
# rm /var/www/htdocs/dotclear/dotclear-loader.php
Wordpress
Wordpress est un moteur relativement lourd mais qui peut permettre de créer n'importe quel site. Si vous recherchez un CMS plus léger et facile à installer, regardez du côté de PluXML.
Quelques dépendances sont à installer, dont la base de données MariaDB :
# pkg_add php-mysqli-* mariadb-server
# cd /etc/php-*.sample
# for i in *; do ln -sf ../php-*.sample/$i ../php-*/; done
# rcctl restart php*_fpm
Vous devez maintenant créer une base de données dans MariaDB, le clone libre de MySQL. Référez-vous à la partie dédiée à cette manipulation. Veillez à retenir le nom de la base choisie, l'utilisateur et le mot de passe.
On télécharge ensuite la dernière version de wordpress :
# ftp -o /tmp/wordpress.tar.gz "https://wordpress.org/latest.tar.gz"
On décompresse l'archive dans le dossier /var/www/htdocs
# cd /var/www/htdocs
# tar xvzf /tmp/wordpress.tar.gz
On modifie les permissions du nouveau dossier :
# chown -R www:daemon /var/www/htdocs/wordpress
On ajoute maintenant une section dans /etc/httpd.conf
server "blog.chezmoi.tld" {
listen on * tls port 443
root "/htdocs/wordpress"
directory index index.php
hsts
tls {
certificate "/etc/ssl/chezmoi.tld-fullchain.pem"
key "/etc/ssl/private/chezmoi.tld.key"
}
# Set max upload size to 35M (in bytes)
connection max request body 36700160
# protected files and dir
location "/.*" { block }
location "/upload/*.php" { block }
location "/files/*.php" { block }
# Any other PHP file
location "/*.php*" {
fastcgi socket "/run/php-fpm.sock"
}
}
Enfin, on recharge httpd : rcctl reload httpd
.
Dirigez-vous à l'adresse du nouveau site pour terminer l'installation et remplir les informations concernant la base de données qui vient d'être créée.
L'installation de Wordpress est terminée 😊 Vous pouvez désormais ajouter du contenu et personnaliser votre site.
Si toutefois Wordpress ne vous convenait pas, regardez le paragraphe suivant qui parle de PluXML, nettement plus simple à gérer.
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.
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-fullchain.pem"
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.
Drupal
Drupal est un gestionnaire de contenu très répandu mais aussi relativement lourd. Cependant, vous pourrez l'utiliser pour créer toutes sortes de sites.
Avant toutes choses, vous devez avoir déjà installé PHP avec au moins les paquets php-curl, php-gd, un support de base de données et appliqué la configuration relative au chroot. Vous pouvez utiliser n'importe quelle base de données entre SQLite, MySQL ou PostgreSQL.
On télécharge Drupal en utilisant le lien que vous pouvez retrouver à cette page.
# cd /tmp
# ftp -o drupal.tgz https://www.drupal.org/download-latest/tar.gz
Une fois l'archive récupérée, on extrait les fichiers puis on les place
dans un dossier accessible par le serveur httpd qui sera ici
/var/www/htdocs/drupal
:
# tar xvzf drupal.tgz
# mv drupal-*/ /var/www/htdocs/drupal
N'oubliez pas de changer les permissions :
# chown -R www:daemon /var/www/htdocs/drupal
Puisque nous en sommes à configurer la partie serveur httpd,
éditez le fichier /etc/httpd.conf
pour y ajouter votre
nouveau site :
server "chezmoi.tld" {
listen on * port 80
block return 301 "https://$SERVER_NAME$REQUEST_URI"
no log
}
server "chezmoi.tld" {
listen on * tls port 443
root "/htdocs/drupal"
directory index index.php
connection max request body 36700160
hsts
tls {
certificate "/etc/ssl/chezmoi.tld-fullchain.pem"
key "/etc/ssl/private/chezmoi.tld.key"
}
location "*.php*" {
fastcgi socket "/run/php-fpm.sock"
}
}
À titre d'exemple, voici les manipulations à faire pour utiliser MariaDB (mysql) avec drupal. Ces manipulations ne sont pas à effectuer si vous utilisez SQLite.
Il faut créer un utilisateur pour la base de données qui aura le droit
de créer une nouvelle table. La table s'appellera drupal_base
et
l'utilisateur drupaluser
. On entre # mysql -u root -p
puis :
MariaDB [(none)]> CREATE DATABASE drupal_base;
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> CREATE USER 'drupaluser'@'localhost' IDENTIFIED BY 'motdepasse';
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX,
ALTER, CREATE TEMPORARY TABLES ON drupal_base.* TO 'drupaluser'@'localhost';
Query OK, 0 rows affected (0.02 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
On a presque fini, courage. Rechargez la configuration de httpd avec la commande habituelle
# rcctl reload httpd
Vous pouvez maintenant terminer l'installation en ouvrant dans un
navigateur https://chezmoi.tld/
afin d'être redirigé vers la page
d'installation.
Et voilà, vous êtes prêts à fabriquer votre site. 😁
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.
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
:
# ftp -o /tmp/baikal.zip "https://github.com/fruux/Baikal/releases/download/0.4.6/baikal-0.4.6.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-fullchain.pem"
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.
Configuration de Thunderbird pour Baïkal
Pour utiliser votre calendrier, vous pouvez récupérer l'excellente extension lightning pour Thunderbird.
Pour la télécharger, c'est par
ici.
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.
Vous pouvez créer un nouvel agenda en faisant un clic-droit dans la zone où sont listés tous les calendriers.
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/
:
Pour un carnet d'adresses, l'URL à renseigner est la suivante :
https://dav.chezmoi.tld/card.php/addressbooks/UTILISATEUR/CARNET/
Configuration de Rainloop pour Baïkal
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” :
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/
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 :P.). Notez qu'il est présent dans les ports et peut-être installé comme n'importe quel paquet.
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-fullchain.pem"
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.
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.
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).
- Préparez votre serveur pourPHP et ajoutez-y l'extension curl. Réalisez aussi la configuration relative au chroot afin de pouvoir résoudre les noms de domaine.
- Téléchargez KrISS :
ftp -o /tmp/index.php https://raw.github.com/tontof/kriss_feed/master/index.php
- Créez le dossier qui contiendra KrISS :
# mkdir -p /var/www/htdocs/kriss
- Déplacez le fichier index.php à l'endroit souhaité :
# mv /tmp/index.php /var/www/htdocs/kriss
- Ajustez les permissions :
# chown -R www:daemon /var/www/htdocs/kriss
- Ajustez éventuellement la configuration de
/etc/httpd.conf
, mais ça a sûrement déjà été fait lors de la configuration de PHP :
server "chezmoi.tld" {
root "/htdocs/kriss"
listen on * tls port 443
hsts
tls {
certificate "/etc/ssl/chezmoi.tld-fullchain.pem"
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 😉
TinyTinyRSS : application complète
Tiny Tiny RSS est un autre agrégateur de flux. Ce dernier est très complet et conviendra davantage à ceux souhaitant proposer ce service à plusieurs personnes. Toutefois, son installation est loin d'être simple, et il s'avère souvent plus pratique d'avoir plusieurs instances de KrISS à la place. Mais libre à vous d'utiliser votre outil favori.
Pour l'installer, vous devez avoir déjà installé PHP, et appliqué la configuration relative au chroot ainsi que PostgreSQL ou MySQL et créé une table pour Tiny Tiny RSS.
Nous allons utiliser PostgreSQL par souci de performance. On va créer
une base uniquement pour Tiny Tiny RSS. Nous faisons le choix de passer
par un utilisateur ttrss
qui aura accès à la base :
# psql -U postgres -c "CREATE USER ttrss \
WITH PASSWORD 'mot_de_passe_de_l_utilisateur';"
# psql -U postgres
\connect template1
CREATE DATABASE "ttrssdb" WITH ENCODING 'UTF-8';
GRANT ALL PRIVILEGES ON DATABASE "ttrssdb" TO ttrss;
ALTER DATABASE "ttrssdb" OWNER TO ttrss;
\q
Nous pouvons enfin passer à la configuration de ttrss. On le télécharge
dans le dossier /var/www/htdocs/ttrss
:
# cd /var/www/htdocs
# git clone --depth=1 https://tt-rss.org/git/tt-rss.git ttrss
Ensuite, nous modifions les permissions pour le serveur web (http) :
# chown -R www:daemon /var/www/htdocs/ttrss
On édite /etc/httpd.conf
pour y ajouter notre
nouveau site :
server "rss.chezmoi.tld" {
listen on * port 80
block return 301 "https://$SERVER_NAME$REQUEST_URI"
no log
}
server "rss.chezmoi.tld" {
listen on * tls port 443
root "/htdocs/ttrss"
directory index index.php
hsts
tls {
certificate "/etc/ssl/chezmoi.tld-fullchain.pem"
key "/etc/ssl/private/chezmoi.tld.key"
}
location "*.php*" {
fastcgi socket "/run/php-fpm.sock"
}
}
On recharge la configuration de httpd
:
# rcctl reload httpd
Vous pouvez désormais terminer l'installation en ouvrant votre
navigateur à l'adresse https://rss.chezmoi.tld/install/
.
On vous demande les identifiants pour accéder à la base de données. Ce
sont ceux que vous avez créés juste avant pour l'utilisateur ttrss
.
Cliquez ensuite sur “Initialize database” :
Cliquez sur “Save Configuration” pour l'enregistrer. Vous pouvez bien sûr modifier cette configuration selon vos besoins avant.
Vous pouvez maintenant vous diriger à l'adresse http://rss.chezmoi.tld
pour vérifier que tout fonctionne bien. Les identifiants par défaut sont
“admin” et “password”, qu'il faudra changer au plus vite.
Si tout s'est bien passé, vous pouvez supprimer l'installateur :
# rm -r /var/www/htdocs/ttrss/install
Vous souhaiterez certainement mettre à jour régulièrement la liste des
flux de façon automatique. Si vous avez lu la documentation relative à
TinyTinyRSS, vous savez qu'il faut exécuter le fichier update.php
. Par
exemple, dans une tâche cron :
@hourly /usr/local/bin/php-7.3 /var/www/htdocs/ttrss/update.php --feeds --quiet
Il vous sera peut-être demandé de modifier les permissions sur certains répertoires. Vous devez alors entrer :
chown -R 777 /var/www/htdocs/ttrss/cache/images
chown -R 777 /var/www/htdocs/ttrss/cache/upload
chown -R 777 /var/www/htdocs/ttrss/cache/export
chown -R 777 /var/www/htdocs/ttrss/feed-icons
chown -R 777 /var/www/htdocs/ttrss/lock
Statistiques des visites sur vos sites
Webalizer
Malheureusement, webalizer ne semble plus mis à jour, mais il continue de bien fonctionner.
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 :
- Horaires de visites ;
- Nombre de clics ;
- Quantité de données chargées ;
- Pages 404 (pratique pour traquer les liens morts) ;
- D'où viennent les visiteurs…
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.
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 :
LogFile /var/www/logs/access.log
: Emplacement des journaux du serveur web.OutputDir /var/www/htdocs/chezmoi.tld/stats
: Vous choisissez où seront enregistrées les pages html générées. Référez-vous à la partie sur httpd pour configurer votre serveur web (http) et accéder aux statistiques avec un navigateur. Attention de bien créer ce répertoire au préalable, sinon Webalizer plantera avec un message d'erreur.HideSite *chezmoi.tld
etHideReferrer chezmoi.tld/
: On cache les liens provenant des clics réalisés sur votre site vers votre site.HideURL *.css , HideURL *.woff
: On cache les extensions de fichiers non souhaitées.IgnoreURL /favicon.ico
: On ignore certaines URL lorsque les statistiques sont générées.Color*
: Pour changer les couleurs, car le thème par défaut, n'est pas très attrayant tout de même.HTMLHead ...
: tout ce qui sera rajouté dans l'entête de la page html générée. Vous pouvez de cette façon ajouter quelques lignes CSS pour modifier l'apparence, par exemple :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-fullchain.pem"
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 <3Z>: 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 <3ZB>: 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.
Matomo
Matomo est nettement plus lourd pour générer des statistiques. Si votre serveur a une puissance limitée, préférez webalizer.
Pour PHP, installez et activez ces paquets : php-curl php-gd
. Il y a
aussi besoin des bibliothèques geoip et cli qui sont normalement
intégrées dans le paquet PHP d'OpenBSD.
Installez une base MySQL (mariadb). Voici un récapitulatif tiré de la documentation de matomo:
# mysql -u root -p
mysql> CREATE DATABASE matomo_db_name_here;
mysql> CREATE USER 'matomo'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON matomo_db_name_here.* TO 'matomo'@'localhost';
Ensuite, on télécharge matomo dans le dossier /var/www/htdocs/matomo
:
# ftp -o /tmp/matomo.zip "http://builds.matomo.org/matomo.zip"
# cp /tmp && unzip /tmp/matomo.zip
# mv matomo /var/www/htdocs/
Configurez maintenant un nouveau site dans le fichier /etc/httpd.conf
:
server "stats.chezmoi.tld" {
listen on * tls port 443
root "/htdocs/matomo/"
directory index index.php
hsts
tls {
certificate "/etc/ssl/chezmoi.tld-fullchain.pem"
key "/etc/ssl/private/chezmoi.tld.key"
}
location "*.php*" {
fastcgi socket "/run/php-fpm.sock"
}
}
Modifiez les permissions sur ce dossier :
# chown -R www:daemon /var/www/htdocs/matomo
Rechargez httpd avec rcctl reload httpd
puis dirigez-vous avec un
navigateur sur l'adresse du site fraîchement activé pour terminer
l'installation de matomo.
N'oubliez pas d'ajouter à vos pages web le code d'intégration donné.
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.
Afin de profiter de statistiques incrémentales au fil du temps, il faut installer la saveur “tokyocabinet” du paquet :
# pkg_add -z goaccess-*-tokyocabinet
Pensez à regarder l'exemple donné dans le paquet :
/usr/local/share/examples/goaccess/goaccess.conf
Vous pouvez créer à partir de l'exemple un fichier de configuration pour
goaccess qu'on appelera ici /etc/goaccess.conf
. Vous pouvez lire des
exemples pour des logs enregistrés au format “combined”
ou “default”. Voici ce à quoi la configuration peut ressembler pour
httpd au format classique :
# 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 s'arrete pas si une ligne ne peut être parsee
num-test 0
# Dossier où seront enregistrees les statistiques
db-path /var/goaccessdb/
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 \
--load-from-disk --keep-db-files
Si vous constatez des erreurs de ce type:
Fatal error has occurred
Error occurred at: src/tcabdb.c - tc_adb_create - 126
Unable to open an abstract database: /var/goaccessdb//8mcs9SUehdb_cumts.tcb#lcnum=1024#ncnum=512#lmemb=128#nmemb=256#bnum=32749#opts=l#mode=wct
Avant de créer les statistiques, vous devez augmenter la limite du
nombre de fichiers qui peuvent être ouverts avec la commande
ulimit -n 256
. Ensuite, goaccess fonctionnera comme prévu.