Déploiement d'une application Crystal en production
7 octobre 2018Introduction
Le mois dernier je parlais de l’installation de PixelFed, un outil récent avec peu de documentation. Aujourd’hui je voudrais installer en production un site web développé avec Amber, un framework du langage Crystal pour développer rapidement des sites webs.
Force est de constater que souvent les tutoriels proposés ne correspondent pas à mes attentes. J’ai décidé de vous livrer aujourd’hui le résultat de mes enquêtes sur le sujet !
Après une présentation du framework Amber, je listerai rapidement les étapes à suivre pour déployer son application sur un serveur.
Un tutoriel plus détaillé pour Amber est disponible sur mon wiki.
Au sujet d’Amber
C’est un framework web. C’est à dire un outil pour simplifier la création de sites Web. Il peut aussi bien faire des sites vitrines que des applications webs ou des API web. Il est donc multifonctions.
Amber est écrit en Crystal, un langage dont la syntaxe est similaire à Ruby, mais dont l’application résultante est plus rapide. Ça dépotte !
Pourquoi je parle de Ruby aussi ? Parce qu’il possède un outil formidable très connu pour créer des sites webs : Ruby On Rails. Déjà très intéressant pour créer des sites webs, il était normal que les développeurs Crystal s’attardent à la création d’un outil similaire : Amber !
J’ai déjà utilisé Ruby On Rails, alors je me suis dis pourquoi pas tenter Amber ? Allons-y !
Déploiement, en bref
Je rappelle qu’un tutoriel plus détaillé pour Amber est disponible sur mon wiki. Et le “Quick Start” d’Amber explique très bien comment créer un projet.
Pour déployer Amber, il faut suivre quelques étapes clés :
- créer une base de données sur le serveur et garder en tête l’identifiant, le mot de passe et la base de donnée associée
- configurer le mode production sur notre machine et garder quelque part la clé située dans le fichier .encryption_key
- compiler sur notre machine l’application en mode --release, mais aussi amber lui même. Si votre machine et le serveur sont d’architectures différentes, pensez à la compilation croisée d’application Crystal (en)
- copie de certains dossiers de votre application vers le serveur
- migration du schéma de la base de données sur le serveur
- création d’un fichier systemd sur le serveur pour le lancement/arrêt du service (votre site web)
- lancement de votre service sur le serveur
- configuration et relance de Nginx en association avec votre site web sur le serveur
Je vous donne ce qui est généralement important ci-dessous.
La configuration de la connexion dans le fichier de production :
database_url: postgres://amber_user:mot2passe@localhost:5432/amber_production
Savoir quels fichiers copier :
- bin/
- config/environments/.production.enc et QUE celui-là (les autres sont inutiles pour la production)
- db/
- public/
- src/locales/
On oublie souvent de déployer la base (en mettant la clé située dans le fichier .encryption_key) :
AMBER_ENV=production AMBER_ENCRYPTION_KEY="oliBK0J9-HrSK1K8VPTtsMERyj2as1mUZqvPqfKGGeQ" ./bin/amber db migrate
Avec un fichier systemd bien rempli, notamment les variables d’environnement :
[Unit]
Description=Lance le framework web Amber pour le site monsite.tld
After=network.target
[Service]
Type=simple
User=http
WorkingDirectory=/srv/www/monsite
Environment="AMBER_ENV=production"
Environment="PORT=3002"
Environment="AMBER_ENCRYPTION_KEY=oliBK0J9-HrSK1K8VPTtsMERyj2as1mUZqvPqfKGGeQ"
ExecStart=/home/www/monsite/bin/tutamber
Restart=always
[Install]
WantedBy=multi-user.target
Et finalement on se mange souvent sur une configuration Nginx pourrie, mais on commence simple :
server {
listen *:80;
listen [::]:80;
server_name monsite.domaine.tld;
root /srv/www/monsite;
index index.html;
proxy_set_header X-Real-IP $remote_addr;
location / {
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:3002;
}
}
Et voilà !
Conclusion
Le déploiement d’une application Amber n’est pas plus compliquée qu’un autre service. Mais il faut avouer qu’elle n’est pas si bien détaillée sur le site même d’Amber. Le projet est encore jeune, tout autant que le langage Crystal lui-même. Avec mon tutoriel vous savez quoi faire : installer des sites Amber partout 😂.
Cependant je vous conseille vivement de tester Crystal, Amber et d’autres éléments de la communauté : c’est facile à écrire, c’est réactif, bien pensé, avec une communauté active, des personnes gentilles qui répondent aux questions, c’est top !