Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Gestionnaire d'Equipements de Protection Individuelle (EPI)
Translation pending
BusinessPHP · TwigGitHub @johnburnoutOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗EpiClub est une application de gestion et de journalisation des contrôles des Equipements de Protection Individuelle.
epiclub-<version>.zip de la dernière version ici
(et non « Source code », qui ne contient pas les dépendances vendor/).public.SMTP est facultatif. Vous pouvez passer cette étape lors de l'installation. Les fonctionnalités d'envoi de mail (notifications, mot de passe oublié) seront désactivées jusqu'à ce que vous configuriez SMTP dans l'administration.
À la fin de l'installation, supprimez le dossier
setup/de votre serveur. Tant qu'il est présent, l'application affichera une erreur 403 sur/setup/.
Même résultat que l'assistant, sans navigateur (hébergeur, Virtualmin, console d'hébergement). À lancer sous l'utilisateur propriétaire des fichiers, jamais en root :
EPICLUB_DB_PASS='…' EPICLUB_ADMIN_PASSWORD='…' php bin/installer.php --site-name="EPIClub – Club X" --root-url=https://epi.club-x.fr --db-name=clubx_epiclub --db-user=clubx --admin-username=jdupont [email protected] --admin-nom=Dupont --admin-prenom=Jean --club-nom="Club X" [email protected] --activite=Escalade
php bin/installer.php --aide liste toutes les options (SMTP, mot de
passe généré, --json…). Les mots de passe ne passent jamais en
argument : variables d'environnement ou fichiers. Codes de sortie : 0
succès, 2 paramètres invalides, 3 prérequis, 4 autre opération en cours,
8 installation interrompue, 9 déjà installé.
Avant chaque mise à jour qui contient des migrations de base de données
(page Mise à jour de l'administration, ou php bin/migrate.php), un
dump SQL complet est créé automatiquement dans var/backups/, sous le
nom db_AAAA-MM-JJ_HHMMSS.sql. Si ce dump échoue (espace disque, droits
d'écriture), la mise à jour est annulée avant toute modification.
Les 5 derniers dumps sont conservés.
Pour restaurer un dump :
mysql -u UTILISATEUR -p NOM_DE_LA_BASE < var/backups/db_2026-10-21_060000.sql
Pour ajuster la rétention, ajouter dans .env.local.php :
'BACKUP_RETENTION' => 10,
Le dump est produit en PHP (aucune dépendance à mysqldump, rien
n'apparaît dans la liste des processus). En ligne de commande,
php bin/migrate.php --sans-sauvegarde permet de s'en passer.
Administration → Sauvegarde / restauration (super-administrateur) :
archive .zip de la base et des photos, images et factures, avec
restauration vérifiée depuis l'application. Voir le guide utilisateur.
La même archive, à programmer en cron sous l'utilisateur du domaine :
php bin/sauvegarder.php --quiet
L'archive var/backups/epiclub-sauvegarde-…-planifiee.zip apparaît dans
la page Sauvegarde / restauration. Seules les BACKUP_RETENTION
dernières sauvegardes planifiées sont conservées (--garder=N pour
changer). --sql-seul produit un simple dump SQL. Une sauvegarde ne
démarre pas pendant une mise à jour ou une restauration (code de
sortie 4).
Pour repartir de zéro en développement :
php bin/reset-install.php
Ce script supprime la base de données et le fichier .env.local.php.
Il refuse de s'exécuter depuis le navigateur (protection PHP_SAPI !== 'cli').
php -S localhost:8000 -t public public/router.php
Mettre à jour version.txt (ex. 1.0.1) et CHANGELOG.md, commiter, pousser main.
Créer la release avec gh (notes tirées du CHANGELOG) :
V=v1.0.1
awk -v v="## [$V]" 'index($0,v)==1{f=1;next} f&&/^## \[/{exit} f' CHANGELOG.md > /tmp/notes.md
gh release create "$V" --target main --title "$V" --notes-file /tmp/notes.md
La CI (.github/workflows/release.yml) construit alors l'archive complète
avec bin/build-release.sh (vendor/ inclus, sans tests) et l'attache à la
release avec sa somme SHA-256 ; l'updater intégré télécharge et vérifie ces
deux fichiers. Ne cocher « pre-release » que pour une version bêta (voir ci-dessous).
Pour tester la construction en local : bin/build-release.sh v1.0.1.
Depuis la v1.0.0, une version bêta (ex. v1.1.0-beta.1) se publie
avec --prerelease : les instances en canal stable ne la voient pas,
celles en canal beta (UPDATE_CHANNEL=beta) la reçoivent. Une
version stable se publie sans --prerelease.
L'updater interroge l'API GitHub, limitée à 60 requêtes/heure par adresse
IP sans authentification (partagées avec les autres sites du serveur).
Après un échec, GitHub n'est pas réinterrogé avant 10 minutes. Sur une IP
partagée, ajouter un jeton dans .env.local.php porte la limite à 5 000
requêtes/heure : 'GITHUB_TOKEN' => 'github_pat_…' (jeton « fine-grained »
sans aucune permission, « Public repositories » ; il n'est envoyé qu'à
api.github.com).
vendor/bin/phpunit # tests unitaires
vendor/bin/phpunit --testsuite Integration # tests d'intégration + sécurité
Les tests d'intégration démarrent automatiquement un serveur de dev sur
BASE_URL (défaut : http://localhost:8000) si aucun serveur n'écoute,
et l'arrêtent en fin de suite. Un serveur déjà lancé manuellement est
réutilisé (et laissé intact).
LGPL-3.0-or-later — voir licence.md.