# Checklist de mise en production — VraiDocs

> Plateforme nationale de certification/vérification. **Ne pas mettre en ligne**
> tant que tous les points 🔴 ne sont pas cochés. 🟠 = fortement recommandé, 🟢 = confort.

## 1. Serveur & point d'entrée
- [ ] 🔴 Serveur dédié (Linux recommandé : Ubuntu LTS) — **pas WAMP** en production.
- [ ] 🔴 **VirtualHost `DocumentRoot` pointant sur `public/`** (voir `apache-vhost.conf.example` / `nginx.conf.example`). Le `.htaccess` racine n'est qu'un filet de secours.
- [ ] 🔴 PHP 8.3 + extensions : `gd sodium mbstring pdo_mysql bcmath zip opcache`.
- [ ] 🔴 **OPcache activé** (`opcache.enable=1`, `opcache.validate_timestamps=0` en prod).
- [ ] 🟠 `php artisan optimize` (config/route/view cache) au déploiement.

## 2. Environnement (.env)
- [ ] 🔴 Copier `deploy/.env.production.example` → `.env` et compléter.
- [ ] 🔴 `APP_ENV=production`, `APP_DEBUG=false`.
- [ ] 🔴 `APP_URL=https://votre-domaine` (domaine réel HTTPS — sinon **les QR/URL signées ne se valident pas**).
- [ ] 🔴 `php artisan key:generate` (APP_KEY) — **puis ne plus jamais le changer** (déchiffre sessions + fichiers).
- [ ] 🔴 `php artisan cles:secret` → renseigner `DOCUMENT_KEY_SECRET` (déchiffre les clés privées de signature).
- [ ] 🔴 `SESSION_SECURE_COOKIE=true`, `SESSION_ENCRYPT=true`.

## 3. HTTPS / TLS
- [ ] 🔴 Certificat TLS valide (Let's Encrypt) + **redirection 80→443**.
- [ ] 🔴 HSTS actif (déjà émis par le middleware `SecurityHeaders` dès que la requête est en HTTPS).
- [ ] 🟠 Note de conformité : le 2FA, les cookies et les URL signées **exigent** HTTPS.

## 4. Base de données
- [ ] 🔴 MySQL 8 dédié, utilisateur applicatif à privilèges limités (pas `root`).
- [ ] 🔴 `php artisan migrate --force`.
- [ ] 🔴 Créer le **premier super-admin** (seeder/commande dédiée) puis lui imposer la 2FA.

## 5. File d'attente & tâches planifiées (indispensables)
- [ ] 🔴 **Worker supervisé** qui tourne en permanence (`deploy/systemd/vraidocs-worker.service`). Sans lui : e-mails et imports ne partent pas.
- [ ] 🔴 **Planificateur** (`schedule:run` chaque minute via cron ou `deploy/systemd/vraidocs-scheduler.*`). Sans lui : **la purge (SEC-16) et la détection de fraude (SEC-22) ne tournent pas**.
- [ ] 🟠 `QUEUE_CONNECTION=database` convient au démarrage ; passer à **Redis** à forte charge.
- [ ] 🟠 Superviser la table `failed_jobs` (alerte si non vide).

## 6. E-mail
- [ ] 🔴 SMTP réel configuré et **testé** (`MAIL_MAILER=smtp`, `MAIL_SCHEME=smtps` pour 465).
- [ ] 🔴 `MAIL_FROM_ADDRESS` = une adresse du domaine authentifié (pas d'adresse tronquée).
- [ ] 🔴 **SPF + DKIM + DMARC** publiés pour le domaine expéditeur (sinon spam).

## 7. Sauvegardes (voir BACKUP.md) — CRITIQUE
- [ ] 🔴 Sauvegarde **quotidienne chiffrée** : base de données **+ `storage/app/` (clés privées, photos, justificatifs)**.
- [ ] 🔴 Sauvegarde **séparée et hors-ligne** des secrets `APP_KEY` et `DOCUMENT_KEY_SECRET`.
- [ ] 🔴 **Test de restauration** réalisé et documenté (SEC-25). Perte des clés = documents non signables ; fuite = forgerie.

## 8. Sécurité
- [ ] 🔴 Permissions strictes : `storage/` et `.env` non lisibles par le web ; `.env` en `600`.
- [ ] 🟠 Pare-feu / WAF en amont (Cloudflare) contre le DDoS à l'échelle nationale.
- [ ] 🟠 **Pentest tiers** avant go-live (SEC-28).
- [ ] 🟠 `composer audit` + `npm audit` intégrés à la CI (déjà en place).
- [ ] 🟠 Rotation planifiée des clés de signature (`php artisan cles:roter`).

## 9. Supervision & alertes
- [ ] 🔴 Router le canal de log `security` vers une **alerte réelle** (e-mail/Slack/SIEM) et **la surveiller**.
- [ ] 🟠 Monitoring d'uptime sur `/health` (200 = OK, 503 = dépendance HS).
- [ ] 🟠 Monitoring d'erreurs applicatives (Sentry/Flare).

## 10. Conformité (Niger, données personnelles)
- [ ] 🔴 **AIPD/DPIA** réalisée (SEC-29).
- [ ] 🔴 Pages légales publiées et **validées par un juriste** : `/mentions-legales`, `/confidentialite`, `/cgu` (modèles fournis à compléter).
- [ ] 🟠 Processus de signature de la convention émetteur formalisé.

## 11. Vérification post-déploiement
- [ ] `/health` → 200. `/` → vitrine. `/up` → OK.
- [ ] Soumettre une demande d'inscription → e-mail reçu + badge super-admin.
- [ ] Créer un émetteur, émettre un document, **scanner son QR sur un vrai téléphone** → fiche correcte.
- [ ] Révoquer un document → devient « révoqué » à la vérification.
