wallabag.md 19.5 KB
Newer Older
1
# Installation de wallabag
JosephK's avatar
JosephK committed
2
3
4

[Wallabag][1] est une application de lecture différée : une page web
vous intéresse mais vous ne pouvez la lire à l’instant ?
5
Sauvegardez-là dans votre wallabag pour la lire plus tard (sur navigateur, application mobile, ou liseuse).
JosephK's avatar
JosephK committed
6

7
Framasoft propose une instance de wallabag nommée bien entendu… [Framabag][2] :-)
JosephK's avatar
JosephK committed
8
Pour une présentation plus complète et en images, n’hésitez pas à jeter
9
un œil à [notre présentation de wallabag][3].
JosephK's avatar
JosephK committed
10

11
N’hésitez pas aussi à consulter la [documentation officielle de wallabag][4],
JosephK's avatar
JosephK committed
12
13
riche en informations !

14
![](images/wallabag/Wallabag.png)
JosephK's avatar
JosephK committed
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

<div class="alert alert-info">
  <b>Deux installations sont possibles</b> : sur un serveur dédié, ou
  sur un hébergement mutualisé.
  Cependant, l’installation en mutualisé n’est pas celle que
  recommandent les développeurs et elle ne sera pas traitée dans ce
  tutoriel (votre serviteur n’a pas d’hébergement de test compatible).
  Ils fournissent néanmoins
  <a href="http://wllbg.org/latest-v2-package">un paquet contenant toutes les dépendances</a>
  facilitant le déploiement pour ceux qui le souhaitent.
</div>

## Prérequis

La machine utilisée pour ce tutoriel est la suivante :

31
*   Linux Debian Stretch
32
*   Être administrateur de la machine ou faire partie du groupe sudo
JosephK's avatar
JosephK committed
33
34
35
36
37
38
39
40
41
42
43

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


## Installation

### 1 - Préparer la terre

44
![](images/icons/preparer.png)
JosephK's avatar
JosephK committed
45

46
Ma chère Maïté, pour préparer la recette du wallabag, il nous faut
JosephK's avatar
JosephK committed
47
48
49
quelques ustensiles !

Tout d’abord, nous allons avoir besoin de git pour récupérer les sources,
50
et de curl qui est utilisé en sous-main par wallabag :
JosephK's avatar
JosephK committed
51

52
53
54
    sudo apt install git curl

Sans oublier aussi make, zip et unzip qui seront utilisés lors de l'installation
55
de wallabag.
56
57
58
59
60
61

    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
JosephK's avatar
JosephK committed
62

63
64
    sudo apt install nginx
    
JosephK's avatar
JosephK committed
65
66
67
68
Wallabag utilise aussi PHP pour fonctionner avec moult modules.
Rassurez-vous, la plupart sont fournis par défaut ! Pour ceux qui
manqueraient potentiellement :

69
    sudo apt-get install php-fpm php-curl php-gd php-tidy php-xml php-mbstring php-bcmath
