Aller au contenu

Architecture et exploitation

Couche Choix État
Backend, API, site, back-office Laravel 13 (PHP 8.3), monolithe modulaire en place
Base de données PostgreSQL 16 en place
Interface back-office Livewire 4 + Tailwind 4, servis par Vite en place
API REST + OpenAPI 3.1, jetons Sanctum par appareil, référence interactive Scalar en place
Cache, files d’attente, compteurs Redis + Horizon configuré ; en local, repli sur la base
Stockage des médias disque privé local ou compatible S3 (R2, S3, MinIO), liens signés choix du fournisseur à arbitrer (ADR-0003)
Application mobile React Native / Expo dépôt séparé ; raccordement au lot L5
Hébergement VPS managé, PaaS ou hébergeur marocain à arbitrer (ADR-0009)
Vue conteneurs : application mobile, site, back-office, API centrale, base, cache, stockage privé, CDN

API, site et back-office vivent dans une seule application déployable. Les frontières internes correspondent aux composants du dossier d’architecture : catalogue (App\Catalogue), comptes (App\Auth), médias (App\Media), et les contrôleurs par surface (Admin, Api\V1, site). Paiement et notifications viendront comme modules exécutés en tâches de fond, pas comme services séparés.

Aucun secret dans le code : tout passe par les variables d’environnement, dont .env.example est la liste commentée. Les migrations sont la seule façon de faire évoluer le schéma.

Développement Recette / production
Base PostgreSQL local PostgreSQL du serveur
Médias MEDIA_DISK=media_local MEDIA_DISK=media_s3 et MEDIA_S3_*
Codes de connexion OTP_EMAIL_CHANNEL=log (le code est dans le journal) OTP_EMAIL_CHANNEL=mail et SMTP ; téléphone après ADR-0006
Cache, files, limiteurs base de données Redis
Jetons d’appareil sans expiration SANCTUM_TOKEN_EXPIRATION en minutes, à fixer au lot L8
Langues APP_LOCALE=fr, APP_SITE_LOCALE=ar idem
Variable Rôle
APP_SITE_LOCALE Langue par défaut du site public.
MEDIA_DISK, MEDIA_SIGNER Disque des médias et mode de signature (auto, app).
MEDIA_S3_KEY, MEDIA_S3_SECRET, MEDIA_S3_REGION, MEDIA_S3_BUCKET, MEDIA_S3_ENDPOINT, MEDIA_S3_PATH_STYLE Stockage compatible S3.
OTP_EMAIL_CHANNEL, OTP_PHONE_CHANNEL, OTP_DEFAULT_COUNTRY_CODE Canaux du code de connexion et indicatif par défaut.
SANCTUM_TOKEN_EXPIRATION Durée de vie des jetons d’appareil, en minutes ; vide = sans expiration.
ADMIN_EMAIL, ADMIN_PASSWORD Compte administrateur créé par le seeder — poste de développement seulement.

Environnements séparés, migrations versionnées, sauvegardes automatiques avec restauration testée, suivi d’erreurs et sonde de disponibilité, intégration continue à chaque push. La chaîne de déploiement se fige avec l’arbitrage de l’hébergement.