Accessibility Tools

- Le blog participatif de bioinformatique francophone depuis 2012 -

Overleaf est le successeur de ShareLaTeX, il résulte de la fusion de l'ancienne version d'Overleaf avec ShareLaTeX.

Il permet d'éditer des documents LaTeX en collaboratif [1].

L'interface se divise en trois parties. Un bandeau pour naviguer dans les fichiers du projet, un éditeur de texte avec coloration syntaxique, et suggestion de commandes LaTeX au fur et à mesure de la saisie, et enfin, un visionneur de pdf pour voir le rendu du code source.

Comment installer Overleaf sur son serveur ?

Overleaf se présente comme un conteneur docker. Je prendrais l'exemple d'une installation sur Debian et distributions GNU/​Linux dérivées avec Nginx et Systemd.

Vous pouvez retrouver la documentation de l'installation sur le dépôt GitHub du projet [2].

Comment installer le conteneur ?

Pour utiliser Overleaf, il faut installer quelques dépendances.

# Cloner le dépôt toolkit
git clone https://github.com/overleaf/toolkit.git ./overleaf-toolkit
cd overleaf-toolkit
# Copier les fichiers de conf
./bin/init

Il vous faut dorénavant modifier la config dans config/variables.env et config/overleaf.rc, pour s'adapter à votre situation et personnaliser l'instance.

Parmis les paramètres important à configurer se trouvent notamment le port d'écoute d'Overleaf.
Si il y a déjà un serveur http sur votre machine, il faudra le changer, car le port 80 est déjà occupé.

# Télécharger et lancer le conteneur
./bin/up

Comment configurer le daemon systemd ?

Si la commande précédente lance overleaf correctement, il est temps de créer un service daemon systemd dans /etc/systemd/system/overleaf.service.

[Unit]
Description=Overleaf Community Edition
[Service]
User=root
WorkingDirectory=/opt/overleaf-toolkit
ExecStart=/opt/overleaf-toolkit/bin/up
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target

Vous pouvez désormais lancer le service avec les commandes systemctl habituelles…

systemctl daemon-reload 
# recharger les fichier de configuration précédemment édités
# deux en une: lancer le service et ajouter ce lancement au démarrage
# automatique lors des reboot
systemctl enable --now overleaf.service
# respectivement stopper, lancer ou relancer le service   
systemctl stop / start / restart overleaf.service 
# verifier l'état du service
systemctl status overleaf.service
# regarder les log émis par le service en continu (utile pour vérifier
# le bon fonctionnement du service).
journalctl -feu overleaf 

Il faut dorénavant installer les paquets LaTeX, avec TeX Live.

docker exec sharelatex tlmgr update --self
# Mise à jour de texlive manager
docker exec sharelatex tlmgr install scheme-full
# Installation complète de texlive

Bon, maintenant, vous pouvez aller vous chercher un café…

… Parce qu'il y a plus de 4000 paquets à installer, et ça va prendre du temps.

Je vous conseille donc d'ouvrir un autre terminal ssh, pour qu'on avance pendant ce temps.

Comment accéder à Overleaf depuis son nom de domaine ?

En principe, vous pouvez déjà accéder à votre install' depuis http://<ADRESSE_IP_DE_VOTRE_SERVEUR>:8877, si tant est que vous ayez ouvert le port ; mais vous conviendrez que ce n'est pas des plus pratiques…

Je vous conseille donc d'ajouter une entrée dans votre DNS qui pointe vers l'IP publique de votre serveur, à partir d'un sous-​domaine, par exemple.

Pour que ce nom de domaine redirige vers le port d'écoute d'Overleaf, nous allons utiliser un proxy Nginx (cela fonctionne de façon similaire avec Apache2 /​ httpd).

Comment configurer Nginx en proxy ?

La configuration du serveur Nginx reprends le même fonctionnement que celle utilisée lors de l'install' de JupyterHub.

sudo apt install nginx
# si vous n'avez pas encore installé nginx sur votre serveur

Elle se passe dans /etc/nginx/sites-available/overleaf.conf [3].

server {
    listen 80;
    server_name sharelatextest.com;
    return 302 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name sharelatextest.com;
    ssl_certificate /etc/letsencrypt/live/sharelatextest.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/sharelatextest.com/privkey.pem;
    ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers   on;
    # used cloudflares ciphers https://github.com/cloudflare/sslconfig/blob/master/conf
    ssl_ciphers                 EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    # config to enable HSTS(HTTP Strict Transport Security) https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security
    # to avoid ssl stripping https://en.wikipedia.org/wiki/SSL_stripping#SSL_stripping	
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
    server_tokens off;
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    client_max_body_size 50M;
    location / {
        proxy_pass http://localhost:8877; # change to whatever host/port the docker container is listening on.
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_read_timeout 3m;
        proxy_send_timeout 3m;
    }
}

Dans cet exemple, on a considéré que votre nom de domaine était sharelatextest​.com, n'oubliez pas de modifier ce paramètre, ainsi que le port dans http://localhost:8877, si vous n'avez pas choisi le même que moi.

Dès lors, il faut faire un lien symbolique dans /​etc/​nginx/​sites-​enabled/​ pour que la configuration précédente soit prise en compte :

ln -s /etc/nginx/sites-available/overleaf.conf /etc/nginx/sites-enabled/overleaf.conf

Enfin, il est nécessaire de relancer nginx, avec les commandes systemd habituelles :

nginx -t
# vérifie la syntaxe du fichier de conf.
systemctl restart nginx.service
# redémare le serveur nginx
systemctl enable --now nginx.service
# si vous voulez autorisé le démarrage automatique de nginx, 
# en même temps que le redémarrage.

Et voilà !

Rendez-​vous dès maintenant sur https://​sharelatextest​.com/​l​a​u​n​c​h​pad pour configurer les identifiants administrateur de votre instance, connectez-​vous, et vous pouvez commencer à rédiger vos documents, et inviter vos collaborateurs à travailler avec vous ;-)…

Malheureusement les nouvelles versions d'Overleaf Community Edition n'intègrent plus le module d'inscription, ça se passe par invitation via l'interface admin. Il doit y avoir un moyen de se bricoler un formulaire, avec la ligne de commande en backend.…

Bonus :

Comment installer Pygmentize pour inclure des morceaux de codes stylés ?

Dans l'instance officielle d'Overleaf [1], il est possible d'utiliser le package >minted pour obtenir une coloration syntaxique du code source inclus plutôt sympathique :

\usepackage{minted}
[...]
\begin{minted}{python}
import this
\end{minted}

Il est possible, pour nous aussi, d'installer le paquets python pygmentize, pour obtenir le même résultat.

docker ps -a # retrouver le nom du conteneur
docker exec -it sharelatex sh 
# entrer dans le conteneur docker en ligne de commande
apt update
apt-get upgrade
apt-get install python3-pip
pip install pygments # installer l'outil pygmentize
# mettre à jour les paquets et installer pygmentize
vim /usr/local/texlive/2022/texmf.cnf
# ouvrir un éditeur de texte pour éditer la conf de pdflatex

Et ajouter la ligne suivante dans /usr/local/texlive/2022/texmf.cnf (dans le conteneur).

shell_escape = t

Plus qu'à relancer le service overleaf, et à vous les coloration syntaxique dans vos pdf LaTeX !

Et voilà, c'est tout pour moi ;-).
Merci beaucoup au relecteurs (ZaZo0o, Pierre Marijon, David Picard, et Yoann) pour leur conseils et suggestions !

Références




Commentaires

Laisser un commentaire

Pour insérer du code dans vos commentaires, utilisez les balises <code> et <\code>.