JosephK's avatar
JosephK committed
70
71
72
73
74
75
76

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
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,
77
en vérifiant quels sont les modules activés dans `/etc/php7.0/mods-available/`.
JosephK's avatar
JosephK committed
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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` :

    php-session
    php-ctype
    php-dom
    php-hash
    php-simplexml
    php-json
    php-gd
    php-mbstring
    php-xml
    php-tidy
    php-iconv
    php-curl
    php-gettext
    php-tokenizer
96
    php-bcmath
JosephK's avatar
JosephK committed
97

98
Afin de se connecter à une base de données, wallabag utilise un des modules PDO.
JosephK's avatar
JosephK committed
99
100
101
102
103
104
105
Vous aurez donc besoin **d’au moins** une extension et d’un système de
bases de données au choix parmi :

    pdo_mysql
    pdo_sqlite
    pdo_pgsql

106
107
108
109
110
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
JosephK's avatar
JosephK committed
111
112
113
114
115
116
117
118
119
120
121
122
123
124

Enfin, pour gérer les dépendances PHP et construire l’application,
il nous faudra Composer :

    curl -s http://getcomposer.org/installer | php
    sudo mv composer.phar /bin/composer
    sudo chown root:root /bin/composer


(respectivement : on récupère l'installeur, on copie dans les exécutables
du système et on vérifie que les droits sont bien d'équerre)

### 2 - Semer

125
![](images/icons/semer.png)
JosephK's avatar
JosephK committed
126
127
128

Maintenant que tout est prêt, la météo est bonne, rentrons dans le vif du sujet !

129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
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
    
148
Une fois la base sécurisée, on va créer la base de données de wallabag et
149
150
151
152
153
154
155
156
157
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,
158
`/var/www/html`) et on récupère les sources de wallabag :
JosephK's avatar
JosephK committed
159
160

    cd /var/www/html
161
    sudo -u www-data git clone https://github.com/wallabag/wallabag.git
JosephK's avatar
JosephK committed
162
163

Une fois que tout est téléchargé, on rentre dans le dossier fraîchement
164
créé, et on lance l'installation dans la pure tradition de Linux :
JosephK's avatar
JosephK committed
165
166

    cd wallabag
167
    sudo -u www-data make install
JosephK's avatar
JosephK committed
168

169
Au lancement de la dernière commande ci-dessus, make va préparer le
170
package wallabag pour qu’il soit utilisable, et vous posera des questions
JosephK's avatar
JosephK committed
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
sur la configuration à générer.
Laissez les options par défaut si vous ne savez pas quoi mettre.

Quelques recommandations tout de même :

*   dans le cas de SQLite, bien mettre l’utilisateur `database_user`
    comme celui de nginx (ici `www-data`), sinon il lui sera difficile d’y accéder.
*   il est préférable (mais pas indispensable) de renseigner un serveur
    mail fonctionnel, car il peut servir pour créer et vérifier les comptes,
    ainsi que pour la double authentification (`twofactor`).

À titre d’exemple, la configuration utilisée dans le cadre de ce tutoriel :

    Creating the "app/config/parameters.yml" file
    Some parameters are missing. Please provide them.
186
187
188
189
190
    database_driver: pdo_mysql
    database_host: 127.0.0.1
    database_port: null
    database_name: wallabag
    database_user: wallabag
191
    database_password: un_mot_de_passe
192
193
194
195
    database_path: null
    database_table_prefix: wallabag_
    database_socket: null
    database_charset: utf8mb4
196
    domain_name: 'https://wallabag.chez-vous.tld'
197
    mailer_transport: smtp
198
199
200
    mailer_host: smtp.wallabag.chez-vous.tld
    mailer_user: no-reply@wallabag.chez-vous.tld
    mailer_password: GrzUPdlZFuQhkYYyUFkMuw9ZQOSZlNhW
201
    locale: fr
202
203
204
    secret: 6YDYeAwERsj0hhTND4mOjfOPRrGp9zzQ
    twofactor_auth: false
    twofactor_sender: no-reply@wallabag.chez-vous.tld
205
206
    fosuser_registration: true
    fosuser_confirmation: true
207
    from_email: no-reply@wallabag.chez-vous.tld
208
209
210
211
212
213
214
215
216
217
218
    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
JosephK's avatar
JosephK committed
219
220
221

Vous voulez changer un paramètre plus tard ? Tant pis, il faudra tout
réinstaller ! ;-) Blague à part, ces paramètres peuvent se retrouver
222
dans le dossier d’installation de wallabag, plus précisément dans le
JosephK's avatar
JosephK committed
223
224
fichier `app/config/parameters.yml`.

225
Et voila ce que vous devrez avoir :
JosephK's avatar
JosephK committed
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262

    Installing Wallabag...

    Step 1 of 5. Checking system requirements.
    +-----------------+--------+----------------+
    | Checked         | Status | Recommendation |
    +-----------------+--------+----------------+
    | PDO Driver      | OK!    |                |
    | curl_exec       | OK!    |                |
    | curl_multi_init | OK!    |                |
    +-----------------+--------+----------------+
    Success! Your system can run Wallabag properly.

    Step 2 of 5. Setting up database.
    Creating database and schema, clearing the cache

    Step 3 of 5. Administration setup.
    Would you like to create a new admin user (recommended) ? (Y/n)Y
    Username (default: wallabag) :
    Password (default: wallabag) : sup3rm0td3p4ssed3r0x0r
    Email:

    Step 4 of 5. Config setup.

    Step 5 of 5. Installing assets.

    Wallabag has been successfully installed.
    Just execute `php bin/console server:run --env=prod` for using wallabag: http://localhost:8000

(n’oubliez pas de renseigner – et mémoriser – le **compte admin** comme
demandé dans l’étape 3)

Enfin pour finaliser et faire bonne mesure, on s’assure que le dossier
`wallabag` fraîchement préparé appartient bien au même utilisateur que Nginx :

    sudo chown -R www-data:www-data /var/www/html/wallabag/

263
Voilà, wallabag est installé ! Vous pouvez le tester avec un serveur
JosephK's avatar
JosephK committed
264
265
266
267
268
local en lançant `php bin/console server:run --env=prod` et en allant
voir sur `http://[ip-de-votre-serveur]:8000` (pour tester uniquement !).

