# IliaCloud

> **"Il y a Claude, il y a Cloud"**
>
> Plateforme de gestion de serveurs avec agent IA, monitoring temps reel, Docker, backups, SSL, et bien plus — le tout depuis ton navigateur.

---

## A propos

IliaCloud est une **PWA mobile-first** qui te donne un acces complet a tes serveurs distants depuis n'importe ou. Dashboard temps reel, gestion Docker, monitoring uptime/SSL, backups automatiques, alertes intelligentes, chat IA — tout en une seule interface.

### Pourquoi IliaCloud ?

Tu es en deplacement et ton serveur plante. Tu sors ton telephone, tu ouvres IliaCloud :

- **Dashboard** — CPU, RAM, disque, load en temps reel + historique graphique
- **Docker** — Containers, stacks, stats, logs streaming en direct, actions
- **Monitoring** — Uptime URLs, certificats SSL, surveillance HTTP 5xx
- **Alertes** — Push + Discord/Slack/Telegram avec recovery automatique
- **Backups** — PostgreSQL/MySQL, auto-planifies, restauration en un clic
- **Chat IA** — 6 providers (Claude, GPT-4, Gemini, DeepSeek, Mistral, Grok)
- **Terminal SSH** — Terminal interactif dans le navigateur via xterm.js
- **Status page** — Page publique personnalisable (comme statuspage.io)

En **moins de 30 secondes**, tu diagnostiques et corriges le probleme.

---

## Plans & Monetisation

IliaCloud fonctionne avec 3 plans : **Free**, **Pro** (12EUR/mois), **Business** (35EUR/mois).

| | Free | Pro | Business |
|---|---|---|---|
| Serveurs | 1 | 5 | Illimite |
| Monitors uptime | 3 | 20 | Illimite |
| Certificats SSL | 3 | 20 | Illimite |
| Webhooks | 1 | 5 | Illimite |
| Backups planifies | 1 | 10 | Illimite |
| Messages IA/jour | 20 | 200 | Illimite |
| Historique metriques | 24h | 30j | 1 an |
| Audit logs | 1j | 30j | 1 an |
| Terminal SSH | - | Oui | Oui |
| Docker stats/stacks | - | Oui | Oui |
| Logs streaming | - | Oui | Oui |
| Editeur de fichiers | Lecture | Lecture+ecriture | Lecture+ecriture |
| Cron manager | Lecture | CRUD complet | CRUD complet |
| Chat IA tools (bash) | - | Oui | Oui |
| Alertes HTTP/SSL | - | Oui | Oui |
| Export config | - | Oui | Oui |
| Status pages | - | 2 | Illimite |

Le systeme de plans est **stocke en base de donnees** (table `plans`, JSONB) — modifiable sans redeployer. L'enforcement se fait a 3 niveaux :

1. **Backend** — Middlewares `requireFeature`, `checkQuota`, `checkDailyQuota` sur chaque route
2. **WebSocket** — Verification plan pour terminal SSH et logs Docker streaming
3. **Frontend** — Boutons desactives (`PlanButton`), jauges quota (`PlanQuotaInfo`), bannieres upgrade, modal global sur erreur 403/429

---

## Fonctionnalites

### Monitoring & Alertes

| Feature | Detail |
|---------|--------|
| **Dashboard temps reel** | CPU, RAM, disque, load, uptime — WebSocket toutes les 5s |
| **Multi-serveurs** | Vue comparative de tous les serveurs (CPU/RAM/Disque) |
| **Historique metriques** | Graphiques 1h/6h/24h/7j/30j avec Chart.js |
| **Uptime monitoring** | Ping HTTP toutes les 1-5min, uptime %, graphique latence |
| **SSL monitoring** | Verification TLS directe toutes les heures, alerte avant expiration |
| **Surveillance HTTP 5xx** | Scan des access logs toutes les 60s, alerte sur erreurs serveur |
| **Alertes avec recovery** | CPU/RAM/Disque/Load — alerte quand ca depasse, recovery quand ca revient |
| **10 types de webhooks** | server_alert, server_recovery, uptime_down/up, ssl_expiring/expired/recovery, backup_error/success, http_error |
| **4 plateformes** | Discord (embeds), Slack (emojis), Telegram (Markdown), Custom (JSON) |
| **Push notifications** | Web Push via VAPID, seuils configurables par metrique |

### Docker & Infrastructure

| Feature | Detail |
|---------|--------|
| **Containers** | Liste, detail, start/stop/restart, supprimer, prune |
| **Stacks** | Docker Swarm + Compose, redeployer, rollback, config, historique |
| **Stats** | CPU/RAM/Network par container en temps reel |
| **Logs streaming** | `tail -f` en direct via WebSocket, auto-detection des fichiers de logs internes |
| **Espace disque** | Barre de progression dans l'overview, warning 85%, critical 95% |

