kamctrl — Interface Admin Réservations
Présentation
Section intitulée « Présentation »kamctrl.levell.cloud est l’interface d’administration back-office de Keur Adja Maye. Elle permet de gérer les réservations, clients, unités, paiements et factures.
Structure du projet
Section intitulée « Structure du projet »/docker/kamctrl/├── Dockerfile├── docker-compose.yml├── .env ← Configuration (secrets, non versionné)├── docker/│ ├── nginx.conf ← Config Nginx interne│ ├── supervisord.conf ← Gère PHP-FPM + Nginx│ └── entrypoint.sh ← Script de démarrage├── app/ ← Code Laravel (Controllers, Models, etc.)├── routes/ ← Routes web et API├── resources/views/ ← Templates Blade├── database/│ └── database.sqlite ← Base de données (dans le volume kamctrl_db)└── public/build/ ← Assets compilésStack technique
Section intitulée « Stack technique »| Technologie | Usage |
|---|---|
| Laravel | Framework PHP |
| PHP | Runtime |
| SQLite | Base de données (dans un volume Docker) |
| Vite + Alpine.js | Frontend |
| Nginx | Serveur web interne |
| PHP-FPM | Process manager PHP |
| Supervisor | Gère Nginx + PHP-FPM dans un seul container |
Architecture du container
Section intitulée « Architecture du container »Un seul container fait tourner deux processus supervisés par Supervisor :
nginx— sert les fichiers statiques et proxifie vers PHP-FPMphp-fpm— exécute le code PHP Laravel
Requête HTTP │ ▼Nginx (port 80) │ ├── /build/* → fichiers statiques directement └── *.php / routes → PHP-FPM │ ▼ LaravelEntrypoint (démarrage du container)
Section intitulée « Entrypoint (démarrage du container) »À chaque démarrage, docker/entrypoint.sh :
- Crée les dossiers
storage/framework/nécessaires - Règle les permissions
- Lance
php artisan migrate --force(applique les migrations) - Met en cache la config et les routes (
config:cache,route:cache) - Démarre Supervisor
Base de données
Section intitulée « Base de données »SQLite — le fichier database.sqlite est dans le volume Docker kamctrl_db (persistant entre les redémarrages).
# Accéder à la BDD depuis le serveur hôte (commande à récupérer dans context.md)sudo sqlite3 <chemin_volume>/database.sqlite
# Requête rapidesudo sqlite3 <chemin_volume>/database.sqlite "SELECT COUNT(*) FROM reservations;"Configuration (.env)
Section intitulée « Configuration (.env) »| Variable | Description |
|---|---|
APP_KEY | Clé de chiffrement Laravel (ne jamais changer en prod) |
APP_URL | URL publique de l’application |
DB_CONNECTION | sqlite |
MAIL_HOST | Serveur mail SMTP |
OPENROUTER_API_KEY | Clé OpenRouter pour les fonctionnalités IA |
Les valeurs exactes sont dans .lab_tracking/context.md sur le serveur.
Proxy HTTPS (Traefik)
Section intitulée « Proxy HTTPS (Traefik) »Laravel doit savoir qu’il est derrière un proxy HTTPS. La configuration dans bootstrap/app.php :
$middleware->trustProxies(at: '*', headers: \Illuminate\Http\Request::HEADER_X_FORWARDED_FOR | \Illuminate\Http\Request::HEADER_X_FORWARDED_PROTO);Sans ça, toutes les URLs générées seraient en http:// au lieu de https://.
Déployer une mise à jour
Section intitulée « Déployer une mise à jour »cd /docker/kamctrl
# 1. Modifier le code# 2. Commitergit add -A && git commit -m "feat: description"
# 3. Rebuilder le containerdocker compose up -d --build
# 4. Vérifierdocker logs kamctrl --tail 20curl -sI https://kamctrl.levell.cloud | head -3# Logs du container (Supervisor + Nginx + PHP-FPM)docker logs kamctrl --tail 50
# Logs Laravel (dans le container)docker exec kamctrl tail -30 storage/logs/laravel.logAccès admin
Section intitulée « Accès admin »L’interface est protégée par un système d’authentification Laravel. Le compte admin initial a été importé lors de la migration depuis l’ancienne base de données.