docs: complete README with recent patches, build/push and upgrade instructions

This commit is contained in:
2026-06-20 20:36:35 +00:00
parent d97a78e6b6
commit fdc6d83bdf
+39 -9
View File
@@ -5,7 +5,7 @@ avec le reverse proxy dynamique d'EduBox.
## Pourquoi une image patchée ? ## Pourquoi une image patchée ?
PrestaShop 9 (Apache 2.4 + PHP 8.5) a deux problèmes majeurs derrière EduBox : PrestaShop 9 (Apache 2.4 + PHP 8.5) a plusieurs problèmes majeurs derrière EduBox :
1. Les headers `X-Forwarded-*` sont corrompus par Apache/PHP : `$_SERVER` les 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 reçoit sous forme d'arrays au lieu de strings. On contourne ce bug via
@@ -15,33 +15,53 @@ PrestaShop 9 (Apache 2.4 + PHP 8.5) a deux problèmes majeurs derrière EduBox :
chaque instance (`<id>.alfrednobel.edudeploy.com`) et toutes les requêtes 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 publiques arrivent en HTTPS. Les patches forcent l'utilisation de l'hôte et
du protocole de la requête courante. du protocole de la requête courante.
3. Les agents étudiants peuvent être hors ligne. Le pack de langue français est
donc embarqué dans l'image pour éviter tout téléchargement pendant
l'installation.
## Build ## Build local
```bash ```bash
cd /opt/edubox/prestashop-image cd /opt/edubox/prestashop-image
docker build -t edubox-prestashop:9 . docker build -t edubox-prestashop:9 .
``` ```
## Push sur le registry Gitea
```bash
docker tag edubox-prestashop:9 \
151.80.60.98:3001/yacine/edubox/edubox-prestashop:9-edubox-7
docker push \
151.80.60.98:3001/yacine/edubox/edubox-prestashop:9-edubox-7
```
## Patches appliqués ## Patches appliqués
| Patch | Fichier modifié | Objectif | | Patch | Fichier modifié | Objectif |
|-------|-----------------|----------| |-------|-----------------|----------|
| `edubox-tools.patch` | `classes/Tools.php` | `getShopDomain()` / `getShopDomainSsl()` utilisent `getHttpHost()` dynamiquement. | | `edubox-tools.patch` | `classes/Tools.php` | `getShopDomain()` / `getShopDomainSsl()` utilisent `getHttpHost()` dynamiquement ; `.htaccess` généré sans condition `HTTP_HOST` (images/catégories). |
| `edubox-link.patch` | `classes/Link.php` | `getBaseLink()` utilise `usingSecureMode()` et `getHttpHost()`. | | `edubox-link.patch` | `classes/Link.php` | `getBaseLink()` et `getAdminBaseLink()` utilisent `usingSecureMode()` et `getHttpHost()`. |
| `edubox-frontcontroller.patch` | `classes/controller/FrontController.php` | Désactive `sslRedirection()` pour éviter les boucles HTTP/HTTPS. | | `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-shop.patch` | `classes/shop/Shop.php` | `Shop::initialize()` utilise le shop par défaut sans redirection forcée. |
| `edubox-shopurl.patch` | `classes/shop/ShopUrl.php` | `getMainShopDomain()` / `getMainShopDomainSSL()` retournent le domaine de la requête. |
| `edubox-shopcontext.patch` | `src/Core/Context/ShopContext.php` | `getBaseURL()` du BO est reconstruit à partir de la requête courante. | | `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-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`). | | `edubox-install.patch` | `src/PrestaShopBundle/Install/Install.php` | `finalize()` respecte `PS_FOLDER_ADMIN` (évite le bug overlayfs `admin``admin-edubox`). |
| `edubox-install-language.patch` | `src/PrestaShopBundle/Install/Install.php` | Évite le téléchargement du pack legacy `fr.gzip` quand le pack Symfony est embarqué. |
| `edubox-language.patch` | `classes/Language.php` | Utilise `_PS_TRANSLATIONS_DIR_` au runtime pour le cache langue ; évite le téléchargement réseau si le pack est présent. |
| `edubox-docker-run.patch` | `/tmp/docker_run.sh` | Supprime un `install.lock` résiduel si une installation précédente a échoué. |
## Fichiers injectés ## Fichiers injectés
- `proxy.conf` : Apache truste `X-Forwarded-Proto: https` pour positionner - `proxy.conf` : Apache truste `X-Forwarded-Proto: https` pour positionner
`HTTPS=on` dans l'environnement PHP. `HTTPS=on` dans l'environnement PHP. Active aussi `AllowOverride All` pour
que le `.htaccess` de PrestaShop fonctionne.
- `config/defines_custom.inc.php` : normalise `HTTP_X_FORWARDED_HOST`, - `config/defines_custom.inc.php` : normalise `HTTP_X_FORWARDED_HOST`,
`HTTP_X_FORWARDED_PROTO` et `HTTP_HOST` corrompus ; définit `HTTP_X_FORWARDED_PROTO` et `HTTP_HOST` corrompus ; définit
`PS_TRUSTED_PROXIES` pour Symfony. `PS_TRUSTED_PROXIES` pour Symfony.
- `translations-symfony-fr-FR.zip` → copié sous `sf-fr-FR.zip` dans
`/var/www/html/translations/` : pack de langue Symfony français embarqué
( PrestaShop attend le préfixe `sf-` ).
## Utilisation dans EduBox ## Utilisation dans EduBox
@@ -49,15 +69,25 @@ Le template PrestaShop 9 dans `server/prisma/seed.ts` utilise cette image :
```yaml ```yaml
app: app:
image: edubox-prestashop:9 image: 151.80.60.98:3001/yacine/edubox/edubox-prestashop:9-edubox-7
``` ```
## Mise à jour vers une nouvelle version de PrestaShop
Si PrestaShop sort une version `9.x.y` :
1. Modifier le `FROM` du Dockerfile : `FROM prestashop/prestashop:9.x.y`
2. Relancer le build. Les patches qui échouent doivent être adaptés aux
nouvelles lignes/code de PrestaShop.
3. Re-tagger et pousser : `9.x.y-edubox-1`.
4. Mettre à jour `server/prisma/seed.ts` avec le nouveau tag.
## Déploiement sur les agents ## Déploiement sur les agents
L'image doit être accessible depuis chaque agent étudiant. Deux options : L'image doit être accessible depuis chaque agent étudiant. Deux options :
1. **Registry privé** (recommandé) : tagger et pousser l'image sur un registry 1. **Registry privé** (recommandé) : tagger et pousser l'image sur un registry
(Docker Hub, registry Gitea, GHCR, etc.) puis mettre à jour (Docker Hub, registry Gitea, GHCR, etc.) puis mettre à jour
`server/prisma/seed.ts` avec le nom complet (`monregistry/edubox-prestashop:9`). `server/prisma/seed.ts` avec le nom complet.
2. **Build manuel sur chaque agent** : copier le dossier `prestashop-image` sur 2. **Build manuel sur chaque agent** : copier ce dossier sur l'agent et lancer
l'agent et lancer `docker build` avant le premier déploiement. `docker build` avant le premier déploiement.