Premier Démarrage
À faire une seule fois, après l'installation d'un serveur neuf.
1. Vérifier les conteneurs
cd ~/pch-sig
docker compose -f docker-compose.prod.yml ps
docker compose -f docker-compose.prod.yml logs backend | tail -30
Le journal du backend doit montrer les étapes de l'entrypoint : clés JWT, base de données, migrations, permissions, cache.
2. Base de données
Les migrations sont jouées automatiquement au démarrage du backend. Pour vérifier :
docker exec -u www-data pch_backend php bin/console doctrine:migrations:status
Pour reprendre une base existante (migration d'un serveur), restaurer un dump plutôt que repartir de zéro : voir Restauration.
3. Clés JWT
En préproduction, l'entrypoint crée la paire de clés dans backend/config/jwt/ si elle manque, avec JWT_PASSPHRASE. En production, ce répertoire est monté en lecture seule : créer les clés sur l'hôte avant le premier démarrage (commandes dans Authentification JWT). Ces clés sont propres au serveur : ne les copiez pas d'un serveur à l'autre et ne les écrasez pas lors d'un déploiement.
4. Données de référence
docker exec -u www-data pch_backend php bin/console app:init-geo-data # régions, secteurs, communes, localités
docker exec -u www-data pch_backend php bin/console app:init-categories-reclamation
docker exec -u www-data pch_backend php bin/console app:init-eligibility-templates
Le reste (projets, programmes, méthodes PMT, workflows des plaintes, nomenclature) se configure dans Paramètres.
5. Premier administrateur
docker exec -u www-data pch_backend php bin/console app:create-user <email> '<mot de passe>' <Nom> <Prénom> --role=ROLE_ADMIN
Le mot de passe se choisit hors de toute conversation ou ticket, et se range dans le gestionnaire de secrets. Pour une réinitialisation :
docker exec -u www-data pch_backend php bin/console app:reset-user-password <email> '<nouveau mot de passe>'
Ensuite, dans l'application : rattacher l'administrateur à son institution et à ses projets (Paramètres → Utilisateurs). Un compte sans rattachement ne voit aucune donnée. La commande app:perimetre:initialiser le fait en masse.
6. Tâches planifiées (cron de l'hôte)
# Digest des plaintes en retard, 08:00
0 8 * * * docker exec pch_backend php bin/console app:plaintes:send-digest >> /var/log/plainte-digest.log 2>&1
# Base documentaire de l'assistant Bemba, 03:15
15 3 * * * docker exec -u www-data pch_backend php bin/console app:assistant:indexer --max-appels=15 >> /home/ubuntu/assistant-indexer.log 2>&1
Les autres tâches planifiées (escalade des plaintes, alertes) sont exécutées par le worker scheduler_plaintes du conteneur backend, qui consomme aussi scheduler_transferts (récurrence des transferts, chaque jour à 6 h).
7. Documentation et assistant
Déployer le build de la documentation dans ~/pch-sig/documentation/build, puis indexer :
docker exec -u www-data pch_backend php bin/console app:assistant:indexer --etat
8. Contrôle final
https://<domaine>/affiche l'écran de connexion,https://<domaine>/api/healthrépond 200.- Connexion avec le compte administrateur, puis déconnexion.
- Un e-mail de test part (création d'un compte de test : e-mail de bienvenue) et la file
failedreste vide.
Ne lancez jamais cache:clear avec docker exec en root : le cache recréé appartient à root et php-fpm (www-data) ne peut plus écrire, d'où des erreurs 500. Utilisez -u www-data, ou recréez le conteneur.