# Déploiement sur Coolify

## 🔧 Configuration

### Repository Git
- **Forgejo**: https://git.odnt.fr/renaud/espace-paie-odentas
- **Branche**: main
- **GitHub (backup)**: https://github.com/odentas/Nouvel-Espace-Paie

### Dockerfile
Le projet utilise un Dockerfile multi-stage optimisé pour Next.js en mode standalone.

## 📋 Variables d'environnement requises

### Application (CRITIQUE)
```
NEXT_PUBLIC_SITE_URL=https://paie.odnt.fr
NODE_ENV=production
NEXT_TELEMETRY_DISABLED=1
```

**Important** : `NEXT_PUBLIC_SITE_URL` remplace `VERCEL_URL` et est utilisé pour :
- Génération des liens dans les emails
- Callbacks d'authentification Supabase
- Webhooks DocuSeal
- Tokens d'auto-déclaration

### Supabase
```
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
```

### AWS
```
AWS_REGION=eu-west-3
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_S3_BUCKET_NAME=
AWS_CLOUDFRONT_DOMAIN=
```

### Email (SES)
```
AWS_SES_FROM_EMAIL=
AWS_SES_FROM_NAME=
```

### DocuSeal
```
DOCUSEAL_API_KEY=
DOCUSEAL_BASE_URL=
NEXT_PUBLIC_DOCUSEAL_WEBHOOK_URL=
```

### PDFMonkey
```
PDFMONKEY_PRIVATE_KEY=
NEXT_PUBLIC_PDFMONKEY_TEMPLATE_ID=
```

### PostHog Analytics
```
NEXT_PUBLIC_POSTHOG_KEY=
NEXT_PUBLIC_POSTHOG_HOST=https://eu.i.posthog.com
```

### Lambda Functions
```
LAMBDA_SIGNATURE_SALARIE_URL=
LAMBDA_ODENTAS_PADES_SIGN_URL=
LAMBDA_TSA_STAMP_URL=
LAMBDA_PDF_CONVERTER_URL=
```

### Autres
```
JWT_SECRET=
ENCRYPTION_KEY=
```

## ⚙️ Configuration Supabase

**Important** : Ajouter les URLs de redirection dans Supabase Dashboard → Authentication → URL Configuration :

**Site URL** :
```
https://paie.odnt.fr
```

**Redirect URLs** (whitelist) :
```
https://paie.odnt.fr/**
https://paie.odnt.fr/auth/callback
https://paie.odnt.fr/auto-declaration/**
```

## 🚀 Configuration dans Coolify

1. **Créer un nouveau projet** dans Coolify
2. **Source**: Git Repository
3. **Repository URL**: `https://git.odnt.fr/renaud/espace-paie-odentas.git`
4. **Branche**: `main`
5. **Build Type**: Dockerfile
6. **Port**: 3000

### Build Settings
- **Dockerfile Path**: `/Dockerfile` (racine du projet)
- **Build Pack**: Dockerfile
- **Health Check Path**: `/api/health` (à créer si nécessaire)

### Déploiement
Le Dockerfile utilise le mode `standalone` de Next.js :
- Build optimisé avec cache des dépendances
- Image finale minimale basée sur Alpine
- Utilisateur non-root pour la sécurité
- Port 3000 exposé

## 🔄 Mise à jour du code

Pour déployer une nouvelle version :

```bash
# Depuis le répertoire du projet
git add .
git commit -m "Description des changements"
git push forgejo main  # Push vers Forgejo
git push origin main   # Backup vers GitHub
```

Coolify détectera automatiquement le changement et redéployera l'application.

## ✅ Vérifications post-déploiement

1. Vérifier que toutes les variables d'environnement sont configurées
2. **Vérifier `NEXT_PUBLIC_SITE_URL=https://paie.odnt.fr`** (critique)
3. Vérifier les Redirect URLs dans Supabase Dashboard
4. Tester l'accès à l'application
5. Vérifier les logs dans Coolify
6. Tester les fonctionnalités critiques :
   - Authentification (connexion/déconnexion)
   - Emails (OTP, invitations)
   - Génération de contrats PDF
   - Signature électronique (DocuSeal)
   - Upload de documents (AWS S3)
   - Auto-déclaration congés spectacles

## 🔧 Cron Jobs

Le cron défini dans `vercel.json` ne fonctionne pas sur Coolify. Configuration manuelle nécessaire :

**Option A** : Créer un service Coolify séparé
- Type : Scheduled Task
- Commande : `curl -f https://paie.odnt.fr/api/cron/send-csp-report`
- Schedule : `0 9 * * *` (tous les jours à 9h)

**Option B** : Utiliser cron système sur le serveur hôte
```bash
0 9 * * * curl -f https://paie.odnt.fr/api/cron/send-csp-report
```

## 📊 Différences Vercel vs Coolify

| Fonctionnalité | Vercel | Coolify |
|----------------|--------|---------|
| **Build** | Vercel Build System | Docker multi-stage |
| **Région** | cdg1 (Paris - `vercel.json`) | Votre serveur |
| **Crons** | `vercel.json` | Service séparé ou cron système |
| **Headers conditionnels** | `vercel.json` | `middleware.ts` (déjà géré) |
| **Edge Functions** | Oui | Non (Next.js standard) |
| **Serverless** | Oui | Non (conteneur permanent) |
| **Variables d'env** | `VERCEL_URL` (automatique) | `NEXT_PUBLIC_SITE_URL` (manuel) |

Le middleware Next.js gère déjà les headers et le mode démo, donc pas de régression fonctionnelle.

## 📝 Notes

- **Next.js Version**: 14.2.5
- **Node Version**: 18 (Alpine)
- **Output Mode**: standalone
- **Architecture**: Multi-stage Docker build
