Quésaco

Doit-on encore présenter la célèbre alternative libre à tous les Read it later ?
Cette application qui aurait dû être choisi par la fondation Mozilla et être intégrée au navigateur Firefox (garantie sans troll inside) ! Bref...

Wallabag, comme vous l'avez sûrement compris, et une application qui permet d'enregistrer les pages web consultées - souvent des articles - afin de les lires plus tard.

À cette fonctionnalité première, viens s’en greffer d'autres, comme :

  • La possibilité d'exporter dans différents formats (PDF, EPub, Mobi, etc...).
  • De partager les articles enregistrés (liens publics, Diaspora*, courriel, Shaarli, etc..).
  • Des applications pour les ordiphones en fonction de leur système d'exploitation.
  • La présence de hacks permettant son intégration sur certaines liseuses.1
  • etc.

En résumé : Que du bonheur !

Il faut aussi savoir que Wallabag fournit des instances à des tarifs plus qu'abordable !
Pour comparer brièvement, mon instance me revient à quasiment 45€/année (hébergement + ndd)...

Par la suite, cet article va causer de l'installation de Wallabag sur un petit serveur de chez Scaleway, à savoir un VC1S, tournant sur une Debian Stretch2 embarquant NginX, SQLite et PHP7.0...

Strech no stress

La première étape consiste à passer de Debian/Jessie à Debian/Stretch et de changer la version du noyau.

Chez Scaleway, juste après avoir installé une Jessie toute fraîche (en version 8.2 bourdayl !!), un petit coup de

sed -i -e "s/jessie/stretch/g" /etc/apt/sources.list  

suivi d'une mise à jour en bonne est due forme

apt update && apt full-upgrade -y && apt autoremove  

nous permet de nous retrouver avec une Debian/Stretch flambante neuve.

Il faut ensuite changer la version du noyau utilisé dans l'interface web du serveur fournit par Scaleway. Cela correspond à modifier le bootscript dans les options avancées et de redémarrer le serveur

Compose tes paquets

Pour pouvoir installer Wallabag, les paquets suivants sont nécessaires :

# apt install nginx php7.0-fpm php7.0-cli php7.0-sqlite php7.0-mcrypt php7.0-curl php7.0-tidy php7.0-xml php7.0-gd php7.0-mbstring php7.0-bcmath php-amqp unzip git letsencrypt

Ainsi que la mise en place du gestionnaire de paquet composer qui permettra d'installer toutes les bibliothèques nécessaires :

# curl -s https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer

Pas plus pas moins.

Wallabag

On passe à l'installation de l'application en elle-même :

# cd /srv/
# git clone https://github.com/wallabag/wallabag.git
# cd wallabag
# make install

Composer prend alors le relais pour installer Wallabag et, afin de paramétrer proprement l'application (via le fichier parameters.yml), il va nous poser tout plein de questions une fois toutes les bibliothèques installées.

12/12/2017 : Si vous utilisez (comme moi) une base SQLite, il y a une erreur lors de la création de la base.

Pour la contourner, il faut renseigner le champ database_path avec la valeur suivante : %kernel.root_dir%/../data/db/wallabag.sqlite

Tous ces paramètres et leur signification sont disponibles dans la documentation.

La création d'un utilisateur est alors proposé, puis un message comme quoi l'installation c'est déroulé correctement doit alors s'afficher.

On lance un petit make run ou php bin/console server:run --env=prod et on se rend à l'adresse http://ipduserveur:8000 afin de vérifier que l'application tourne correctement.

Un ctrl+c pour stopper le tout.

On n'oublie pas de donner les droits à www-data sur les dossiers nécessaires

# chown -R www-data:www-data /srv/wallabag/{web,var,bin,vendor,app/config}

Nginx et Let's encrypt

On stoppe le serveur Nginx si celui-ci tourne :

# systemctl stop nginx

On génère un certificat :

