From 55a33ea1dbf8f71408c4beb264e56b1cb788b392 Mon Sep 17 00:00:00 2001 From: Damien Broqua Date: Mon, 21 Feb 2022 15:00:55 +0100 Subject: [PATCH] #issue-10 (#12) Co-authored-by: dbroqua Reviewed-on: https://git.darkou.fr/dbroqua/MyMusicLibrary/pulls/12 Co-authored-by: Damien Broqua Co-committed-by: Damien Broqua --- README.md | 182 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 167 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 806e1ae..a01ba34 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,185 @@ # My Music Library -My Music Library est une application Web permettant de lister votre collection de CD ou vinyles. +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 n'importe où. -## Prérequis +Le code source est publié sous licence libre [GNU GPL-3.0-or-later](LICENSE) et est disponible sur [git.darkou.fr](https://git.darkou.fr/dbroqua/MyMusicLibrary). -Pour fonctionner vous devez avoir `docker` d'installer sur votre serveur. +## Utilisation -## Installation +Vous pouvez librement utiliser le service en vous inscrivant sur [https://mml.darkou.fr](https://mml.darkou.fr). -### Préparer la terre +Une fois inscrit vous pourrez saisir vos CDs et Vinyles sur votre espace personnel le tout gratuitement, sans tracker et sans utilisation de vos données personnelles ! -Après avoir cloné le projet il faudra créer un fichier d'environnement nommé `.env` et situé à la racine de projet. +## Auto hébergement -Contenu du fichier : -``` -NODE_ENV=development -DISCOGS_TOKEN=*** +Vous pouvez, si vous le souhaitez héberger l'application sur votre propre serveur. + +### 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 mode standalone il vous faudra : + +- NodeJS 16.x +- Yarn +- MongoDB + +Quelque que soit la méthode, la première étape est de cloner le projet : + +```bash +git clone https://git.darkou.fr/dbroqua/MyMusicLibrary.git ``` -Pour obtenir un token Discogs vous devez simplement vous inscrire sur [Discogs](https://www.discogs.com). Une fois connecté à votre espace Discogs vous pourrez obtenir un token en allant dans le sous-menu [Développeur](https://www.discogs.com/settings/developers). +### Installation -### Semer +#### Docker -Vous pouvez maintenant simplement lancer la commande suivante afin de démarrer le projet en tant que service : +Une fois le projet cloné rendez-vous dans son dossier, +```bash +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](#env-file)). + +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 : + +```bash docker-compose up -d ``` -### Pailler +C'est terminé ! -Une fois le serveur démarré vous pourrez accéder à l'interface web via [http://127.0.0.1:3001](http://127.0.0.1:3001). (ou tout autre port si vous avez défini `PORT` dans le fichier `.env`). +Le site est accessible sur [http://localhost:PORT](http://localhost:PORT). + +#### Standalone + +Pour la version standalone je vous conseille de faire un script embarquant les variables d'environnement que vous souhaitez modifier : + +```bash +#! /bin/bash + +export NODE_ENV=development +export DISCOGS_TOKEN=*** + +# Dev +yarn watch +# Prod +yarn run:all +``` + +Rendez le script exécutable : +```bash +chmod +x ./run.sh +``` + +Puis exécutéz le : +```bash +./run.sh +``` + +C'est terminé ! + +Le site est accessible sur [http://localhost:3001](http://localhost:3001). + +:information_source: Information : Vous pouvez, et vous dreviez, également regarder du côté de `systemd`, `pm2` ou encore `supervisor` pour que le service démarre en même temps que votre serveur. + +### Aller plus loin + +My Music Library est maintenant accessible en http 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](https://letsencrypt.org/fr/). Pour le reverse proxy nous utiliserons [NGINX](https://nginx.org/). + +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 + +```bash +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 {#env-file} + +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) +``` + +## Contributeurs + +- Damien Broqua (développeur principal du projet) +- Brunus (fournisseur d'idées :wink: ) \ No newline at end of file