lstu signifie « Let's Shorten That Url ». C'est un raccourcisseur d'url. Le plus connu étant TinyUrl. Il y a ensuite eu goo.gl par exemple qui mémorise bien gentiment les urls raccourcies. Chaque réseau social a également ce type de service. Dès lors qu'un service raccourci une url, il la connait, c'est sans doute une bonne idée de prendre un peu d'indépendance.

Prendre son indépendance.

C'est ce que propose Framasoft avec son service huit.re « La perle des raccourcisseurs d'url » (ça ne s'invente pas) basé sur lstu justement.

Voyons voir un peu plus en détails comment l'installer. La procédure d'installation de lstu est assez sommaire, elle mérite un complément d'infos.

Je commence par créer un utilisateur lstu histoire que ce ne soit pas root qui fasse tourner le script. C'est aussi mieux de séparer les pouvoirs. Je retirerai son shell à lstu un peu plus tard.

Je suis ensuite la procédure proposée par Luc Didry le développeur de lstu.

Installation de Carton (une sorte de gestionnaire de « paquets » pour perl)

cpan Carton

Comme ce sera une sorte de service web, je décide d'installer la chose dans /var/www. Je crée un répertoire pour l'occasion et je l'attribue à lstu. Je peux ensuite y cloner le repository git et installer lstu comme indiqué ci-dessous.

git clone https://git.framasoft.org/luc/lstu.git
cd lstu
carton install
cp lstu.conf.template lstu.conf
vim lstu.conf 

Avant de lancer le script, je passe en revue le fichier de configuration afin de l'adapter à mes besoins et mes paramètres. Il reste ensuite à « lancer le script » avec la commande suivante.

carton exec hypnotoad script/lstu

lstu fonctionne localement. Le tuto officiel, s'arrête plus ou moins là.

— Oui mais ce que je veux c'est que le service soit dispo à l'adresse example.org et pas en 127.0.0.1:8080 !

Pour ce faire, il faut configurer apache (ou nginx si tu préfères mais dans la suite, ça parle de apache) pour qu'il fasse le lien entre le « service web » et l'application perl qui tourne derrière. Il faut donc lier le service avec le nom de domaine et le rendre disponible sur le port 80 en configurant le reverse proxy.

Mise en place du reverse proxy

Supposons qu'il y a déjà un serveur web fonctionnel sur le machine et que ce soit Apache2.

Avant toute chose, rendre les modules mod_proxy et mod_proxy_http disponibles afin que le serveur web puisse jouer ce rôle de reverse proxy c'est-à-dire permettre de rediriger une requête web vers un service local (ou interne). Pour rendre les modules dispo, cette commande suffit

a2enmod proxy_http

Il faut ensuite configurer le virtual host correspondant au nom de domaine que l'on veut utiliser pour rediriger le service. Pour ce faire, ajoutez un fichier example.org.conf dans /etc/apache2/sites-available à l'allure suivante (en passant, n'oubliez pas de rediriger le nom de domaine vers l'IP du serveur hébergeant le service lstu):

<VirtualHost *:80>
ServerName http://example.org
ServerAdmin webmaster@elsewhere

ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080
ProxyPassReverse / http:/example.org

LogLevel info
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

# Local reverse proxy authorization override                                  
# Most unix distribution deny proxy by default                                
<Proxy http://127.0.0.1:8080/*>
    Order deny,allow                                                          
    Allow from all                                                            
</Proxy>
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Après avoir demandé à apache de tenir compte de ce nouveau site (via a2ensite example.org), reloader le serveur.

Lancement via systemd

Je ne reprends pas ici la manière de faire pour permettre de lancer un script au démarrage à la Sys V puisque le futur semble être systemd (un peu de doc et de pages de manuel comme mise en bouche ou pour les détails un peu plus tard). Avec systemd, il faut ajouter un fichier lstu.service dans /lib/systemd/system.

Ce fichier aura la forme suivante:

[Unit]
Description=lstu, Let's Shorten That Url
Documentation=https://github.com/ldidry/lstu

[Service]
User=lstu
Type=forking
WorkingDirectory=/var/www/example.org
ExecStart=/usr/local/bin/carton exec hypnotoad script/lstu

[Install]
WantedBy=multi-user.target

Ce fichier demande à systemd de lancer lstu. Il reste à demander à systemd de lancer le service au boot de la machine.

systemctl enable /lib/systemd/system/lstu.service

Relooking de la page

Pour changer un peu le style de la page, c'est dans les répertoires templates et public que ça se passe. La mise en page utilise Twitter Bootstrap.

Il suffit de modifier un peu le fichier templates/layouts/default.html.ep et l'on obtient un résultat déjà très concluant.

Pour tester le service, c'est là esi.link.
Quant à moi, il me reste à retirer le shell de l'utilisateur lstu.


Et à la fin de la rédaction de cette page, je viens de tomber sur ce lien un peu plus détaillé également.

Crédit photo chez DeviantArt par EastMonke. Un bon gros lien bien gros, bien gras qui devient un joli petit lien.