# 3. Installation et configuration

## Prérequis

- Git ;
- Docker Engine et Docker Compose v2 ;
- Node.js uniquement pour travailler hors conteneur ;
- accès Microsoft Entra/Graph pour SSO et e-mails ;
- accès au répertoire de paie si le module doit fonctionner ;
- espace disque pour MySQL, modèles, paies et sauvegardes.

## Installation locale avec Docker

```bash
git clone <url-du-depot>
cd rh-appweb-stage
cp .env.example .env
docker compose up -d --build
docker compose ps
docker compose logs --tail=100 backend frontend db
```

Accès attendus : frontend sur `http://localhost:3001`, backend sur `http://localhost:8000`, MySQL sur `127.0.0.1:3306`.

## Configuration de production

Créer `.env.production` à partir de `.env.production.example`, puis renseigner les secrets et chemins réels. Lancement :

```bash
docker compose --env-file .env.production \
  -f docker-compose.yml \
  -f docker-compose.prod.yml \
  up -d --build
```

## Variables essentielles

| Groupe | Variables principales | Remarques |
|---|---|---|
| MySQL | `MYSQL_DATABASE`, `MYSQL_USER`, `MYSQL_PASSWORD`, `MYSQL_ROOT_PASSWORD`, `DATABASE_URL` | `DATABASE_URL` doit viser la même base que le backend |
| JWT | `SECRET_KEY`, `JWT_ALGORITHM`, `JWT_EXPIRATION_HOURS` | Secret long, aléatoire et distinct par environnement |
| Frontend/CORS | `FRONTEND_ORIGIN`, `NEXT_PUBLIC_API_URL`, `CORS_ALLOWED_ORIGINS` | En prod, utiliser l’URL HTTPS finale |
| Compte local de secours | `AUTH_ADMIN_USERNAME`, `AUTH_ADMIN_PASSWORD_HASH` | Préférer un hash bcrypt ; limiter l’usage |
| SSO Entra | `SSO_MODE`, `ENTRA_TENANT_ID`, `ENTRA_CLIENT_ID`, `ENTRA_CLIENT_SECRET`, `ENTRA_REDIRECT_URI`, `ENTRA_SCOPES` | Redirect prod exact requis dans Azure |
| Graph/e-mails | Variables Graph indiquées dans l’exemple d’environnement | Tester sans destinataires réels d’abord |
| Modèles | `DOCUMENT_TEMPLATES_ROOT` | Défaut backend : `/data/document-templates` |
| Paies | `PAYSLIP_HOST_PATH`, `PAYSLIP_ROOT_PATH` | Hôte vers conteneur ; défaut interne `/data/paies` |
| Scheduler | `ALERT_MAIL_SCHEDULE_MODE`, `...HOUR`, `...MINUTE`, `...GROUPS`, `...RETRY_MINUTES` | Laisser `disabled` jusqu’à validation |
| Swagger | `SWAGGER_ENABLED` | À limiter si la doc ne doit pas être exposée |

## SSO Microsoft Entra ID

Pour la production, l’application Azure doit déclarer exactement cette Redirect URI :

```text
https://rhconnect.envie2enord.com/api/auth/microsoft/callback
```

Le `.env` de développement peut pointer vers `localhost:8000`, mais ce callback local ne permet pas le SSO de production. Une modification de Redirect URI nécessite généralement l’intervention du propriétaire de l’application Entra/DSI.

## Contrôles après démarrage

```bash
docker compose ps
docker compose logs --tail=200 backend
docker compose exec backend printenv MYSQL_DATABASE
curl -fsS http://127.0.0.1:8000/api/health
```

Puis tester dans le navigateur : connexion, liste salariés, fiche, création sur un environnement non productif, documents, paie, droits restreints et déconnexion.

## Encodage Windows

Les sorties PowerShell montrant des accents illisibles sont généralement un problème d’affichage UTF-8, pas une corruption de la base. Pour faciliter les scripts :

```powershell
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
```
