.husky | ||
public | ||
sass | ||
src | ||
views | ||
.babelrc | ||
.editorconfig | ||
.eslintignore | ||
.eslintrc.js | ||
.gitignore | ||
docker-compose.yml.dev | ||
docker-compose.yml.prod | ||
LICENSE | ||
package.json | ||
README.md |
My Music Library
My Music Library est une application Web (que vous pouvez auto-héberger) et un site Web (sur lequel vous pouvez créer un compte), permettant de gérer votre liste des CDs et Vinyles, et de l'utiliser facilement et n'importe où.
Le code source est publié sous licence libre GNU GPL-3.0-or-later.
Auto hébergement
Prérequis
Il existe 2 méthodes d'installation, soit via docker soit en mode standalone.
Pour la méthode docker il vous faut simplement Docker sur votre serveur.
En standalone il vous faudra :
- NodeJS 16.x
- Yarn
- MongoDB
Quelque que soit la méthode la première étape est de cloner le projet :
git clone https://git.darkou.fr/dbroqua/MyMusicLibrary.git
Installation
Docker
Une fois le projet cloné rendez-vous dans son dossier,
cd ./MyMusicLibrary
puis créez le fichier .env
qui contiendra les variables d'environnement nécessaire au bon fonctionnement du projet (voir à la fin pour la liste des variables).
Une fois votre fichier d'environnement créé vous devez copier le bon fichier docker-compose.yml.{dev,prod}
en docker-compose.yml
en fonction de vos choix.
La version .dev
redémarrera à chaque changement d'un fichier .js alors que la version prod
ne redémarrera pas automatiquement si vous éditez un fichier.
Vous pouvez maintenant démarrer votre environnement Docker :
docker-compose up -d
C'est terminé !
Le site est accessible sur http://localhost:PORT.
Standalone
Pour la version standalone je vous conseille de faire un script embarquant les variables d'environnement que vous souhaitez modifier :
#! /bin/bash
export NODE_ENV=development
export DISCOGS_TOKEN=***
# Dev
yarn watch
# Prod
yarn run:all
Rendez le script exécutable :
chmod ./run.sh
C'est terminé !
Le site est accessible sur http://localhost:3001.
Aller plus loin
My Music Library est maintenant accessible en http et sur un port custom (3001 par défaut) de votre serveur.
Nous allons voir comment rendre accessible en https avec un certificat Let's Encrypt. Pour le reverse proxy nous utiliserons NGINX.
Pour la suite je pars du principe que vous êtes un minimum familier avec Nginx et Let's Encrypt et que ces 2 outils sont déjà présents sur votre serveur. De plus vous avez une entrée DNS qui pointe vers votre serveur.
Obtenir le certificat
certbot certonly --nginx -d mml.darkou.fr
Créer le vhost
Pour ma part j'aime bien créer un fichier dans /etc/nginx/sites-available
qui comporte le nom du site, ici par exemple mml.darkou.fr
.
En voici son contenu :
upstream mml-env {
server 0.0.0.0:3001;
}
server {
listen 80;
listen [::]:80;
server_name mml.darkou.fr;
if ($host = mml.darkou.fr) {
return 301 https://$host$request_uri;
}
root /dev/null;
location /.well-known/acme-challenge/ { allow all; }
}
server {
listen 443 ssl http2;
server_name mml.darkou.fr;
root /dev/null;
access_log /var/log/nginx/mml.darkou.fr-access.log;
error_log /var/log/nginx/mml.darkou.fr-error.log;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
client_max_body_size 1m;
location / {
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://mml-env;
}
include conf/ssl.conf;
ssl_certificate /etc/letsencrypt/live/mml.darkou.fr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mml.darkou.fr/privkey.pem; # managed by Certbot
}
Une fois le vhost activé (lien symbolique dans le dossier site-enable) et nginx rechargé votre site sera alors accessible en https.
Fichier .env
Voici la liste des variables configurables :
NODE_ENV # Environnement dans lequel exécuter le projet (development ou production)
PORT # Port sur lequel éxécuter le serveur (par défaut 3001)
MONGODB_URI # Url du serveur mongo (par défaut mongodb://mymusiclibrary-db/mymusiclibrary)
SECRET # Hash utilisé pour pour sauvegardé les dessions (par défaut waemaeMe5ahc6ce1chaeKohKa6Io8Eik)
DISCOGS_TOKEN # Token Discogs (vous devez créer un compte sur discogs afin d'en obtenir un gratuitement)