143 lines
5.3 KiB
Markdown
143 lines
5.3 KiB
Markdown
# Supervisor
|
|
|
|
`Supervisor` est une application Nuxt qui centralise plusieurs besoins d'exploitation dans une interface web unique :
|
|
|
|
- suivi de l'état general d'applications distantes
|
|
- consultation de l'espace disque local et distant
|
|
- visualisation de métriques système de la machine qui execute l'application
|
|
- contrôle et téléchargement de sauvegardes via SSH
|
|
- lecture de messages Discord depuis un canal configure
|
|
|
|
Le nom du package npm visible dans le depot est `disk-monitor`, mais l'interface et la structure du projet exposent clairement le nom `Supervisor`.
|
|
|
|
## Installation du projet
|
|
|
|
### Windows
|
|
Sur Windows, installer WSL2, Ubuntu, Docker et nvm.
|
|
Suivre la documentation suivante :
|
|
https://wiki.malio.fr/bookstack/books/environnement-de-dev/chapter/windows
|
|
|
|
### Linux
|
|
Sur Linux, installer Docker et nvm.
|
|
Suivre la documentation suivante :
|
|
https://wiki.malio.fr/bookstack/books/environnement-de-dev/chapter/linux
|
|
|
|
### Installation du projet
|
|
Une fois les prérequis installés, cloner le dépôt puis installer les dépendances.
|
|
|
|
Les étapes ci-dessous sont celles qui sont réellement supportées par le depot.
|
|
|
|
### 1. Cloner le depot
|
|
|
|
```bash
|
|
git clone gitea@gitea.malio.fr:MALIO-DEV/Supervisor.git
|
|
cd Supervisor
|
|
```
|
|
|
|
### 2. Preparer le fichier d'environnement
|
|
|
|
Le depot fournit un exemple dans `.env.example`.
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
### 3. Renseigner les variables necessaires
|
|
|
|
#### Generation d'une valeur pour `API_SECRET_KEY`
|
|
|
|
Le depot impose la presence d'un secret, mais ne fournit pas de commande officielle pour le générer.
|
|
|
|
Exemple de commande compatible :
|
|
|
|
```bash
|
|
openssl rand -hex 32
|
|
```
|
|
Cette commande sert simplement à produire une valeur aléatoire facile à placer dans `.env`.
|
|
|
|
Les variables visibles dans le depot sont :
|
|
|
|
- `API_SECRET_KEY` : secret attendu par le middleware d'authentification pour toutes les routes `/api/*` sauf `/api/ping`
|
|
- `DISCORD_BOT_TOKEN` : token du bot utilise par endpoint Discord
|
|
- `DISCORD_CHANNEL_ID` : identifiant du canal Discord a lire
|
|
- `BACKUPS_REMOTE_HOST` : hôte SSH cible pour les operations distantes
|
|
- `BACKUPS_REMOTE_ROOT` : dossier racine des sauvegardes sur l'hôte distant
|
|
- `BACKUPS_MAX_FILES` : nombre maximal de fichiers retournés par dossier de backup
|
|
- `DISK_COMMAND_REMOTE` : commande shell utilisée pour la verification disque distante
|
|
- `DISK_COMMAND_LOCAL` : commande shell utilisée pour la verification disque locale
|
|
- `BACKUP_SCRIPT_COMMAND_BACKUP_BDD_RECETTE` : commande a exécuter pour le script "Backup BDD recette"
|
|
- `BACKUP_SCRIPT_COMMAND_CHECK_STATUT_RECETTE` : commande à exécuter pour le script "Check statut recette"
|
|
- `BACKUP_SCRIPT_COMMAND_BACKUP_VAULTWARDEN` : commande à exécuter pour le script "Backup vault warden"
|
|
- `BACKUPS_HOUR` : heure attendue des sauvegardes pour le contrôle de fraicheur
|
|
|
|
### 4. Installer les dépendances
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
### 5. Lancer le serveur de développement
|
|
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
Par défaut, l'application Nuxt sera accessible sûr <http://localhost:3000>.
|
|
|
|
## Configuration necessaire
|
|
|
|
### Authentification API
|
|
|
|
Le middleware `server/middleware/auth.ts` protege toutes les routes `/api/*`, sauf `/api/ping`.
|
|
|
|
Consequence visible :
|
|
|
|
- si `API_SECRET_KEY` est vide, les appels API sont refusés avec `401 Unauthorized`
|
|
- l'application web pose aussi un cookie HTTP-only via `server/middleware/auth-cookie.ts` pour réutiliser ce secret coté navigateur
|
|
|
|
## Securite
|
|
|
|
Le comportement actuel du projet repose sur une hypothèse d'exposition très forte.
|
|
|
|
- `server/middleware/auth-cookie.ts` pose automatiquement le cookie `api_auth_token` à tout visiteur qui charge l'interface web
|
|
- ce cookie permet ensuite d'accéder aux routes `/api/*` protégées par `API_SECRET_KEY`
|
|
- il n'existe pas de login utilisateur ni de contrôle d'identité distinct dans le dépôt
|
|
|
|
Conséquence :
|
|
|
|
- `Supervisor` doit être déployé uniquement sur un réseau de confiance, derrière un VPN, une restriction d'IP, un proxy d'authentification ou un autre contrôle d'accès externe
|
|
- si l'application est exposée publiquement sans protection supplémentaire, ce mécanisme ne constitue pas une authentification suffisante
|
|
|
|
### SSH pour les backups
|
|
|
|
Les fonctionnalités de backup utilisent `ssh` avec les options `BatchMode=yes` et `ConnectTimeout=5` dans `server/utils/ssh.ts`. Cela implique un accès sans saisie interactive de mot de passe.
|
|
|
|
Elements a preparer cote SSH :
|
|
|
|
- une cle privée disponible sur la machine qui execute `Supervisor`
|
|
- une clé ssh pour les différentes machines cibles, si necessaire pour les différents usages (backup BDD, backup Vault warden, check statut recette)
|
|
|
|
Le depot ne fixe pas de noms de fichiers de clés SSH ni de chemin obligatoire. Les noms exacts ne sont donc pas vérifiables dans le code.
|
|
|
|
## Commandes utiles
|
|
|
|
Commandes déclarées dans `package.json` :
|
|
|
|
```bash
|
|
npm run dev
|
|
npm run build
|
|
npm run generate
|
|
npm run preview
|
|
npm run lint
|
|
npm run lint:fix
|
|
```
|
|
|
|
Usage :
|
|
|
|
- `npm run dev` : lance l'application en développement
|
|
- `npm run build` : construit l'application pour la production
|
|
- `npm run generate` : généré une sortie statique si ce mode est compatible avec votre usage
|
|
- `npm run preview` : prévisualisé le build Nuxt
|
|
- `npm run lint` : execute ESLint
|
|
- `npm run lint:fix` : applique les corrections ESLint automatiques : collecte périodique CPU, mémoire et réseau
|