Commit 5858b40b authored by JosephK's avatar JosephK
Browse files

Shaarli, Sympa, Turtl

parent 65f8eb79
Pipeline #18383 passed with stages
in 1 minute and 7 seconds
......@@ -16,14 +16,17 @@
* [Framadrop / Lufi](cultiver-son-jardin/lufi.md)
* [Framagit / Gitlab](cultiver-son-jardin/gitlab.md)
* [Framalink / LSTU](cultiver-son-jardin/lstu.md)
* [Framaliste / Sympa](cultiver-son-jardin/sympa.md)
* [Framaestro](cultiver-son-jardin/framaestro.md)
* [Framemo / Scrumblr](cultiver-son-jardin/scrumblr.md)
* [Framindmap / Wisemapping](cultiver-son-jardin/wisemapping.md)
* [Framinetest / Minetest](cultiver-son-jardin/minetest.md)
* [Framanotes / Turtl](cultiver-son-jardin/turtl.md)
* [Framapic / Lutim](cultiver-son-jardin/lutim.md)
* [Framateam / Mattermost](cultiver-son-jardin/gitlab.md)
* [Framavectoriel / SVG-Edit](cultiver-son-jardin/svg-edit.md)
* [Framavox / Loomio](cultiver-son-jardin/loomio.md)
* [MyFrama / Shaarli](cultiver-son-jardin/shaarli.md)
* [Cabane à outils](cabane-a-outils/README.md)
......
......@@ -115,14 +115,13 @@
<p><b>Lstu</b></p>
</a>
</div>
<!--
<div class="col-md-3 col-sm-6">
<a href="sympa.html" class="btn btn-lg btn-block btn-default">
<p><i class="fa fa-2x fa-group" aria-hidden="true"></i></p>
<p><b class="violet">Frama</b><b class="vert">listes</b></p>
<p><b>Sympa</b></p>
</a>
</div>-->
</div>
<div class="col-md-3 col-sm-6">
<a href="framaestro.html" class="btn btn-lg btn-block btn-default">
<p><i class="fa fa-2x fa-magic" aria-hidden="true"></i></p>
......@@ -150,13 +149,14 @@
<p><b>Minetest</b></p>
</a>
</div>
<!--<div class="col-md-3 col-sm-6">
<div class="col-md-3 col-sm-6">
<a href="turtl.html" class="btn btn-lg btn-block btn-default">
<p><i class="fa fa-2x fa-sticky-note" aria-hidden="true"></i></p>
<p><b class="violet">Frama</b><b class="vert">notes</b></p>
<p><b>Trutl</b></p>
</a>
</div>
<!--
<div class="col-md-3 col-sm-6">
<a href="mastodon.html" class="btn btn-lg btn-block btn-default">
<p><i class="fa fa-2x fa-retweet" aria-hidden="true"></i></p>
......@@ -223,11 +223,11 @@
<p><b>Loomio</b></p>
</a>
</div>
<!--<div class="col-md-3 col-sm-6">
<div class="col-md-3 col-sm-6">
<a href="shaarli.html" class="btn btn-lg btn-block btn-default">
<p><i class="fa fa-2x fa-star" aria-hidden="true"></i></p>
<p><b class="violet">My</b><b class="vert">Frama</b></p>
<p><b>Shaarli</b></p>
</a>
</div>-->
</div>
</div>
\ No newline at end of file
# Installation de Shaarli
[Shaarli][1] est un logiciel libre qui permet, entre autre, de conserver
en ligne ses marque-pages et de les partager.
Il est initialement développé par [Sébastien Sauvage][2] et repris par
la communauté Shaarli.
![](images/shaarli/shaarli.png)
Nous proposons ce logiciel comme service en ligne sur [MyFrama][3].
Il est extrêmement simple à installer sur un serveur (même mutualisé)
et peu gourmand en ressources car il ne requiert aucune base de données.
![](images/shaarli/myframa.jpg)
Voici un tutoriel pour vous aider à l’installer sur votre serveur.
<div class="alert alert-info">
Dans la suite de ce tutoriel, nous supposerons que vous avez déjà fait
pointer votre nom de domaine sur votre serveur auprès de votre
<a href="https://fr.wikipedia.org/wiki/Bureau_d%27enregistrement">registraire</a>
et que vous disposez d’un serveur web et de PHP en version supérieure à 5.2.6.
</div>
## Installation
### 1 - Planter
![](images/icons/bonzai.png)
Téléchargez les fichiers de la dernière version sur le [dépôt Github officiel][4]
(bouton vert « Clone or Download » puis « Download ZIP » à droite ou
bien en ligne de commande `git clone https://github.com/shaarli/Shaarli.git`).
Décompressez l’archive et copiez le tout sur votre serveur web.
Pour utiliser le logiciel, il suffit de vous rendre sur
`http://votre-site.org/Shaarli-master/` et de suivre la procédure
d’installation (vous pouvez évidemment renommer le dossier) :
![](images/shaarli/shaarli-install.png)
1. choisissez votre nom d’utilisateur
2. votre mot de passe
3. votre fuseau horaire
4. le titre du site
<div class="alert alert-warning">
Les dossiers <code>Shaarli-master/cache</code>, <code>Shaarli-master/data</code>,
<code>Shaarli-master/pagecache</code> et <code>Shaarli-master/tmp</code>
et doivent être accessibles en écriture par Shaarli.
Il est aussi important que le serveur soit configuré pour autoriser les sessions.
</div>
![](images/shaarli/shaarli-home.png)
### 2 - Tailler et désherber
![](images/icons/tailler.png)
Par défaut, le logiciel est uniquement en anglais. Pour remédier à ça,
nous avons développé un plugin pour l’internationaliser ainsi qu’un template adapté.
Pour les installer, [téléchargez les fichiers du dépôt git de MyFrama][5].
Copiez les dossiers `/shaarli/plugin/i18n` et `/shaarli/tpl/frama` de
MyFrama à l’identique sur votre instance de Shaarli.
Vous pouvez aussi copier le plugin de gestion avancée des tags
`/shaarli/plugin/tags_advanced` qui permet d'afficher ses tags préférés
sur la page d’accueil et de les attribuer automatiquement à vos liens
grâce aux filtres personnalisés.
Le fichier `/shaarli/plugin/tags_advanced/example.php` doit être renommé,
accessible en écriture et déplacé dans `/data/tags_advanced.php`.
Éditez ensuite le fichier `data/config.php` et remplacez les lignes
$GLOBALS['config']['RAINTPL_TPL'] = 'tpl/';
et
$GLOBALS['config']['ENABLED_PLUGINS'] = array (
0 => 'qrcode',
);
par
$GLOBALS['config']['RAINTPL_TPL'] = 'tpl/frama/';
et
$GLOBALS['config']['ENABLED_PLUGINS'] = array (
0 => 'i18n',
1 => 'tags_advanced',
2 => 'qrcode',
);
Les fichiers de langue de Shaarli et des plugins compatibles avec `i18n`
se trouvent dans les dossiers `/locale/` respectifs.
![](images/shaarli/shaarli-myframa.png)
### 3 - Bouturer
![](images/icons/semer-pot.png)
Pour aller plus loin, vous pourriez avoir envie de proposer des instances
multiples de Shaarli sur le même modèle que MyFrama.
Pour cela, il suffit de cloner à l’identique [notre dépôt][6] et créer
un dossier `/u/` qui contiendra les dossiers de chaque utilisateur.
Chaque compte sera automatiquement créé depuis la page d’accueil.
Les principaux dossiers de Shaarli sont des liens symboliques relatifs
qui pointent vers `/shaarli/`.
Seuls les dossiers `cache`, `data`, `pagecache`, `tmp` appartiennent
réellement à l’utilisateur.
Ils n’existent volontairement pas dans le dossier `/shaarli/` pour
empêcher la procédure classique d’installation d’être suivie.
Sur MyFrama nous avons ajouté 3 plugins supplémentaires :
1. `framanav` qui sert à ajouter la barre de navigation de Framasoft
2. `recovery` qui permet aux utilisateurs de restaurer eux-même leur
compte en case de perte de mot de passe puisqu’ils ne disposent
pas d’un accès direct au serveur
3. `myframa` qui, d’un côté, assure la glu entre la page d’accueil,
le Shaarli de l’utilisateur et la barre de navigation de Framasoft
et qui, de l'autre, permet de verrouiller certains paramètres que
l’utilisateur ne doit pas modifier au risque de casser son instance
(par exemple, s’il désactive le plugin `i18n`).
Le plugin `myframa` contient un fichier `datastore.php` modèle avec les
liens proposés en exemple pour tout nouveau compte créé.
La configuration par défaut des utilisateurs (et notamment la liste des
plugins actifs), est créée à partir du fichier `index.php` à la racine
qu’il vous faudra probablement adapter.
![](images/shaarli/tree-charlot.jpg)
[1]: https://github.com/shaarli/Shaarli/
[2]: http://sebsauvage.net/
[3]: https://my.framasoft.org
[4]: https://github.com/shaarli/Shaarli.git
[5]: https://framagit.org/framasoft/myframa/repository/archive.zip?ref=master
[6]: https://framagit.org/framasoft/myframa/
\ No newline at end of file
# Installation de Sympa
Ce tutoriel est en cours de rédaction !
Un peu de patience, promis, nous travaillons dessus ;)
L'équipe Framasoft.
\ No newline at end of file
# Installation de Turtl
[Turtl][1] est un logiciel libre distribué sous [licence AGPLv3][2]
qui a pour objectif de fournir un système de notes synchronisables sur
(presque) toutes les plateformes (presque parce l'application iOS n'est
pas encore lancée).
Il s'agit de la solution logicielle qui propulse le service en ligne [Framanotes][3].
<div class="alert alert-info">
Ce guide est prévu pour Debian Stable. À l'heure où nous écrivons ces
mots, il s'agit de Debian 8.6 Jessie.
Nous partons du principe que vous venez d'installer le système,
que celui-ci est à jour et que vous avez déjà installé le serveur web
<a href="http://nginx.org/">Nginx</a>.<br />
Nous considérerons que nous installerons Turtl sous l'utilisateur <code>www-data</code>.
</div>
## Nourrir la terre
![](images/icons/preparer.png)
La partie serveur de Turtl est codée en [Common Lisp][4] et utilise le
moteur de base de données [RethinkDB][5].
Nous allons donc devoir avant tout les installer.
### Common Lisp
Common Lisp possède plusieures implémentations différentes.
Nous utiliserons [Clozure Common Lisp][6] car [Steel Bank Common Lisp][7],
qui a pourtant l'avantage d'être dans les paquets Debian
(sous le petit nom de `sbcl`), pose quelques problèmes avec Turtl.
Installation de Clozure CL :
cd /opt
wget ftp://ftp.clozure.com/pub/release/1.11/ccl-1.11-linuxx86.tar.gz
tar xvf ccl-1.11-linuxx86.tar.gz
cd ccl
cp scripts/ccl64 /usr/bin/ccl
sed -e "s@CCL_DEFAULT_DIRECTORY=/usr/local/src/ccl@CCL_DEFAULT_DIRECTORY=/opt/ccl@" -i /usr/bin/ccl
Nous aurons besoin de quelques paquets du système pour les dépendances de Turtl.
Mais avant cela, nous avons besoin d'ajouter les dépôts `jessie-backports`
sur notre système : une des dépendances n'est pas disponible dans les dépôts stable.
echo "deb http://ftp.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/backports.list
apt-get update
Installons maintenant les dépendances :
apt-get install cl-cffi cl-quicklisp libuv1-dev build-essential
Nous allons maintenant configurer un peu l'environnement de l'utilisateur
`www-data` pour qu'il puisse lancer Turtl sans souci.
Il faut commencer par créer le fichier `~www-data/.ccl-init.lisp`
(`~www-data` signifie « le répertoire personnel de www-data » pour le
système, soit `/var/www` dans une Debian) et y mettre ceci :
#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname))))
(when (probe-file quicklisp-init)
(load quicklisp-init)))
Il faudra aussi créer quelques répertoires et corriger les permissions :
mkdir ~www-data/quicklisp ~www-data/.cache/
chown www-data: ~www-data/quicklisp ~www-data/.cache/ ~www-data/.ccl-init.lisp
Explication : [Quicklisp][8] est un gestionnaire de dépendances pour
Common Lisp. Nous l'avons installé via les paquets du système
(`cl-quicklisp`), nous indiquons que `www-data` doit le charger
lorsqu'il utilise `ccl` et enfin nous créons les dossiers où Quicklisp
va compiler et installer les dépendances.
Initialisons Quicklisp :
su www-data -s /bin/bash
ccl --load /usr/share/cl-quicklisp/quicklisp.lisp
Dans la console Lisp, tapez :
(quicklisp-quickstart:install)
(quit)
Puis, de retour au shell :
echo "(pushnew \"./\" asdf:*central-registry* :test #'equal)" >> ~www-data/.ccl-init.lisp
### RethinkDB
Pour l'installation, nous suivons la procédure de la [documentation officielle][9] :
echo "deb http://download.rethinkdb.com/apt `lsb_release -cs` main" | tee /etc/apt/sources.list.d/rethinkdb.list
wget -qO- https://download.rethinkdb.com/apt/pubkey.gpg | apt-key add -
apt-get update
apt-get install rethinkdb
Créons une instance pour Turtl et lançons-la :
echo "http-port=8091" > /etc/rethinkdb/instances.d/turtl.conf
service rethinkdb restart
Il est toujours bon d'être capable de sauvegarder et restaurer sa base de données.
Installation des dépendances :
apt-get install python-pip
pip install rethinkdb
Création d'une sauvegarde :
rethinkdb dump
Restauration d'une sauvegarde :
rethinkdb restore backup.tar.gz
## Semer
![](images/icons/semer.png)
Créons quelques dossiers nécessaires :
cd /var/www
mkdir turtl/data -p
Passons maintenant à l'installation de Turtl proprement dite :
cd turtl
git clone https://github.com/turtl/api.git
cd api
# Copions le modèle de fichier de configuration
cp config/config.default.lisp config/config.lisp
Voici les principaux paramètres à modifier dans `config/config.lisp` :
# Ne faire écouter le serveur qu'en local
(defvar *server-bind* "127.0.0.1"
# Faire en sorte que les erreurs ne soient pas fatales au serveur
# et ne le fassent pas planter en boucle
(defvar *production-error-handling* t
# Autoriser les requêtes depuis un autre site web (ce sera notre interface web)
# https ou http, c'est selon ce que vous mettrez en place,
# mais il est évident qu'il est mieux de sécuriser les communications
(defvar *enabled-cors-resources* "https://notes.example.org"
# L'adresse de l'API
# https ou http, c'est selon ce que vous mettrez en place,
# mais il est évident qu'il est mieux de sécuriser les communications
(defvar *site-url* "https://api.notes.examples.org"
# Une adresse de contact
(defvar *admin-email* "contact@example.org"
# L'adresse d'envoi de mail
(defvar *email-from* "noreply@example.org"
# L'adresse du serveur SMTP à utiliser pour envoyer les mails
(defvar *smtp-host* "localhost")
# Ne pas envoyer les erreurs
# (utile pour le debug, pas pour la production)
(defvar *display-errors* nil
# La limite de stockage par défaut (en Mio)
(defparameter *default-storage-limit* 100
# Est-ce qu'on offre du stockage en plus à ceux qui invitent des amis ? (en Mio)
(defparameter *storage-invite-credit* 0
# Où stocker les fichiers
(defvar *local-upload* "/var/www/turtl/data"
# L'adresse d'envoi des fichiers
# https ou http, c'est selon ce que vous mettrez en place,
# mais il est évident qu'il est mieux de sécuriser les communications
(defvar *local-upload-url* "https://api.notes.example.org"
Nous pouvons dès lors lancer le service à la main :
ccl --load start.lisp
(Faites Ctrl+C puis `(quit)` pour le couper)
## Arroser
![](images//icons/arroser.png)
Installons un service systemd pour lancer Turtl : cela évite de devoir
laisser un terminal ouvert et permettra de lancer automatiquement Turtl
au démarrage du serveur.
Créez le fichier `/etc/systemd/system/turtl.service` :
[Unit]
Description=Note taking service
Documentation=http://turtl.it
Requires=network.target
Requires=rethinkdb.service
After=network.target
After=rethinkdb.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/turtl/api/
ExecStart=/usr/bin/ccl -Q -b --load start.lisp
[Install]
WantedBy=multi-user.target
Ensuite, pour activer et lancer Turtl :
systemctl daemon-reload
systemctl start turtl
systemctl enable turtl
Normalement, vous retrouverez les logs de votre serveur Turtl dans
`/var/log/syslog`. Pour les consulter :
grep ccl /var/log/syslog
# ou
multitail -e ccl /var/log/syslog
Rendons maintenant notre Turtl accessible depuis l'extérieur grâce à Nginx.
Créez le fichier `/etc/nginx/sites-available/api.notes.example.org.conf` :
upstream turtl {
server 127.0.0.1:8181;
}
client_max_body_size 2m;
server {
listen 80;
listen [::]:80;
#listen 443;
#listen [::]:443;
server_name api.notes.example.org;
access_log /var/log/nginx/notes.example.org-ssl.access.log;
error_log /var/log/nginx/notes.example.org-ssl.error.log;
#if ($scheme = http) {
# return 301 https://$server_name$request_uri;
#}
#ssl on;
#
#ssl_certificate /etc/ssl/private/api.notes.example.org/fullchain.pem;
#ssl_certificate_key /etc/ssl/private/api.notes.example.org/privkey.pem;
#
#ssl_ecdh_curve secp384r1;
#ssl_prefer_server_ciphers on;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # not possible to do exclusive
#ssl_ciphers 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA';
#
#ssl_stapling on;
#resolver 192.168.1.1;
index index.html;
location / {
proxy_set_header Host $host;
proxy_pass http://turtl;
}
}
(tout ce qui est commenté est à décommenter si vous souhaitez utiliser
le protocole sécurisé https, ce que nous recommandons vivement !)
Activez la configuration :
ln -s /etc/nginx/sites-available/api.notes.example.org.conf /etc/nginx/sites-enabled/api.notes.example.org.conf
Vérifiez qu'il n'y a pas d'erreur et rechargez Nginx :
nginx -t && nginx -s reload
## Regarder pousser
![](images/icons/pailler.png)
Avec tout ce que nous avons fait jusque-là, vous avez un serveur Turtl
prêt à être utilisé avec les [applications][10].
Mais nous nous sommes rendu compte que les différentes applications ne
sont qu'une seule et même base de code en Javascript empaqueté selon les plateformes.
Nous avons donc tenté de mettre tout ce code Javascript sur le web et ça
fonctionne : on peut s'en servir comme d'un client web !
Tout du moins, ça fonctionne parfaitement bien avec Chrome et Chromium,
il y a quelques bugs graphiques pas trop gênants avec Firefox et cela
ne semble pas fonctionner avec IE ou Edge.
Mettons donc en place cette interface web.
Nous aurons besoin de quelques paquets :
apt-get install nodejs npm
ln -s /usr/bin/nodejs /usr/bin/node
Installons cette interface :
cd /var/www/turtl/
git clone https://github.com/turtl/js.git www
cd www
npm install
# Copions le modèle de fichier de configuration
cp config/config.js.default config/config.js
Il y a un peu de configuration à faire dans `config/config.js` :
# L'adresse du serveur installé précédemment
# https ou http, c'est selon ce que vous mettrez en place,
# mais il est évident qu'il est mieux de sécuriser les communications
api_url: 'https://api.notes.examples.org',
# L'adresse à laquelle sera accessible notre client web
# https ou http, c'est selon ce que vous mettrez en place,
# mais il est évident qu'il est mieux de sécuriser les communications
site_url: 'https://notes.example.org',
Après cela, il n'y a plus qu'à mettre la dernière touche :
make minify
On corrige les permissions du dossier :
chown -R www-data: /var/www/turtl/
Et enfin, nous créons la configuration Nginx `/etc/nginx/sites-available/notes.example.org` :
server {
listen 80;
listen [::]:80;
#listen 443;
#listen [::]:443;
server_name notes.example.org;
access_log /var/log/nginx/notes.example.org-ssl.access.log;
error_log /var/log/nginx/notes.example.org-ssl.error.log;
#if ($scheme = http) {
# return 301 https://$server_name$request_uri;
#}
#
#ssl on;
#
#ssl_certificate /etc/ssl/private/notes.example.org/fullchain.pem;
#ssl_certificate_key /etc/ssl/private/notes.example.org/privkey.pem;
#
#ssl_ecdh_curve secp384r1;
#ssl_prefer_server_ciphers on;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # not possible to do exclusive
#ssl_ciphers 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA';
#
#ssl_stapling on;
#resolver 192.168.1.1;
root /var/www/turtl/www/;
index index.html;
}
(tout ce qui est commenté est à décommenter si vous souhaitez utiliser
le protocole sécurisé https, ce que nous recommandons vivement !)
Activez la configuration :
ln -s /etc/nginx/sites-available/notes.example.org.conf /etc/nginx/sites-enabled/notes.example.org.conf
Vérifiez qu'il n'y a pas d'erreur (`nginx -t`) et rechargez Nginx :
nginx -t && nginx -s reload
Et voilà, vous avez maintenant un client web disponible sur http://notes.example.org :-)
## Désherber
![](images/icons/tailler.png)
Il arrive que le serveur Turtl plante en boucle, rendant toute
synchronisation impossible. Pour détecter la cause, regarder dans les logs :
grep ccl /var/log/syslog
Si vous voyez une ligne semblable à :
Oct 5 08:45:35 XXXX ccl[11765]: <DEBUG> [1475649935] turtl - bulk sync: :PERSONA :ADD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Oct 5 08:45:35 XXXX ccl[11765]: <ERROR> [1475649935] turtl - wrapping (PROCESS-INCOMING-SYNC): That email is already registered to another persona.
la solution sera fort simple. Si vous avez suivi ce tutoriel, vous avez
normalement installé le module Python pour RethinkDB. Si ce n'est pas le cas :
apt-get install python-pip
pip install rethinkdb
Lancez l'interpréteur Python :
python
Puis, dans l'interpréteur :