# certbot certonly --standalone --rsa-key-size 4096 --agree-tos --email mon-em@il.qqch  --domains nomdedomaine.qqch

Et on créer un vhost intitulé /etc/nginx/conf.d/wallabg.conf par exemple, avec les paramètres suivants :

map $http_upgrade $connection_upgrade {  
    default upgrade;
    '' close;
    }

server {  
    listen 80;
    server_name nomdedomaine.qqch;
    return 301 https://nomdedomaine.qqch.net$request_uri;

    access_log /dev/null;
    error_log /dev/null;
    }

server {  
    listen 443 ssl http2;
    server_name nomdedomaine.qqch;

    ssl_certificate /etc/letsencrypt/live/nomdedomaine.qqch/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nomdedomaine.qqch/privkey.pem;
    ssl_protocols TLSv1.2;
    ssl_ecdh_curve secp384r1;
    ssl_ciphers EECDH+AESGCM:EECDH+AES;
    ssl_prefer_server_ciphers on;
    resolver 80.67.169.12 80.67.169.40 valid=300s;
    resolver_timeout 5s;
    ssl_session_cache shared:SSL:10m;
    add_header Strict-Transport-Security "max-age=15768000";

    add_header Referrer-Policy "strict-origin-when-cross-origin";
    add_header Content-Security-Policy "default-src 'none'; font-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self'; img-src 'self' data:; connect-src 'self' wss://nomdedomaine.qqch; frame-ancestors 'none';";

    server_tokens off;

    root /srv/wallabag/web;

    location / {
        try_files $uri /app.php$is_args$args;
    }

    ## Pour bloquer les inscriptions sur la page d'accueil !
    location ^~ /register {
        deny all ;
        return 403 ;
    }

    location ~ ^/app\.php(/|$) {
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        internal;
    }


    # Le petit 404 
    location ~ \.php$ {
        return 404;
    }

    error_log /var/log/nginx/wallabag_error.log;
    access_log /var/log/nginx/wallabag_access.log;


}

Et on relance Nginx

# systemctl start nginx

L'instance Wallabag est désormais accessible via votre nom de domaine... Enjoy !

Sauvegarde et Mise à jour

Personnellement, vu que j’utilise une base SQLite, je sauvegarde uniquement la base située dans : wallabag/data/db/wallabag.sqlite

Un petit rsync à traver ssh fait très bien le boulot :

rsync -aPL –inplace -rsh=’ssh -p 012345 -i /home/user/.ssh/sshkey’ /srv/wallabag/data/db/wallabag.sqlite user@chezmoi:~/Backup-wallabag/  

Je fait aussi un export régulier au format .json via l'interface de wallabag de façon régulière

Concernant la mise à jour, il n’y a rien de plus simple depuis la version 2.2.0 de wallabag. Un simple make update dans le répertoire d’installation suffit.

Noob-tips !

Si comme moi vous aviez une vieille instance en version v.1.x pleine à craquer et qui vous à générer un fichier .json bien lourd lors de votre export (7.8 M personnellement), sachez que l'import peu échouer pour plusieurs raisons :

  • La directive upload_max_filesize du fichier /etc/php/7.0/fpm/php.ini qui a une valeur trop faible.
  • La directive post_max_size dans le même fichier, pour les mêmes raisons.
  • Rajouter la directive client_max_body_size xxM; dans la configuration du vhost Nginx.

Cependant, un message d'erreur de time out peut toujours survenir...

La parade, uploader directement votre fichier .json sur votre serveur et le faire avaler à Wallabag via la ligne de commande :

# cd /srv/wallabag/
# bin/console wallabag:import 1 /chemin/vers/fichier.json --env=prod

Comme décrit dans la documentation

À vous les joies de Wallabag.


  1. Comme par exemple plop-reader qui vise les liseuses PocketBook et - normalement - une application native pour les liseuse Bookeen serait prévue prochainement...

  2. Car tout le monde l'utilise déjà bien entendu ^^