Accessibility Tools

- Le blog participatif de bioinformatique francophone depuis 2012 -

Over­leaf est le suc­ces­seur de Sha­re­La­TeX, il résulte de la fusion de l'ancienne ver­sion d'Overleaf avec Sha­re­La­TeX.

Il per­met d'éditer des docu­ments LaTeX en col­la­bo­ra­tif [1].

L'interface se divise en trois par­ties. Un ban­deau pour navi­guer dans les fichiers du pro­jet, un édi­teur de texte avec colo­ra­tion syn­taxique, et sug­ges­tion de com­mandes LaTeX au fur et à mesure de la sai­sie, et enfin, un vision­neur de pdf pour voir le ren­du du code source.

Comment installer Overleaf sur son serveur ?

Over­leaf se pré­sente comme un conte­neur docker. Je pren­drais l'exemple d'une ins­tal­la­tion sur Debian et dis­tri­bu­tions GNU/​Linux déri­vées avec Nginx et Sys­temd.

Vous pou­vez retrou­ver la docu­men­ta­tion de l'installation sur le dépôt GitHub du pro­jet [2].

Comment installer le conteneur ?

Pour uti­li­ser Over­leaf, il faut ins­tal­ler quelques dépen­dances.

# 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é­na­vant modi­fier la config dans config/variables.env et config/overleaf.rc, pour s'adapter à votre situa­tion et per­son­na­li­ser l'instance.

Par­mis les para­mètres impor­tant à confi­gu­rer se trouvent notam­ment le port d'écoute d'Overleaf.
Si il y a déjà un ser­veur http sur votre machine, il fau­dra le chan­ger, car le port 80 est déjà occu­pé.

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

Comment configurer le daemon systemd ?

Si la com­mande pré­cé­dente lance over­leaf cor­rec­te­ment, il est temps de créer un ser­vice dae­mon sys­temd 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 pou­vez désor­mais lan­cer le ser­vice avec les com­mandes sys­temctl habi­tuelles…

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é­na­vant ins­tal­ler 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, main­te­nant, vous pou­vez aller vous cher­cher un café…

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

Je vous conseille donc d'ouvrir un autre ter­mi­nal ssh, pour qu'on avance pen­dant ce temps.

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

En prin­cipe, vous pou­vez déjà accé­der à votre ins­tall' depuis http://<ADRESSE_IP_DE_VOTRE_SERVEUR>:8877, si tant est que vous ayez ouvert le port ; mais vous convien­drez que ce n'est pas des plus pra­tiques…

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

Pour que ce nom de domaine redi­rige vers le port d'écoute d'Overleaf, nous allons uti­li­ser un proxy Nginx (cela fonc­tionne de façon simi­laire avec Apache2 /​ httpd).

Comment configurer Nginx en proxy ?

La confi­gu­ra­tion du ser­veur Nginx reprends le même fonc­tion­ne­ment que celle uti­li­sée lors de l'install' de Jupy­te­rHub.

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 consi­dé­ré que votre nom de domaine était sha​re​la​tex​test​.com, n'oubliez pas de modi­fier ce para­mètre, ain­si que le port dans http://localhost:8877, si vous n'avez pas choi­si le même que moi.

Dès lors, il faut faire un lien sym­bo­lique dans /etc/n­gin­x/­sites-enabled/ pour que la confi­gu­ra­tion 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éces­saire de relan­cer nginx, avec les com­mandes sys­temd habi­tuelles :

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 voi­là !

Ren­dez-vous dès main­te­nant sur https://​sha​re​la​tex​test​.com/​l​a​u​n​c​h​pad pour confi­gu­rer les iden­ti­fiants admi­nis­tra­teur de votre ins­tance, connec­tez-vous, et vous pou­vez com­men­cer à rédi­ger vos docu­ments, et invi­ter vos col­la­bo­ra­teurs à tra­vailler avec vous ;-)…

Mal­heu­reu­se­ment les nou­velles ver­sions d'Overleaf Com­mu­ni­ty Edi­tion n'intègrent plus le module d'inscription, ça se passe par invi­ta­tion via l'interface admin. Il doit y avoir un moyen de se bri­co­ler un for­mu­laire, avec la ligne de com­mande en backend.…

Bonus :

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

Dans l'instance offi­cielle d'Overleaf [1], il est pos­sible d'utiliser le package >min­ted pour obte­nir une colo­ra­tion syn­taxique du code source inclus plu­tôt sym­pa­thique :

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

Il est pos­sible, pour nous aus­si, d'installer le paquets python pyg­men­tize, pour obte­nir le même résul­tat.

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 ajou­ter la ligne sui­vante dans /usr/local/texlive/2022/texmf.cnf (dans le conte­neur).

shell_escape = t

Plus qu'à relan­cer le ser­vice over­leaf, et à vous les colo­ra­tion syn­taxique dans vos pdf LaTeX !

Et voi­là, c'est tout pour moi ;-).
Mer­ci beau­coup au relec­teurs (ZaZo0o, Pierre Mari­jon, David Picard, et Yoann) pour leur conseils et sug­ges­tions !

Références

Vous avez aimé ? Dites-le nous !

Moyenne : 0 /​ 5. Nb de votes : 0

Pas encore de vote pour cet article.

We are sor­ry that this post was not use­ful for you !

Let us improve this post !

Tell us how we can improve this post ?




Commentaires

Laisser un commentaire

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