### Gestion serveur

| Feature | Detail |
|---------|--------|
| **Terminal SSH** | xterm.js dans le navigateur, bouton flottant, redimensionnable |
| **Editeur de fichiers** | Navigateur d'arborescence + edition avec CodeMirror (coloration syntaxique) |
| **Actions rapides** | Boutons personnalises pour les commandes frequentes |
| **Cron manager** | CRUD crontab, presets, activation/desactivation |
| **Logs configurables** | Fichier, Docker stdout, fichier dans container — tail avec search |

### Backups & Securite

| Feature | Detail |
|---------|--------|
| **Backup manager** | PostgreSQL + MySQL, manuel ou planifie (horaire/quotidien/hebdo) |
| **Auto-scan DB** | Detecte les containers PostgreSQL/MySQL automatiquement |
| **Restauration** | En un clic avec confirmation |
| **Retention par plan** | Nettoyage automatique selon le plan (3j/30j/90j) |
| **Webhook succes/echec** | Notification a chaque backup |

### IA & Chat

| Feature | Detail |
|---------|--------|
| **6 providers** | Anthropic, OpenAI, Google Gemini, DeepSeek, Mistral, xAI Grok |
| **15 modeles** | Claude Sonnet/Opus, GPT-4o, Gemini 2.5, DeepSeek R1, etc. |
| **Tool use** | L'IA execute des commandes (bash, read, write, ls) avec confirmation |
| **Contexte serveur** | L'IA a acces au serveur selectionne pour diagnostiquer |
| **Quota journalier** | Compteur visible, barre de progression, blocage a la limite |

### Administration

| Feature | Detail |
|---------|--------|
| **Audit log** | Toutes les actions loguees (16 categories), filtres, recherche, export CSV |
| **Import/Export** | Config chiffree AES-256-GCM avec mot de passe (PBKDF2 100k iterations) |
| **Status page publique** | Page sans login, personnalisable (titre, logo, couleurs), uptime par service |
| **Theme clair/sombre** | Toggle + preference systeme |
| **PWA installable** | Service worker, manifest, icones |

---

## Stack technique

### Frontend

| Technologie | Role |
|-------------|------|
| **React 18** | UI composants |
| **Vite 5** | Build & dev server |
| **Tailwind CSS 3** | Styling utility-first |
| **Chart.js** | Graphiques metriques |
| **xterm.js** | Terminal SSH dans le navigateur |
| **CodeMirror 6** | Editeur de code avec coloration |
| **Lucide React** | Icones |
| **Vite PWA** | Service worker & manifest |
| **Playwright** | Tests E2E |

### Backend

| Technologie | Role |
|-------------|------|
| **Node.js 20** | Runtime |
| **Express 4** | API REST + middleware |
| **PostgreSQL 16** | Base de donnees (22 tables) |
| **ssh2** | Connexions SSH persistantes avec pool |
| **ws** | WebSocket (metriques, terminal, logs streaming) |
| **jsonwebtoken** | Authentification JWT (access + refresh) |
| **bcryptjs** | Hash des mots de passe (12 rounds) |
| **web-push** | Notifications push (VAPID) |
| **Anthropic SDK** | Integration Claude (tool use) |
| **Vitest** | 554 tests unitaires |

### Infrastructure

| Technologie | Role |
|-------------|------|
| **Docker Swarm** | Orchestration production |
| **Traefik** | Reverse proxy + HTTPS automatique |
| **Let's Encrypt** | Certificats TLS |
| **SonarQube** | Qualite de code (0 bugs, 0 vulnerabilites) |

---

## Architecture

```
                    +-------------------+
                    |   Mobile / PWA    |
                    |  React + Vite     |
                    +--------+----------+
                             |
                        HTTPS / WSS
                             |
                    +--------+----------+
                    |     Traefik       |
                    |  (reverse proxy)  |
                    +--------+----------+
                             |
              +--------------+--------------+
              |                             |
     +--------+----------+     +-----------+---------+
     |   Backend Node.js  |     |   PostgreSQL 16     |
     |                    |     |                     |
     |  REST API (20+     |     |  22 tables          |
     |   routes)          |     |  users, servers     |
     |  WebSocket (3      |     |  ssh_keys (chiffre) |
     |   canaux)          |     |  api_keys (chiffre) |
     |  SSH pool          |     |  plans (JSONB)      |
     |  8 services bg     |     |  metrics, audit     |
     +--------+-----------+     +---------------------+
              |
         SSH (port 22)
              |
     +--------+----------+
     |  Tes serveurs      |         +-------------------+
     |  distants          |         |  /status/:slug    |
     +--------------------+         |  Page publique    |
                                    |  (sans login)     |
         Discord / Slack /          +-------------------+
         Telegram
              ^
              |
         Webhooks (10 events)
```