### 3 - Arroser

269
![](images/icons/arroser.png)
JosephK's avatar
JosephK committed
270
271
272
273
274
275
276
277
278
279
280
281
282

La plupart d’entre vous voudront sûrement le mettre derrière un serveur
web (fortement recommandé si ce n’est pas un simple serveur de test !).
Dans notre configuration, il s’agit de Nginx. Les fichiers de configuration
des sites se trouvent dans `/etc/nginx/sites-available`, nous allons
donc créer la configuration à cet endroit :

    cd /etc/nginx/sites-available/
    nano wallabag.mydomain.tld

Reste à remplir ce fichier :

    server {
283
        server_name domain.tld www.domain.tld;
JosephK's avatar
JosephK committed
284
        root /var/www/html/wallabag/web;
285
    
JosephK's avatar
JosephK committed
286
287
288
289
290
        location / {
            # try to serve file directly, fallback to app.php
            try_files $uri /app.php$is_args$args;
        }
        location ~ ^/app\.php(/|$) {
291
292
293
            # Si vous utilisez PHP 5 remplacez
            # /run/php/php7.0 par /var/run/php5
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
JosephK's avatar
JosephK committed
294
295
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
296
297
298
299
300
301
302
            # 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).
JosephK's avatar
JosephK committed
303
304
305
306
307
308
309
            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:
            # http://domain.tld/app.php/some-path
            # Remove the internal directive to allow URIs like this
            internal;
        }
310
311
312
313
314
315
316
317
318
    
        # 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;
JosephK's avatar
JosephK committed
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
    }

<div class="alert alert-info">
  <b>Notes</b> :
  <ul>
    <li>
        Attention ! pour ceux qui ont l’habitude de configurer avec un
        <code>index.html/php</code> à la racine, ici il faut pointer vers le
        sous-dossier <code>web</code> et le fichier <code>app.php</code>.
    </li>
    <li>
        Changez le <code>server_name</code> à votre sauce bien sûr,
        selon les domaines et redirections DNS que vous préférez (nous avons
        mis ici <code>default_server</code> car notre instance de test
        n’avait pas besoin de plus)
    </li>
  </ul>
</div>

Reste à activer cette configuration et redémarrer Nginx pour qu’il la prenne en compte :

    cd /etc/nginx/sites-enabled/
    sudo ln -s ../sites-available/wallabag
    sudo systemctl restart nginx

