MusicTopus/README.md

203 lines
6 KiB
Markdown
Raw Normal View History

# MusicTopus
2022-02-13 13:17:50 +01:00
2022-03-04 08:23:23 +01:00
![MusicTopus](public/img/logo-large.png)
MusicTopus 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ù.
2022-02-15 11:03:20 +01:00
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/MusicTopus).
2022-02-15 11:03:20 +01:00
## Utilisation
2022-02-15 11:03:20 +01:00
Vous pouvez librement utiliser le service en vous inscrivant sur [https://www.musictopus.fr/](https://www.musictopus.fr/).
2022-02-15 11:03:20 +01:00
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 !
2022-02-15 11:03:20 +01:00
## Auto hébergement
2022-02-15 11:03:20 +01:00
Vous pouvez, si vous le souhaitez héberger l'application sur votre propre serveur.
### Prérequis
2022-02-23 07:51:17 +01:00
Il existe 2 méthodes d'installation, soit via docker soit en mode standalone. Peu importe la méthode il vous faudra un compte sur [https://formspree.io/](https://formspree.io/) afin d'avoir une page nous-contacter fonctionnelle.
2022-02-23 07:51:17 +01:00
Pour la méthode docker il ne vous faudra rien de plus que `docker` et `docker-compose`.
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/MusicTopus.git
2022-02-15 11:03:20 +01:00
```
### Installation
2022-02-15 11:03:20 +01:00
#### Docker
2022-02-15 11:03:20 +01:00
Une fois le projet cloné rendez-vous dans son dossier,
2022-02-15 11:03:20 +01:00
```bash
cd ./MusicTopus
2022-02-15 11:03:20 +01:00
```
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
2022-02-15 11:03:20 +01:00
docker-compose up -d
```
C'est terminé !
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
MusicTopus 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 --nginx --agree-tos --redirect --hsts --staple-ocsp --email votre@email.tld -d musictopus.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 `musictopus.fr`.
En voici son contenu :
```
upstream musictopus-proxy {
server 0.0.0.0:3001;
}
server {
listen 80;
listen [::]:80;
server_name musictopus.fr;
if ($host = musictopus.fr) {
return 301 https://$host$request_uri;
}
root /dev/null;
location /.well-known/acme-challenge/ { allow all; }
}
server {
listen 443 ssl http2;
server_name musictopus.fr;
root /srv/MusicTopus/public;
access_log /var/log/nginx/musictopus.fr-access.log;
error_log /var/log/nginx/musictopus.fr-error.log;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
client_max_body_size 1m;
location / {
try_files $uri @proxy;
}
location @proxy {
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://musictopus-proxy;
tcp_nodelay on;
}
error_page 500 501 502 503 504 /500.html;
ssl_certificate /etc/letsencrypt/live/musictopus.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/musictopus.fr/privkey.pem;
add_header Strict-Transport-Security "max-age=31536000" always;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
ssl_trusted_certificate /etc/letsencrypt/live/musictopus.fr/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;
}
```
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://musictopus-db/musictopus)
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)
2022-02-23 07:51:17 +01:00
FORMSPREE_ID # Id du formulaire formspree pour la page "nous-contacter"
```
## Contributeurs
2022-02-15 11:03:20 +01:00
- Damien Broqua (développeur principal du projet)
- Brunus (Logo et fournisseur d'idées :wink: )