Initial commit: custom PrestaShop 9 EduBox image

This commit is contained in:
2026-06-20 20:32:55 +00:00
commit d97a78e6b6
16 changed files with 466 additions and 0 deletions
+63
View File
@@ -0,0 +1,63 @@
# EduBox PrestaShop 9 Image
Image Docker patchée basée sur `prestashop/prestashop:9`, conçue pour fonctionner
avec le reverse proxy dynamique d'EduBox.
## Pourquoi une image patchée ?
PrestaShop 9 (Apache 2.4 + PHP 8.5) a deux problèmes majeurs derrière EduBox :
1. Les headers `X-Forwarded-*` sont corrompus par Apache/PHP : `$_SERVER` les
reçoit sous forme d'arrays au lieu de strings. On contourne ce bug via
`getenv()` dans `config/defines_custom.inc.php`.
2. PrestaShop utilise partout le domaine stocké en base (`ps_shop_url`) et la
configuration `PS_SSL_ENABLED`. Derrière EduBox, le domaine public change à
chaque instance (`<id>.alfrednobel.edudeploy.com`) et toutes les requêtes
publiques arrivent en HTTPS. Les patches forcent l'utilisation de l'hôte et
du protocole de la requête courante.
## Build
```bash
cd /opt/edubox/prestashop-image
docker build -t edubox-prestashop:9 .
```
## Patches appliqués
| Patch | Fichier modifié | Objectif |
|-------|-----------------|----------|
| `edubox-tools.patch` | `classes/Tools.php` | `getShopDomain()` / `getShopDomainSsl()` utilisent `getHttpHost()` dynamiquement. |
| `edubox-link.patch` | `classes/Link.php` | `getBaseLink()` utilise `usingSecureMode()` et `getHttpHost()`. |
| `edubox-frontcontroller.patch` | `classes/controller/FrontController.php` | Désactive `sslRedirection()` pour éviter les boucles HTTP/HTTPS. |
| `edubox-shop.patch` | `classes/shop/Shop.php` | `Shop::initialize()` utilise le shop par défaut sans redirection forcée. |
| `edubox-shopcontext.patch` | `src/Core/Context/ShopContext.php` | `getBaseURL()` du BO est reconstruit à partir de la requête courante. |
| `edubox-asseturl.patch` | `src/Adapter/Assets/AssetUrlGeneratorTrait.php` | Les assets CCC utilisent le protocole de la requête, pas `PS_SSL_ENABLED`. |
| `edubox-install.patch` | `src/PrestaShopBundle/Install/Install.php` | `finalize()` respecte `PS_FOLDER_ADMIN` (évite le bug overlayfs `admin``admin-edubox`). |
## Fichiers injectés
- `proxy.conf` : Apache truste `X-Forwarded-Proto: https` pour positionner
`HTTPS=on` dans l'environnement PHP.
- `config/defines_custom.inc.php` : normalise `HTTP_X_FORWARDED_HOST`,
`HTTP_X_FORWARDED_PROTO` et `HTTP_HOST` corrompus ; définit
`PS_TRUSTED_PROXIES` pour Symfony.
## Utilisation dans EduBox
Le template PrestaShop 9 dans `server/prisma/seed.ts` utilise cette image :
```yaml
app:
image: edubox-prestashop:9
```
## Déploiement sur les agents
L'image doit être accessible depuis chaque agent étudiant. Deux options :
1. **Registry privé** (recommandé) : tagger et pousser l'image sur un registry
(Docker Hub, registry Gitea, GHCR, etc.) puis mettre à jour
`server/prisma/seed.ts` avec le nom complet (`monregistry/edubox-prestashop:9`).
2. **Build manuel sur chaque agent** : copier le dossier `prestashop-image` sur
l'agent et lancer `docker build` avant le premier déploiement.