Plus qu’à aller sur l’adresse souhaitée (à défaut l’adresse IP du serveur)
et vous connecter avec le compte admin précédemment créé.

347
![](images/wallabag/Wallabag-login.png)
JosephK's avatar
JosephK committed
348
349
350
351
352
353
354

Dans l’état actuel, **si vous n’avez pas renseigné de serveur mail**,
les utilisateurs ne pourront pas créer de compte par eux-mêmes.
Deux solutions possibles : intercepter le mail qui ne s’enverra pas dans
votre mailqueue (`sudo mailq`), ou créer vous-même l’utilisateur via
l’interface de l’admin : `Configuration > Créer un compte`

355
![](images/wallabag/Wallabag-quickstart.png)
JosephK's avatar
JosephK committed
356
357
358

### 4 - Pailler

359
![](images/icons/pailler.png)
JosephK's avatar
JosephK committed
360
361
362

#### Bloquer l’inscription spontanée

363
364
365
366
367
368
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`.

369
Une fois la modification effectuée, videz le cache de wallabag pour prendre en
370
371
compte la modification :

372
    sudo -u www-data php bin/console cache:clear -e prod
373
374
375
    
#### Mettre en place les traitements asynchrones

376
Vous avez installé wallabag, il tourne parfaitement mais manque de chance, vous
377
378
379
ou l'un de vos utilisteurs n'arrive pas à importer ses milliers d'articles provenant
de Pocket ?

380
381
382
383
384
Vous avez deux solutions. Soit vous désactivez l'import, mais ça, c'est pas très
sportif. Soit vous mettez des tâches asynchrones. Grâce à ces tâches, on va 
pouvoir importer les articles, non pas d'un bloc, mais petit à petit, histoire 
de ne pas saturer le serveur. Et pour cela, rien de tel que RabbitMQ pour 
réaliser tout cela.
385
386
387
388
389

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
390
391
392
    sudo apt-key add rabbitmq-signing-key-public.asc
    sudo apt-get update
    sudo apt install rabbitmq-server
393
    
394
La configuration par défaut de wallabag est capable de se connecter directement
395
396
397
398
399
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
400
systemd.
401
402
403
404

On va donc créer plusieurs scripts systemd en tant que root, et pour commencer,
celui permettant d'importer ses favoris issus de Chrome.

405
Pour commencer, créez le script avec `nano /etc/systemd/system/wallabag-chrome.service`.
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423

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

424
Pour Firefox, `nano /etc/systemd/system/wallabag-firefox.service` :
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440

    [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
     
441
Pour Instapaper, `nano /etc/systemd/system/wallabag-instapaper.service` :
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457

    [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

458
Pour Pocket, `nano /etc/systemd/system/wallabag-pocket.service` :
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474

    [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
     
475
Pour readability, `nano /etc/systemd/system/wallabag-pocket.service` :
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491

    [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

492
Pour wallabag v1, `nano /etc/systemd/system/wallabag-wallabagv1.service` :
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508

    [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

509
Pour wallabag v2, `nano /etc/systemd/system/wallabag-wallabagv1.service` :
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538

    [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-*
    
539
540
One more thing, les services sont actifs, maintenant, il faut indiquer à wallabag
d'utiliser RabbitMq. Connectez-vous avec l'administrateur wallabag, allez dans
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
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
JosephK's avatar
JosephK committed
562
563
564

#### Mettre à jour wallabag

565
Il vous suffit de reprendre les dernières sources et de les réinstaller avec `make update`.
JosephK's avatar
JosephK committed
566
567
568
569
570
571
572
573
574
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 !
Comme on dit de l’autre côté de la Manche, *Better safe than sorry* :-) ).

 [1]: https://www.wallabag.org
 [2]: https://framabag.org/
 [3]: https://framabag.org/cquoi/#/
 [4]: http://doc.wallabag.org/fr/master/user/installation.html
575
576
 [5]: https://github.com/wallabag/wallabag/issues/1873
 [6]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=869182