Browse Source

french README with installation instraction

nas 3 years ago
parent
commit
ae243b702e
1 changed files with 470 additions and 0 deletions
  1. 470
    0
      README_fr.md

+ 470
- 0
README_fr.md View File

@@ -0,0 +1,470 @@
1
+Installer WikiPP
2
+----------------
3
+
4
+### Dépendences
5
+
6
+Le guide d\'installation est relativement bien fait¹ Cependant
7
+l\'emplacement des dépendences est un peu floue :
8
+
9
+-   cppCMS : l\'installation est déjà renseigner [ici](#cppcms)
10
+-   CPPDB : il faut chopper le code et le compiler
11
+
12
+                
13
+                  git clone https://github.com/melpon/cppdb
14
+                  cd cppdb
15
+                  mkdir build
16
+                  cd build
17
+                  cmake ..
18
+                  make
19
+                  sudo make install
20
+                
21
+              
22
+
23
+-   Gettext : est normalement disponible via le gestionnaire de packet
24
+    `apt install gettext`
25
+
26
+### Notes sur l\'installation
27
+
28
+La procédure l\'installation est plutôt bien décrite mais il y une typo
29
+a un endroit, je remet la liste des commandes dans l\'ordre :
30
+
31
+          
32
+            wget https://github.com/cppweb/wikipp.git
33
+            cd wikipp
34
+            mkdir build
35
+                cd build
36
+            cmake ..
37
+            make
38
+            sudo make install
39
+          
40
+        
41
+
42
+De même, il manque la création de l\'utilisateur gérant da base de
43
+donnée, je reprend cette phase en l\'y ajoutant. Les commandes suivantes
44
+sont pour les moteurs mariadb ou mysql; réferes-toi sur le site¹ pour
45
+une base sqlite3 ou postgres. Adaptes la premières commande pour
46
+t\'authentifier avec les droits de créations de base et sur le moteur de
47
+base de données ; dans mon cas `sudo mariadb`, mais il peut s\'agir de
48
+`mysql -u root -p`.
49
+
50
+        
51
+          sudo mariadb
52
+          CREATE DATABASE wikipp;
53
+          CREATE USER wikipp IDENTIFIED BY "mot de passe fort";
54
+          GRANT ALL PRIVILEGES ON wikipp.* TO wikipp ;
55
+        
56
+          
57
+
58
+### Note sur la configuration
59
+
60
+Si tu doutes de l\'emplacement de l\'installation de wikipp, lance la
61
+commande suivante :
62
+
63
+        
64
+          find / -iname wikipp 2>/dev/null
65
+        
66
+          
67
+
68
+Ignore le résultat dans `/usr`, il s\'agit de la base de donnée; dans la
69
+suite je comsidère que ce répertoire est ` /usr/local/share/wikipp`. Une
70
+fois obtenu, nous pouvons finaliser da base de donénes en important la
71
+structure par défaut; souviens toi que je suis sur mariadb, adaptes à
72
+ton moteur :
73
+
74
+        
75
+          sudo mariadb wikipp < /usr/local/share/wikipp/sql/mysql.sql 
76
+        
77
+          
78
+
79
+Sauvegarde le modele de configuration, avant de le modifier (renplace
80
+emacs par ton éditeur texte) :
81
+
82
+        
83
+          cp /usr/local/share/wikipp/sample_config.js  /usr/local/share/wikipp/sample_config.js.example
84
+          emacs /usr/local/share/wikipp/sample_config.js
85
+        
86
+          
87
+
88
+Il faut maintenant décommenter et modifier les lignes; la première
89
+permet de se connecter à la base de données. Dans mon cas :
90
+
91
+        
92
+              // MySQL Sample Connection String
93
+          //
94
+          "connection_string" : "mysql:database=wikipp;user=user wikipp;password=mot de passe fort;@pool_size=16",
95
+          //
96
+        
97
+          
98
+
99
+Il faut ensuite générer une clef privée pour l\'application, en fonction
100
+de la librairie utilisée.
101
+
102
+#### Avec libgcrypt et openssl
103
+
104
+La commande génerera le morceau de configuration a ajouter dans le
105
+fichier de configuration. Executes la commande de manière à pouvoir
106
+copier son résultat ou en le redirigeant dans un fichier (i.e
107
+`$gt;/tmp`)
108
+
109
+        
110
+          cppcms_make_key --hmac sha1 --cbc aes
111
+        
112
+          
113
+
114
+En cherchant les clefs des valeurs renvoyés par cette commande,
115
+j\'obtiens le bloc suivant dans le fichier de configuration, où «CLEF
116
+PRIVÉE » finit les chaines de caractère générées :
117
+
118
+        
119
+          "session" : {
120
+              "expire" : "renew",
121
+              "location" : "client",
122
+              "timeout" : 2592000, // One month 24*3600*30
123
+              "cookies" :  {
124
+                  "prefix" : "wikipp"
125
+              },
126
+              "client" : {
127
+                  "cbc" :"aes",
128
+                  "cbc_key" :"CBC CLEF PRIVÉE",
129
+                  "hmac" :"sha1",
130
+                  "hmac_key" :"HMAC CLEF PRIVÉE"
131
+              }
132
+          }
133
+        
134
+          
135
+
136
+#### Sans libgcrypt et openssl
137
+
138
+La procédure est la même que précédemment, cependant la commande de
139
+génération est la configuration sont différentes :
140
+
141
+        
142
+          "session" : {
143
+              "expire" : "renew",
144
+              "location" : "client",
145
+              "timeout" : 2592000, // One month 24*3600*30
146
+              "cookies" :  {
147
+                  "prefix" : "wikipp"
148
+              },
149
+              "client" : {
150
+                  "hmac" :"sha1",
151
+                  "hmac_key" :"HMAC CLEF PRIVÉE"
152
+              }
153
+          }
154
+        
155
+          
156
+
157
+#### Configuration du socket
158
+
159
+L\'executable de wikipp peut-être atteinds via différents types de
160
+socket; la configuration se fait dans la partie `"service"` de notre
161
+fichier conf.js qu\'on passe en option. On peut utiliser un fichier
162
+socket ou l\'interface réseau interne `127.*.*.*`. Je trouve plus simple
163
+d\'utiliser cette dernière solution, qui est aussi la solution retenue
164
+dans mes autres billets sur nginx.
165
+
166
+        
167
+        "service" : {
168
+          "port" : 8065,
169
+          "api" : "fastcgi",
170
+          "ip" : "127.0.0.89"
171
+        },
172
+        
173
+          
174
+
175
+Depuis ma machine, l\'adresse du wiki sera sur `http://127.0.0.89:8065`.
176
+
177
+#### Configuration du serveur web
178
+
179
+Je me suis basé sur la doc officiel pour configurer le serveur nginx;
180
+pour les autres serveurs, regarde la doc officiel dans les sources.
181
+Sinon c\'est exactement le même bloc, mais avec une redirection vers
182
+l\'interface interne⁴. J\'ai ajouter toute la configuration, avec le
183
+certificat SSL multi-domaine générer par certbot, la redirection de HTTP
184
+vers HTTPS. Des billets dédiés existent pour expliquer spécifiquement
185
+ces configurations; si tu n\'en veux pas, ajoute simplement au bloc
186
+`location ~ ^/wikipp.*$`. Il faut aussi que les fichiers
187
+`/var/log/www/wiki/access.log` et `/var/log/www/wiki/error.log`
188
+existent. Dans le fichie
189
+`/etc/nginx/sites-avalaible/wiki.domain.org.conf`
190
+
191
+        
192
+     server {
193
+         server_name wiki.domain.org;
194
+
195
+         access_log /var/log/www/wiki/access.log;
196
+         error_log /var/log/www/wiki/error.log error;
197
+
198
+         root /var/www/wiki;
199
+
200
+         location ~ ^/wikipp.*$ {
201
+          fastcgi_pass 127.0.0.89:8065;
202
+
203
+          # Setup value of PATH_INFO variable
204
+          fastcgi_split_path_info ^(/wikipp)((?:/.*))?$;
205
+          fastcgi_param  PATH_INFO       $fastcgi_path_info;
206
+
207
+          #
208
+          # You can either use "include fastcgi_params;"
209
+          # or set the variables below manually
210
+          #
211
+
212
+          # All supported CGI variables
213
+          fastcgi_param  SCRIPT_NAME     /wikipp;
214
+          fastcgi_param  QUERY_STRING    $query_string;
215
+          fastcgi_param  REQUEST_METHOD  $request_method;
216
+          fastcgi_param  CONTENT_TYPE    $content_type;
217
+          fastcgi_param  CONTENT_LENGTH  $content_length;
218
+
219
+          fastcgi_param  REQUEST_URI     $request_uri;
220
+          fastcgi_param  DOCUMENT_URI    $document_uri;
221
+          fastcgi_param  DOCUMENT_ROOT   $document_root;
222
+          fastcgi_param  SERVER_PROTOCOL $server_protocol;
223
+          fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
224
+          fastcgi_param  SERVER_SOFTWARE    nginx;
225
+
226
+          fastcgi_param  REMOTE_ADDR        $remote_addr;
227
+          fastcgi_param  REMOTE_PORT        $remote_port;
228
+          fastcgi_param  SERVER_ADDR        $server_addr;
229
+          fastcgi_param  SERVER_PORT        $server_port;
230
+          fastcgi_param  SERVER_NAME        $server_name;
231
+
232
+          # end of server variables
233
+        }
234
+
235
+        listen [::]:443 ssl; # managed by Certbot
236
+        listen 443 ssl; # managed by Certbot
237
+        ssl_certificate /etc/letsencrypt/live/wiki.domain.org/fullchain.pem; # managed by Certbot
238
+        ssl_certificate_key /etc/letsencrypt/live/wiki.domain.org/privkey.pem; # managed by Certbot
239
+
240
+     }server {
241
+         if ($host = wiki.domain.org) {
242
+              return 301 https://$host$request_uri;
243
+         } # managed by Certbot
244
+
245
+         listen 80;
246
+         listen [::]:80;
247
+         server_name wiki.domain.org;
248
+         return 404; # managed by Certbot
249
+     }
250
+        
251
+          
252
+
253
+Après avoir fait un lien symbolique dans `/etc/nginx/sites-enabled/`,
254
+redémarre nginx; avec systemd : `systemctl restart nginx`
255
+
256
+#### Droits d\'utilisations
257
+
258
+Il faut que l\'utilisateur qui execute l\'application ai les droits de
259
+lecture sur le repo, voir d\'écriture sur le fichier socket (s\'il est
260
+utilisé). Je te conseille de créer un utilisateur dédié, membre du group
261
+www-data :
262
+
263
+`adduser wikipp --ingroup www-data --no-create-home`
264
+
265
+Vérifie que le repo soit effectivement lisible pour ce nouvel
266
+utilisateur, sinon va dedans (chez moi `/var/www/wiki`):
267
+
268
+        
269
+          chown -R wikipp /var/www/wiki
270
+          chmod -R u+rwx /var/www/wiki
271
+            
272
+          
273
+
274
+### Tester
275
+
276
+Pour tester, place toi dans le répertoire des sources de wikipp en tant
277
+qu\'utilisateur wikipp, après les avoir compilées, et lance la commande
278
+suivante :
279
+
280
+`wikipp -c config.js `
281
+
282
+Si tu as interdit de s\'identifier en tant que wikipp, utilise su:
283
+
284
+`su -c "wikipp -c config.js"`
285
+
286
+Le site est désormais accessible ! Depuis la même machine :
287
+
288
+`http://127.0.0.89:8065`
289
+
290
+Ou si tu as déclaré ton nom de domaine :
291
+
292
+`http://wiki.domaine.org/wikipp`
293
+
294
+#### Configuration de la racine
295
+
296
+En omettant `wikipp` à la fin de l\'url, on se tape une sale erreur
297
+`403`. Ce qui n\'est pas top. Il suffit simplemet de modifier les
298
+configuration nginx. Remplace la ligne :
299
+
300
+`location ~ ^/wikipp.*$`
301
+
302
+Par :
303
+
304
+`location ~ ^/(?!(favicon\.ico|.*.css|robots\.txt|.*.js)) {`
305
+
306
+Relance nginx, et c\'est bon.
307
+
308
+Au lieu de lancer l\'application à partir du point wikipp, on la lance
309
+toujours, sauf exceptions; ces exceptions étant les feuille de style
310
+(.css), les scripts .js et le fichier pour les crawlers (robots.txt). Ça
311
+ajoute une couche de sécurité; ce qui ne dispense bien sûr pas des
312
+autres.
313
+
314
+`mv /var/www/wiki/conf.js /var/www/wiki/conf.ini`
315
+
316
+Ça pose un problème de sécunité; le fichier de conf est lisible via le
317
+serveur, puisqu\'il est en .js. Je propose le le changer en conf.ini
318
+
319
+#### Wikipp en tant que service
320
+
321
+On va pas lancer wikipp à la main à chaque démarrage de la machine. Le
322
+plus simple est de créer un service; je part lu principe que t\'es sur
323
+systemd, regarde de la doc de ton gestionnaire de service pour adapter.
324
+On va créer un fichier de service; remplace ton éditeur de texte :
325
+
326
+`emacs /etc/systemd/system/wiki.service`
327
+
328
+        
329
+          [Unit]
330
+          Description=WikiPP manager
331
+          After=mysql.service network.target
332
+
333
+          [Service]
334
+          ExecStart=/usr/local/bin/wikipp -c /var/www/wiki/config.ini
335
+          Type=simple
336
+          PIDFile=/run/wikipp.pid
337
+          WorkingDirectory=/var/www/wiki
338
+          User=wikipp
339
+
340
+          [Install]
341
+          WantedBy=multi-user.target
342
+        
343
+          
344
+
345
+Ensuite on donne l\'autorisation et on actualise les daemon :
346
+
347
+        
348
+          chmod +x /etc/systemd/system/wiki.service
349
+          systemctl daemon-reload 
350
+        
351
+          
352
+
353
+Tu peux démarrer le serveur, et tester :
354
+
355
+`sudo systemctl start wiki`
356
+
357
+Et si tu veux que le service se lance automatiquement au démarrage⁵ :
358
+
359
+`sudo systemctl enable wiki`
360
+
361
+#### Autres configurations
362
+
363
+Le guide officiel prévoit d\'autres configuration pour les dictionnaires
364
+de traductions et la connection de la libraire CPPDB. Je n\'en ai pas eu
365
+besoin, sauf pour les langues; le français étant absent par défaut.
366
+
367
+### Messages d\'erreurs
368
+
369
+-   `wikipp, error: system: Socket operation on non-socket (main.cpp:14)`
370
+    : Le socket est mal définit dans le fichier de configuration ou le
371
+    fichier de configuration est mal définit.
372
+-   `Failed to load skin:view, no shared object/dll found` : il manque
373
+    des fichiers de la compilation. Soit la compilation a échouée, soit
374
+    l\'execution n\'a pas eu lieu dans le répertoire des sources.
375
+
376
+La commande `wikipp` permet de lancer le logiciel. Il faut cependant
377
+spécifier `-c` en option, pour le fichier de configuration fournit avec
378
+les sources `config.js`
379
+
380
+### Sources
381
+
382
+-   \[1\][cppcms.com
383
+    install\_wikipp](http://cppcms.com/wikipp/en/page/install_wikipp)
384
+-   \[2\][stackoverflow
385
+    compiler-error-msgfmt-command-not-found](https://stackoverflow.com/questions/9500898/compiler-error-msgfmt-command-not-found)
386
+-   \[3\][matt.scharley.ne socket et
387
+    socat](https://matt.scharley.me/2012/03/debugging-application-interactions-with-socat.html)
388
+-   \[4\][cppcms.com
389
+    cppcms\_tut\_web\_server](http://cppcms.com/wikipp/en/page/cppcms_1x_tut_web_server_config)
390
+-   \[5\][digitalocean.com
391
+    manage-systemd-services-and-units](https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-units)
392
+:::
393
+
394
+::: {#20210311-audio-stream .billet data-tag="audio stream html5"}
395
+Lecteur web de flux audio
396
+-------------------------
397
+
398
+HTML5 introduit des lecteurs média par défaut, capabde ve lire des fluxs
399
+de média. Bien sûr, les navigateurs intègre cette norme de manière
400
+inégale. La balise audio prend les atrributs suivants :
401
+
402
+-   `controls` : affiche les controles
403
+-   `preload` : pré-charge autonmatiquement
404
+-   `autoplay` : lance aucomatiquement de contenu
405
+
406
+La source du flux peu-être précisée en attribut (`src`) ou dans des
407
+sous-éléments de types `<source>`. Il est possible de donner plusieurs
408
+sources; en cas d'échec, le lecteur tentera la suivante. C'est
409
+indispensable pour assurer une compatibilité entre les navigateurs.
410
+Aucun format audio n'est compatible partout pour le moment. Dans
411
+l'exemple suivant, jqai une source ogg ec ure autre en mp3, ce qui
412
+devrait mancher sur Opéra, Firefox, et Chromium.
413
+
414
+`     `
415
+
416
+            <audio controls preload autoplay>
417
+                    <source src="https://server.de.stream/1.mp3" type="audio/mpeg">
418
+                    <source src="https://server.de.stream/1.ogg" type="audio/ogg">
419
+                </audio>
420
+        
421
+:::
422
+
423
+::: {#20210310-vlc-radio .billet data-tag="vlc nginx"}
424
+Faire une webradio avec VLC
425
+---------------------------
426
+
427
+On le dira jamais assez : VLC est magique. Je m\'attarderais pas sur
428
+tout ce que ce petit soft est capable de faire; c\'est très long. Ce qui
429
+nous intéresse ici c\'est sa capacité à être compdètement utilisé dans
430
+la console, et à pouvoir créer un flux audio ou vidéo sur le réseau. Par
431
+exemple, si mon adresse de réseau local est 192.168.1.2, et que je veux
432
+diffuser le fichier radio.mp4 :
433
+
434
+`     `
435
+
436
+    vlc -vvv radio.mp4 --sout "#standard{access=http,mux=ogg,dst=192.168.1.2}"
437
+        
438
+
439
+Pour tester, il est possible d\'ouvrir un flux réseau depuis
440
+l\'interface graphique, et y écrire `http://192.168.1.2`
441
+
442
+Pour faire une webradio, je propose de diffuser le contenu sur une
443
+interface réseau local (loop), et de rediriger les demandes de
444
+connexions externe vers ce flux interne. Pour cela, suit le tuto pour
445
+ajouter un sous-réseau, et créer le fichier de configuration suivant
446
+(ici pour radio\@example.cccp). Lance la cammande précédante, mais
447
+remplace l\'adresse de diffusion par 127.0.0.1.1032:
448
+
449
+`     `
450
+
451
+   server {
452
+        listen 80;
453
+        listen [::]:80;
454
+        server_name radio.example.com;
455
+
456
+        location / {
457
+            proxy_pass http://127.0.0.1:1032/;
458
+        }
459
+    }
460
+        
461
+
462
+Il est tout a fait possuble de faire passer le stream par une connexion
463
+https via nginx.
464
+
465
+Sources :
466
+---------
467
+
468
+-   [wiki.videolan.org RTSP on demand
469
+    streaming](https://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples/#RTSP_on-demand_streaming)
470
+:::

Loading…
Cancel
Save