### Services en arriere-plan

| Service | Intervalle | Role |
|---------|-----------|------|
| **metricsCollector** | 5 min | Collecte CPU/RAM/Disque/Load, verifie les seuils |
| **uptimeChecker** | 60s | Ping les URLs, detecte DOWN/UP, envoie les alertes |
| **sslChecker** | 1h | Verifie l'expiration des certificats TLS |
| **httpErrorWatcher** | 60s | Scanne les access logs pour les erreurs 5xx |
| **backupScheduler** | 15 min | Execute les backups planifies, nettoie les anciens |
| **cleanup** | Minuit | Purge metriques + audit par plan (free 1j, pro 30j, business 1 an) |

---

## Securite

| Mesure | Detail |
|--------|--------|
| **Cookies httpOnly** | Tokens JWT stockes en cookies httpOnly + Secure + SameSite |
| **CSRF** | Double submit cookie (cookie + header X-CSRF-Token) |
| **Chiffrement AES-256-GCM** | Cles SSH, cles API, exports config — tous chiffres |
| **bcrypt 12 rounds** | Hash des mots de passe |
| **Refresh token rotation** | L'ancien token est supprime a chaque refresh |
| **Anti timing-attack** | Comparaison dummy hash pour les users inexistants |
| **Account lockout** | 5 echecs en 15 min = compte bloque 15 min, auto-reset |
| **Rate limiting** | Global (1000/15min), auth (50/15min), inscription (10/IP/jour), WebSocket (30/min/IP) |
| **SSRF protection** | Blocage des IPs privees + metadata endpoints sur uptime monitors et webhooks |
| **Shell escape** | Protection contre l'injection de commandes SSH |
| **Path validation** | Protection contre le path traversal + null bytes |
| **Container validation** | Noms de containers valides uniquement (alphanumerique) |
| **Helmet + CSP** | Headers de securite HTTP stricts |
| **Audit log** | Toutes les actions mutantes loguees (sensibles masques), echecs auth traces |
| **Validation .env** | Le backend refuse de demarrer si secrets manquants ou trop courts |
| **PBKDF2 100k** | Derivation de cle pour l'export de config (sel aleatoire) |
| **Plan enforcement** | Quotas + features verifies cote serveur sur chaque route (35 limites enforced) |

---

## Tests

| Type | Framework | Nombre | Couverture |
|------|-----------|--------|------------|
| **Unitaires backend** | Vitest | 554 tests (29 fichiers) | Parsers, crypto, auth, middleware, services, routes, plans |
| **Unitaires frontend** | Vitest + RTL | 109 tests (22 fichiers) | Pages, composants, API client, contextes |
| **E2E** | Playwright | 7 scenarios (3 fichiers) | Auth, navigation, status page publique |
| **Qualite** | SonarQube | Quality gate | 0 bugs, 0 vulnerabilites |

---

## Deploiement

### Prerequis

- **Docker** et **Docker Swarm** (ou Compose)
- Un reseau **Traefik** existant (`traefik_net`)
- Un nom de domaine pointe vers ton serveur

### 1. Cloner le projet

```bash
git clone https://github.com/ton-user/iliacloud.git
cd iliacloud
```

### 2. Configurer les variables d'environnement

```bash
cd backend
cp .env.production.example .env
```

Generer les secrets :

```bash
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"  # JWT_SECRET
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"  # JWT_REFRESH_SECRET
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"  # ENCRYPTION_KEY
```

### 3. Build et deployer

```bash
# Backend
cd backend && docker build -t iliacloud-backend:latest .

# Frontend
cd frontend && docker build -t iliacloud-frontend:latest .

# Deployer le stack
docker stack deploy -c docker-compose.yml iliacloud
```

### 4. Appliquer les migrations

```bash
docker exec $(docker ps -q --filter name=iliacloud_backend) node src/db/migrate.js
```

### 5. Verifier

```bash
curl https://api.iliacloud.ton-domaine.com/health
# { "status": "ok", "ts": "..." }
```

---

## Developpement local

### Backend

```bash
cd backend
cp .env.example .env

# PostgreSQL
docker run -d --name iliacloud-pg \
  -e POSTGRES_DB=iliacloud \
  -e POSTGRES_USER=iliacloud \
  -e POSTGRES_PASSWORD=changeme \
  -p 5432:5432 postgres:16-alpine

npm install
npm run migrate
npm run dev
```

### Frontend

```bash
cd frontend
npm install
npm run dev
# http://localhost:5173
```

### Tests

```bash
# Backend (554 tests)
cd backend && npx vitest run

# Frontend (109 tests)
cd frontend && npx vitest run

# E2E
cd frontend && npx playwright test
```

---

## Structure du projet

