Commit ae3fb18a authored by Mickael Tonneau's avatar Mickael Tonneau
Browse files

Mise à jour pour Debian 9 et Wallabag V2

Ajout des tâches asynchrones
Contournement d'un bug Debian 9 et LXC
parent e1bf98b1
......@@ -28,21 +28,14 @@ riche en informations !
La machine utilisée pour ce tutoriel est la suivante :
* Linux Debian Jessie
* Serveur web Nginx installé
* PHP 5.5 minimum (des configurations récentes avec PHP 7 fonctionnent aussi)
* Linux Debian Stretch
* Etre administrateur de la machine et faire partie du groupe sudo
En option, vous pourriez avoir besoin :
* d’un nom de domaine correctement configuré pour rediriger vers votre serveur
* d’un serveur mail opérationnel pour confirmer les nouveaux comptes et la double authentification
<div class="alert alert-info">
<b>Note</b> : pour installer PHP sur Debian avec Nginx, n'installez pas
le paquet <code>php5</code> qui a pour dépendance Apache2, mais préférez
le paquet <code>php5-fpm</code> (qui sera nécessaire pour la
communication entre PHP et Nginx).
</div>
## Installation
......@@ -56,13 +49,24 @@ quelques ustensiles !
Tout d’abord, nous allons avoir besoin de git pour récupérer les sources,
et de curl qui est utilisé en sous-main par Wallabag :
sudo apt-get install git curl
sudo apt install git curl
Sans oublier aussi make, zip et unzip qui seront utilisés lors de l'installation
de Wallabag.
sudo apt install make zip unzip
Vous aurez aussi besoin d'un serveur Web pour afficher les pages. Et rien de
tel qu'un serveur rapide et léger pour servir vos pages, du coup, on installe
NginX
sudo apt install nginx
Wallabag utilise aussi PHP pour fonctionner avec moult modules.
Rassurez-vous, la plupart sont fournis par défaut ! Pour ceux qui
manqueraient potentiellement :
sudo apt-get install php5-curl php5-gd php5-sqlite php5-tidy
sudo apt-get install php-fpm php-curl php-gd php-tidy php-xml php-mbstring php-bcmath
Pour vérifier que tout ce qu’il faut est installé, un petit `php -m`
vous indiquera quels sont les modules utilisés par PHP (en ligne de
......@@ -70,7 +74,7 @@ commande – ce n’est pas forcément ce qui sera utilisé par le serveur web,
mais c'est un moyen simple et rapide de voir si le module est installé).
Vous pouvez aussi vérifier que les modules sont activés pour php-fpm,
en vérifiant quels sont les modules activés dans `/etc/php5/mods-available/`.
en vérifiant quels sont les modules activés dans `/etc/php7.0/mods-available/`.
Si vous voyez une ligne du genre `extension=tidy.so` sans point-virgule devant, c’est activé.
Vous devez retrouver ces éléments dans la réponse de `php -m` :
......@@ -89,6 +93,7 @@ Vous devez retrouver ces éléments dans la réponse de `php -m` :
php-curl
php-gettext
php-tokenizer
php-bcmath
Afin de se connecter à une base de données, Wallabag utilise un des modules PDO.
Vous aurez donc besoin **d’au moins** une extension et d’un système de
......@@ -98,7 +103,11 @@ bases de données au choix parmi :
pdo_sqlite
pdo_pgsql
Pour la suite, nous utiliseront sqlite, qui est plus facile à configurer.
Pour la suite, nous utiliseront MariaDB comme serveur de base de données.
Pour cela, on va l'installer lui et son extension PDO.
sudo apt install mariadb-server php-mysql
Enfin, pour gérer les dépendances PHP et construire l’application,
il nous faudra Composer :
......@@ -117,19 +126,47 @@ du système et on vérifie que les droits sont bien d'équerre)
Maintenant que tout est prêt, la météo est bonne, rentrons dans le vif du sujet !
On se place dans le répertoire de Nginx (dans notre installation,
On va commencer à sécuriser la base de données un minimum. Pour cela, on va réaliser
les actions suivantes:
* Mettre un mot de passe pour root
* Désactiver l'accès root depuis l'extérieur
* Supprimer les comptes anonymes
* Supprimer la base test, accessible par les utilisateurs anonymes
Et tout cela, avec la commande:
mysql_secure_installation
Une fois lancée, répondez aux questions suivantes:
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
Une fois la base sécurisée, on va créer la base de données de Wallabag et
l'utilisateur associé:
mysql -u root -p
CREATE DATABASE wallabag;
GRANT ALL PRIVILEGES ON wallabag.* TO 'wallabag'@'localhost' IDENTIFIED BY 'un_mot_de_passe';
FLUSH PRIVILEGES;
exit;
On se place ensuite dans le répertoire de Nginx (dans notre installation,
`/var/www/html`) et on récupère les sources de Wallabag :
cd /var/www/html
sudo git clone https://github.com/wallabag/wallabag.git
sudo -u www-data /bin/sh -c "git clone https://github.com/wallabag/wallabag.git"
Une fois que tout est téléchargé, on rentre dans le dossier fraîchement
créé, et on prépare linstallation avec Composer :
créé, et on lance l'installation dans la pure tradition de Linux :
cd wallabag
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
sudo -u www-data /bin/sh -c "make install"
Au lancement de la dernière commande ci-dessus, Composer va préparer le
Au lancement de la dernière commande ci-dessus, make va préparer le
package Wallabag pour qu’il soit utilisable, et vous posera des questions
sur la configuration à générer.
Laissez les options par défaut si vous ne savez pas quoi mettre.
......@@ -146,36 +183,46 @@ Quelques recommandations tout de même :
Creating the "app/config/parameters.yml" file
Some parameters are missing. Please provide them.
database_driver (pdo_sqlite):
database_host (127.0.0.1):
database_port (null):
database_name (symfony):
database_user (root): www-data
database_password (null):
database_path ('%kernel.root_dir%/../data/db/wallabag.sqlite'):
database_table_prefix (wallabag_):
mailer_transport (smtp):
mailer_host (127.0.0.1):
mailer_user (null):
mailer_password (null):
locale (en): fr
secret (ovmpmAWXRCabNlMgzlzFXDYmCFfzGv):
twofactor_auth (true): false
twofactor_sender (no-reply@wallabag.org):
fosuser_confirmation (true):
from_email (no-reply@wallabag.org):
database_driver: pdo_mysql
database_host: 127.0.0.1
database_port: null
database_name: wallabag
database_user: wallabag
database_password: Thi$IsNotThePa$$w0rdYoureLo0king4
database_path: null
database_table_prefix: wallabag_
database_socket: null
database_charset: utf8mb4
domain_name: 'https://framabag.org'
mailer_transport: smtp
mailer_host: smtp.framabag.org
mailer_user: no-reply@framabag.org
mailer_password: FramaSkyIsTheBestBrewerInMastodon
locale: fr
secret: AndHisChiliIsAwesome
twofactor_auth: true
twofactor_sender: no-reply@framabag.org
fosuser_registration: true
fosuser_confirmation: true
from_email: no-reply@framabag.org
rss_limit: 50
rabbitmq_host: localhost
rabbitmq_port: 5672
rabbitmq_user: guest
rabbitmq_password: guest
rabbitmq_prefetch_count: 10
redis_scheme: tcp
redis_host: localhost
redis_port: 6379
redis_path: null
redis_password: null
Vous voulez changer un paramètre plus tard ? Tant pis, il faudra tout
réinstaller ! ;-) Blague à part, ces paramètres peuvent se retrouver
dans le dossier d’installation de Wallabag, plus précisément dans le
fichier `app/config/parameters.yml`.
Une dernière commande pour finaliser l’installation du package préparé
précédemment :
php bin/console wallabag:install --env=prod
La réponse attendue :
Et voila ce que vous devrez avoir :
Installing Wallabag...
......@@ -233,18 +280,26 @@ donc créer la configuration à cet endroit :
Reste à remplir ce fichier :
server {
server_name default_server;
server_name domain.tld www.domain.tld;
root /var/www/html/wallabag/web;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
# Si vous utilisez PHP 5 remplacez
# /run/php/php7.0 par /var/run/php5
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
# When you are using symlinks to link the document root to the
# current version of your application, you should pass the real
# application path instead of the path to the symlink to PHP
# FPM.
# Otherwise, PHP's OPcache may not properly detect changes to
# your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126
# for more information).
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
# Prevents URIs that include the front controller. This will 404:
......@@ -252,9 +307,15 @@ Reste à remplir ce fichier :
# Remove the internal directive to allow URIs like this
internal;
}
error_log /var/log/nginx/wallabag.error.log;
access_log /var/log/nginx/wallabag.access.log;
# return 404 for all other php files not matching the front controller
# this prevents access to other php files you don't want to be accessible.
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/wallabag_error.log;
access_log /var/log/nginx/wallabag_access.log;
}
<div class="alert alert-info">
......@@ -299,19 +360,212 @@ l’interface de l’admin : `Configuration > Créer un compte`
#### Bloquer l’inscription spontanée
Il n’est pas possible de **bloquer l’inscription de nouveaux utilisateurs**
dans l’écran de login pour l’instant. Le problème est [connu des développeurs][5]
et sera bientôt intégré. Une solution en attendant est de bloquer
l’enregistrement via Nginx en ajoutant dans le fichier :
location ^~ /register {
deny all;
return 403;
}
Il est désormais possible de bloquer l'inscription de nouveaux utilisateur! Ce
N'était pas le cas dans les versions précédentes.
Pour désactiver les nouveaux utilisateurs, il faudra modifier le paramètre
`fosuser_registration` à `false` au lieu de `true` dans le fichier `app/config/parameters.yml`.
Une fois la modification effectuée, videz le cache de Wallabag pour prendre en
compte la modification :
sudo -u www-data /bin/sh -c "php bin/console cache:clear -e prod"
#### Mettre en place les traitements asynchrones
Vous avez installé Wallabag, il tourne parfaitement mais manque de chance, vous
ou l'un de vos utilisteurs n'arrive pas à importer ses milliers d'articles provenant
de Pocket ?
Vous avez deux solutions. Soit vous désactiver l'import, mais ça, c'est pas très
sportif. Soit vous mettez des tâches asynchrones. Mais ma chère Maïté, qu'est-ce
donc ces tâches asynchrones ?
Oh mais Micheline, grâce à ses tâches, on va pouvoir importer les articles, non pas
d'un bloc de foie gras confit à l'armagnac, mais petit à petit, histoire de ne pas
saturer le serveur. Et pour cela, rien de tel qu'un bon petit RabbitMQ aux pruneaux
d'Agen pour réaliser tout cela.
Et pour commencer, on va l'installer sur le serveur depuis le dépôt de RabbitMQ
plus à jour que ceux de Debian :
wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
apt-key add rabbitmq-signing-key-public.asc
apt-get update
apt install rabbitmq-server
La configuration par défaut de Wallabag est capable de se connecter directement
sur RabbitMQ, de ce fait, il n'y a rien à faire. Cependant, si RabbitMQ est déjà
installé et configuré différement, il vous faudra modifier le fichier `app/config/parameters.yml`
en conséquence.
Une fois la configuration effectuée, il est temps de mettre en place les services
systemd. Non, pas le magasine Micheline, les services permettant de lancer nos
tâches asynchrones.
On va donc créer plusieurs scripts systemd en tant que root, et pour commencer,
celui permettant d'importer ses favoris issus de Chrome.
Pour commencer, créez le script avec `vi /etc/systemd/system/wallabag-chrome.service`.
Et collez le contenu suivant:
[Unit]
Description=wallabag-import-chrome
After=rabbitmq-server.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/html/wallabag
ExecStart=/usr/bin/php bin/console rabbitmq:consumer -e=prod import_chrome -w
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
Pour Firefox, `vi /etc/systemd/system/wallabag-firefox.service` :
[Unit]
Description=wallabag-import-firefox
After=rabbitmq-server.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/html/wallabag
ExecStart=/usr/bin/php bin/console rabbitmq:consumer -e=prod import_firefox -w
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
Pour Instapaper, `vi /etc/systemd/system/wallabag-instapaper.service` :
[Unit]
Description=wallabag-import-instapaper
After=rabbitmq-server.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/html/wallabag
ExecStart=/usr/bin/php bin/console rabbitmq:consumer -e=prod import_instapaper -w
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
Pour Pocket, `vi /etc/systemd/system/wallabag-pocket.service` :
[Unit]
Description=wallabag-import-pocket
After=rabbitmq-server.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/html/wallabag
ExecStart=/usr/bin/php bin/console rabbitmq:consumer -e=prod import_pocket -w
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
Pour readability, `vi /etc/systemd/system/wallabag-pocket.service` :
[Unit]
Description=wallabag-import-readability
After=rabbitmq-server.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/html/wallabag
ExecStart=/usr/bin/php bin/console rabbitmq:consumer -e=prod import_readability -w
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
Pour Wallabag v1, `vi /etc/systemd/system/wallabag-wallabagv1.service` :
[Unit]
Description=wallabag-import-wallabagv1
After=rabbitmq-server.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/html/wallabag
ExecStart=/usr/bin/php bin/console rabbitmq:consumer -e=prod import_wallabag_v1 -w
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
Pour Wallabag v2, `vi /etc/systemd/system/wallabag-wallabagv1.service` :
[Unit]
Description=wallabag-import-wallabagv2
After=rabbitmq-server.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/html/wallabag
ExecStart=/usr/bin/php bin/console rabbitmq:consumer -e=prod import_wallabag_v2 -w
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
Les services étant créées, on va demander à systemd de recharger sa liste de
services.
systemctl daemon-reload
Puis on active les services que l'on vient de créer.
systemctl enable wallabag-*
Et pour finir, on les démarre.
systemctl start wallabag-*
One more thing, les services sont actifs, maintenant, il faut indiquer à Wallabag
d'utiliser RabbitMq. Connectez-vous avec l'administrateur Wallabag, allez dans
Configuration interne, Import et activez RabbitMQ en mettant 1 dans le champ correspondant.
N'oubliez pas d'appliquer, et vous pourrez enfin réussir vos imports en toute
sérénité.
![](images/wallabag/Wallabag-asynchrone.png)
#### Problème de sessions expirées avec LXC
Si vous utilisez LXC pour gérer vos machines virtuelles, vous risquez d'obtenir
des messages d'erreur dans les logs. C'est un bug[6] référencé chez Debian qui est
toujours ouvert. Pour le contourner, il faut désactiver le service et le lancer
par cron, sans passer par systemd.
Pour désactiver le service :
systemctl disable phpsessionclean.timer ; systemctl stop phpsessionclean.timer
Modifiez ensuite le fichier /etc/cron.d/php
##09,39 * * * * root [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi
09,39 * * * * root [ -x /usr/lib/php/sessionclean ] && /usr/lib/php/sessionclean
#### Mettre à jour wallabag
Il vous suffit de reprendre les dernières sources et de les recompiler avec composer.
Il vous suffit de reprendre les dernières sources et de les recompiler avec `make update`.
Reprenez le chapitre « Semer » et procédez à l’installation, en reprenant
la base de données existante (faites un backup à minima de votre base
de données avant !
......@@ -321,4 +575,5 @@ Comme on dit de l’autre côté de la Manche, *Better safe than sorry* :-) ).
[2]: https://framabag.org/
[3]: https://framabag.org/cquoi/#/
[4]: http://doc.wallabag.org/fr/master/user/installation.html
[5]: https://github.com/wallabag/wallabag/issues/1873
\ No newline at end of file
[5]: https://github.com/wallabag/wallabag/issues/1873
[6]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=869182
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment