Présentation

Amber est un framework web écrit en Crystal.

Le but de cette page est d’expliquer comment déployer un site web crée à l’aide d’Amber en quelques étapes :

  1. création de la base de données
  2. configuration de la version production de notre application
  3. compilation d’Amber et de notre application
  4. déploiement des fichiers de l’application sur le serveur
  5. migration de la base de données initiale
  6. création d’un fichier systemd pour lancer notre site
  7. liaison avec Nginx

postgreSQL

Sur le serveur, configurer postgreSQL pour avoir un utilisateur et une base de données.

Prenez note de l’utilisateur, du mot de passe et de la base de données.

Par exemple :

nom de la base : amber_production
utilisateur : amber_user
mot de passe : mot2passe

Configurer notre application web

Une fois la base de données créée, il s’agit de configurer sur notre machine locale les éléments de connexion à celle-ci.

Il suffit de lancer la commande suivante :

amber encrypt production -e vim

Ça lance vim, sous lequel nous pouvons modifier les éléments de connexion :

database_url: postgres://amber_user:mot2passe@localhost:5432/amber_production

À compléter avec les éléments que vous détenez.

Compiler l’application

Sur la machine locale, on va dans le dossier de notre application (par exemple tuto_amber) et on compile notre application et Amber :

cd tuto_amber
crystal build lib/amber/src/amber/cli.cr -o bin/amber --stats
crystal build src/tuto_amber.cr -o bin/tuto_amber --release --stats

Il ne nous reste plus qu’à configurer notre machine distante et déployer l’application.

Déploiement des fichiers sur le serveur

Créez un dossier pour accueillir notre site web, par exemple /srv/www/monsite.

Placez-y les fichiers/dossiers suivants en respectant l’arbre de fichiers :

Déploiement de la base de données

On devrait désormais pouvoir générer le contenu de la base de données.

Pour cela, sur votre machine locale affichez le contenu du fichier suivant : .encryption_key.

Par exemple chez moi j’obtiens : oliBK0J9-HrSK1K8VPTtsMERyj2as1mUZqvPqfKGGeQ.

Ensuite, sur le serveur faites :

AMBER_ENV=production AMBER_ENCRYPTION_KEY="oliBK0J9-HrSK1K8VPTtsMERyj2as1mUZqvPqfKGGeQ" ./bin/amber db migrate

Cela ne devrait prendre que quelques instants.

Configuration du serveur

La machine distante va donc lancer notre application et la fournir sur le web.

Nous allons donc :

Configuration de systemd

Sur le serveur on installe l’application quelque part, par exemple dans /srv/www/monsite.

Puis on crée un fichier /etc/systemd/system/amberframework.service avec :

[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

On remplace surtout les éléments suivants :

suivant le dossier où se trouve notre site, notre clé de déchiffrement et le port sur lequel on veut lancer notre application.

Il suffit ensuite de lancer notre service :

sudo systemctl start amberframework.service

Vous pouvez voir le résultat ainsi (faire Ctrl + C pour arrêter le défilement) :

journalctl -xe -f -u amberframework.service

Configurer Nginx

Étant donné que le service fonctionne sur un port spécifique, nous allons le desservir sur un domaine particulier avec Nginx, en utilisant la fonctionnalité de proxy.

Ouvrez le fichier de configuration de votre Nginx, par exemple /etc/nginx/sites-enabled/default et rajouter l’entrée suivante :

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;
	}
}

Il suffit ensuite de relancer votre serveur web :

sudo systemctl restart nginx