```
iliacloud/
├── backend/
│   ├── src/
│   │   ├── config/                # Plans (JSONB DB + cache + fallback)
│   │   ├── db/                    # Pool PostgreSQL + schema (22 tables)
│   │   ├── middleware/            # Auth JWT, CSRF, audit, plan limits, errors
│   │   ├── routes/                # 20 modules de routes REST
│   │   │   ├── auth.js            # Inscription, login, refresh, lockout
│   │   │   ├── servers.js         # CRUD serveurs + overview multi-serveurs
│   │   │   ├── docker.js          # Containers, stacks, stats, logs, actions
│   │   │   ├── logs.js            # Logs configurables (file, docker, docker-file)
│   │   │   ├── chat.js            # Chat IA multi-provider avec tool use + quota /jour
│   │   │   ├── uptime.js          # Monitoring URLs + scan Traefik + SSRF protection
│   │   │   ├── ssl.js             # Monitoring certificats HTTPS
│   │   │   ├── backups.js         # Backup/restore PostgreSQL + MySQL
│   │   │   ├── webhooks.js        # CRUD webhooks + SSRF protection
│   │   │   ├── alerts.js          # Regles d'alerte + push subscriptions
│   │   │   ├── billing.js         # Stripe checkout + portal + status
│   │   │   ├── statusPage.js      # Pages de statut publiques
│   │   │   ├── audit.js           # Journal d'audit + export CSV
│   │   │   ├── configExport.js    # Import/export config chiffre
│   │   │   ├── files.js           # Navigateur + editeur de fichiers
│   │   │   ├── cron.js            # Gestion crontab
│   │   │   ├── quickActions.js    # Actions rapides custom
│   │   │   ├── metrics.js         # Historique metriques
│   │   │   ├── sshKeys.js         # Cles SSH (chiffrees AES)
│   │   │   └── apiKeys.js         # Cles API IA (chiffrees)
│   │   ├── services/              # 8 services en arriere-plan
│   │   ├── utils/                 # Shell escape, path validation, SSRF validator
│   │   ├── index.js               # Express + .env validation + rate limiting
│   │   └── websocket.js           # WebSocket (metriques, terminal, docker logs)
│   ├── tests/                     # 554 tests Vitest
│   ├── Dockerfile
│   └── package.json
├── frontend/
│   ├── src/
│   │   ├── components/            # Layout, PlanButton, PlanLimitModal, UpgradeBanner...
│   │   ├── contexts/              # AuthContext, ServerContext, ThemeContext
│   │   ├── lib/                   # API client (plan interceptor), usePlan hook
│   │   └── pages/                 # 19 pages (Dashboard, Docker, SSL, Pricing...)
│   ├── tests/                     # 109 tests Vitest + RTL
│   ├── e2e/                       # 7 tests Playwright
│   └── package.json
├── ROADMAP.md
├── MONETISATION.md                # Details des plans et pricing
├── CLAUDE.md                      # Instructions pour Claude Code
└── README.md
```

---

## Roadmap

Voir [ROADMAP.md](ROADMAP.md) pour le detail complet.

**29 features implementees** sur 30 prevues :

- [x] Auth JWT (cookies httpOnly) + refresh token rotation + account lockout
- [x] Serveurs SSH avec pool de connexions persistantes
- [x] Dashboard temps reel (CPU, RAM, disque, load, uptime)
- [x] Multi-serveurs avec vue comparative
- [x] Historique metriques + graphiques Chart.js
- [x] Gestion Docker (containers, stacks, stats, logs streaming)
- [x] Terminal SSH web (xterm.js)
- [x] Editeur de fichiers (CodeMirror)
- [x] Logs configurables (fichier, Docker, docker-file)
- [x] Actions rapides custom
- [x] Cron manager
- [x] Backup manager (PostgreSQL + MySQL, planifie)
- [x] Uptime monitoring + scan Traefik
- [x] SSL / Certificats monitoring
- [x] Surveillance HTTP 5xx
- [x] Alertes push + webhook avec recovery
- [x] 10 types d'evenements webhook (Discord/Slack/Telegram)
- [x] Chat IA multi-provider (6 providers, 15 modeles)
- [x] Dashboard de statut public
- [x] Espace disque dans l'overview
- [x] Docker logs streaming (temps reel + auto-detection)
- [x] Audit log (16 categories + export CSV)
- [x] Import/export config (AES-256-GCM)
- [x] Theme clair/sombre
- [x] PWA installable
- [x] Systeme de plans Free/Pro/Business (DB-driven, 35 limites enforced)
- [x] Monetisation Stripe (checkout, portal, webhooks)
- [x] Securite OWASP (lockout, SSRF, rate limiting, audit)
- [x] 663 tests (Vitest + Playwright)
- [ ] Partage d'acces multi-user (roles + permissions)

---

## Licence

Projet prive — Tous droits reserves.

---

*Fait avec du cafe et Claude par Bruno.*
