Release Bell : ne ratez plus aucune publication de release sur Github

Lorsqu'on héberge un certain nombre d'applications "open-source", il est était parfois difficile de suivre le flux de mises à jour des applications. Il s'agit heureusement d'une époque révolue, grâce à l'application Release Bell developpée par l'équipe de cloudron.io

Release-Bell est une application qui permet de recevoir une notification lorsqu'une nouvelle release est publiée sur Github parmi la liste des dépôts que vous avez "étoilé". Elle est  disponible via la plateforme de self-hosting cloudron que j'ai précédement présenté dans un article, mais elle peut également être installée manuellement sur n'importe quel serveur linux disposant de Nodejs et d'un serveur MySQL.

Les notifications sont envoyées par email, mais il n'est absolument pas obligatoire d'activer cette fonctionnalité. Dans mon cas, visualiser la liste des dépôts Github qui m'intéresse, sous la forme d'un flux chronologique suivant la date de publication des releases est largement suffisant.

Dans ce tutoriel, nous allons voir comment installer l'application Release-Bell sur un serveur Debian(8/9) ou Ubuntu (16.04 LTS/18.04 LTS).

Les prérequis

Comme je l'ai dis précédemment, pour installer Release-Bell, vous aurez besoin d'un reverse-proxy (Nginx dans ce tutoriel), de NodeJS (dont la version LTS actuelle est 8.x) et d'un serveur MySQL (ou MariaDB).

Nginx

Pour l'installation d'Nginx, rien de plus simple, sur Ubuntu ou Debian suffit d'utiliser :

sudo apt-get update && sudo apt-get install nginx -y

NodeJS

Pour NodeJS, c'est également relativement simple, puisqu'il suffit d'utiliser les commandes :

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash 
sudo apt-get install -y nodejs

MariaDB

Enfin pour le serveur MySQL (MariaDB server 10.3 dans ce tutoriel) :

# ajout du dépôt APT de MariaDB
sudo bash <(wget -qO - https://downloads.mariadb.com/MariaDB/mariadb_repo_setup) --mariadb-server-version=10.3 --skip-maxscale -y

# installation de MariaDB
sudo apt-get update && sudo apt-get install mariadb-server -y

Je vous recommande de placer les identifiants root du serveur MariaDB dans un fichier .my.cnf placé dans votre home pour pouvoir vous connecter via la commande mysql, sans avoir à copier/coller le mot de passe à chaque opération. Vous trouverez plus d'informations sur le sujet dans cet article de la KnowledgeBase de VirtuBox.

Il vous faudra créer une base de données avant de commencer l'installation de Release-Bell. Pour cela connecter vous en tant que root à votre serveur MariaDB :

mysql

puis créez une nouvelle base de données :

CREATE DATABASE releasebell;

Ajouter ensuite un utilisateur avec les permissions nécessaires pour utiliser cette base de données :

GRANT ALL ON releasebell.* TO 'utilisateur_releasebell'@'localhost' IDENTIFIED BY 'motdepasse';

Terminez en flushant les privilèges pour appliquer les modifications

FLUSH PRIVILEGES;

Puis quittez l'interface en ligne de commande de MySQL :

EXIT;

Installer Release-Bell

Certaines étapes de l'installation de Release-Bell sont peut-être incomplètes ou  différentes de la méthode utilisée par Cloudron. La documentation disponible sur le dépôt de l'application étant minimaliste, j'ai utilisé les mêmes étapes d'installation que d'autres applications NodeJS.

Pour installer Release-Bell, créer un nouvel utilisateur, de préférence sans mot de passe ou login afin d'éviter un éventuel accès non désiré via cet utilisateur :

Mise en place de l'application NodeJS

adduser --disabled-password --disabled-login releasebell

Puis connecter vous en tant que cet utilisateur :

sudo su - releasebell

Créez un répertoire pour héberger l'application :

mkdir releasebell

Puis téléchargez l'application avant de extraire de son archive :

curl -L https://git.cloudron.io/cloudron/releasebell/-/archive/v1.1.0/releasebell-v1.1.0.tar.gz \
| tar zxf - --strip-components 1 -C ./releasebell

Allez dans le répertoire de l'application :

cd releasebell

Et installer des dépendances NodeJS :

npm install

Importation de la structure de la base de données

Le structure de la base de donnéees de releasebell est stockée dans le dossier migrations de l'application. Pour l'importer il suffit donc d'utiliser :

mysql -u utilisateur_releasebell -p releasebell < migrations/initial-schema.sql 

Configurer Release-Bell

La configuration de l'application repose sur deux fichiers, il s'agit de database.json utilisé pour la configuration de la base de données MySQL, et users.json pour les identifiants des utilisateurs de l'application.

Il faut tout d'abord définir les paramètres d'accès à la base de données dans le fichier database.json, qui doit ressembler à l'exemple suivant :

{
    "defaultEnv": "local",
    "local": {
      "host": "localhost",
      "user": "utilisateur_releasebell",
      "password": "motdepasse",
      "database": "releasebell",
      "driver": "mysql",
      "multipleStatements": true
    }
  }

S'il n'existe pas encore, créez le fichier users.json dont le contenu doit ressembler à l'exemple suivant :

[
    {
        "username": "votre_nom_dutilisateur",
        "password": "motdepasse",
        "email": "test@example.com"
    }
]

La configuration de l'application est désormais terminée, l'application peut-être lancée avec la commande :

node index.js

Ajouter un service systemd pour Release-Bell

Vous souhaitez peut-être pouvoir utiliser l'application sans avoir à laisser un terminal ouvert indéfiniment. Pour cela le plus simple sur Debian/Ubuntu est d'ajouter un service systemd pour notre application. On y définira notamment certaines variables nécessaires à la configuration de l'application.

Pour ajouter un service, nous allons créer un ficher .service dans la répertoire /lib/systemd/system/

sudo nano /lib/systemd/system/release_bell.service

Le contenu de ce ficher de configuration doit ressembler à ceci (il vous faudra l'adapter avec vos informations) :

[Unit]
Description=ReleaseBell

[Service]
Type=simple
WorkingDirectory=/home/utilisateur_releasebell/releasebell
User=utilisateur_releasebell
Environment="NODE_ENV=production"
Environment="MAIL_SMTP_SERVER=smtp.example.com"
Environment="MAIL_SMTP_PORT=25"
Environment="MAIL_SMTP_USERNAME=releasebell@example.com"
Environment="MAIL_SMTP_PASSWORD=MotdepasseSMTP"
Environment="MAIL_FROM=releasebell@example.com"
Environment="MAIL_DOMAIN=example.com"
Environment="APP_ORIGIN=example.com"
ExecStart=/usr/bin/node index.js
Restart=always

[Install]
WantedBy=multi-user.target

Activez le service release_bell avec la commande :

sudo systemctl enable release_bell.service

Vous pouvez enfin démarrer le service avec la commande :

sudo service release_bell start

Configurer Nginx

Pour terminer ce tutoriel, voici un exemple de configuration pour utiliser Nginx en tant que reverse-proxy pour notre application :

server {


    server_name release.yourdomain.tld


    access_log /var/log/nginx/release.yourdomain.tld.access.log rt_cache;
    error_log /var/log/nginx/release.yourdomain.tld.error.log;


       location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_redirect      off;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

Je ne vais pas m'étendre sur cette partie de la configuration, mais je vous invite à jeter un oeil à mon article Installer un certificat SSL Let's Encrypt avec acme.sh si vous souhaitez générer un certificat SSL pour sécuriser l'accès à l'application Release-Bell.