# Préproduction gestion ACMF

Destination : https://preprod.gestion.acmf.fr sur le serveur hébergeant preprod.acmf.fr.

## Implantation

Créer un site distinct, par exemple `/var/www/html/preprod.gestion.acmf.fr`. La racine HTTP doit être exclusivement son dossier `public/`, jamais la racine Symfony. Affecter PHP-FPM 8.3 au nouveau site sans changer la version PHP du WordPress. Créer l'enregistrement DNS du sous-domaine vers le même serveur et un certificat TLS pour ce nom exact.

Conserver deux connexions : `GESTION_DATABASE_URL` vers une copie de la base de gestion ; `WORDPRESS_DATABASE_URL` vers la base utilisée par **preprod.acmf.fr**, pour tester la synchronisation entre les deux applications. Sauvegarder cette base avant les premiers tests métier. Ne pas utiliser les bases de production et ne pas importer par-dessus la base WordPress déjà installée.

## Fichiers et configuration

Copier `bin/`, `config/`, `public/`, `src/`, `templates/`, `translations/` si présent, `composer.json`, `composer.lock`, `symfony.lock`, `.env`. Exclure `.env.local`, `.env.local.php`, les bases locales, les tests, les caches et le serveur local `router.php`. Installer les dépendances depuis composer.lock sur le serveur avec PHP 8.3 :

```bash
APP_ENV=prod APP_DEBUG=0 composer install --no-dev --prefer-dist --no-interaction --optimize-autoloader
composer check-platform-reqs --no-dev
```

Créer `.env.local` hors racine HTTP depuis `environment.example`, permissions de lecture limitées au compte de déploiement et au processus PHP. Générer APP_SECRET et ACMF_TOTP_KEY (32 octets aléatoires chacun), conserver une copie sécurisée. Si des comptes TOTP existants sont importés, conserver **leur clé ACMF_TOTP_KEY originale** ; remplacer la clé rendrait leurs secrets illisibles.

Préserver `var/uploads/documents`, `var/exports`, `var/cron-runs`, `var/cron-reports`, `var/app_params.yml` et les données persistantes de session entre les mises à jour. Transférer les documents nécessaires dans le stockage privé ; ne jamais les placer dans public. Autoriser le compte PHP à écrire dans var, pas dans src/config. Contrôler les paramètres métier et destinataires avant de tester les envois.

```bash
APP_ENV=prod APP_DEBUG=0 php bin/console acmf:totp:initialize
APP_ENV=prod APP_DEBUG=0 php bin/console acmf:password-age:initialize
APP_ENV=prod APP_DEBUG=0 php bin/console assets:install public
APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear
APP_ENV=prod APP_DEBUG=0 php bin/console lint:container
```

Dates de mots de passe inconnues : renouvellement obligatoire au premier accès. Un compte importé sans TOTP doit configurer son Authenticator.

## Recette avant ouverture

Vérifier HTTPS, connexion/TOTP, expiration des mots de passe, liste/filtre/export, modification d'un adhérent de test, synchronisation WordPress, documents privés (anonyme refusé), RA et chat. Vérifier que `.env.local`, composer.json et var sont inaccessibles par HTTP. Vérifier l'application mobile avec son environnement de test, sans changer ses clés de production.

Laisser `ACMF_ENABLE_OUTBOUND=0` et `MAILER_DSN=null://null` jusqu'à configuration des destinataires de test. Ne pas installer automatiquement les crons de production : `cron.example` est le calendrier de référence ; les activer après recette et vérification du fuseau Europe/Paris, des fichiers SEPA et des dépôts partenaires. Garder les journaux d'idempotence des workflows. Le jeton serveur WordPress/Symfony doit rester côté serveur.

En cas de problème : remettre la version précédente et sa configuration, restaurer la copie de base concernée si des écritures ont eu lieu, conserver la clé TOTP et les documents privés.
