Files
edubox/prestashop-image/README.md
T
EduBox Dev fc61404271 feat: installation offline complete, HTTPS registry, 8Go WSL, v0.3.18
- Wizard: installation 100% offline (WSL bundle, Podman MSI, machine image, docker-compose)
- Wizard: suppression de wsl --install --no-distribution
- Wizard: .wslconfig avec 8Go RAM / 4 CPU
- Wizard: operations asynchrones pour eviter le freeze UI
- Wizard: detection automatique de podman.exe
- Wizard: version 0.1.1
- Agent: passage en v0.3.18
- Serveur: registry PrestaShop en HTTPS via gitea.alfrednobel.edudeploy.com
- Caddy: config gitea.alfrednobel.edudeploy.com
- Docs: mise a jour SUIVI_INSTALLER.md, README.md, seed.ts
2026-07-02 22:52:28 +00:00

5.5 KiB
Raw Blame History

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 plusieurs 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.
  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 local

cd /opt/edubox/prestashop-image
docker build -t edubox-prestashop:9 .

Push sur le registry Gitea

docker tag edubox-prestashop:9 \
  gitea.alfrednobel.edudeploy.com/yacine/edubox/edubox-prestashop:9-edubox-9
docker push \
  gitea.alfrednobel.edudeploy.com/yacine/edubox/edubox-prestashop:9-edubox-9

Patches appliqués

Patch Fichier modifié Objectif
edubox-tools.patch classes/Tools.php getShopDomain() / getShopDomainSsl() utilisent getHttpHost() dynamiquement en conservant les ports non standards (ex. localhost:8088) ; .htaccess généré sans condition HTTP_HOST (images/catégories).
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-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 en conservant les ports non standards.
edubox-shop-getbaseurl.patch classes/shop/Shop.php Shop::getBaseURL() utilise le host/port 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-configuration.patch classes/Configuration.php PS_SHOP_DOMAIN, PS_SHOP_DOMAIN_SSL, PS_SSL_ENABLED, _PS_BASE_URL_, _PS_BASE_URL_SSL_ sont résolus dynamiquement depuis la requête, pas depuis le cache DB.
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 adminadmin-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-dashboard-warning.patch controllers/admin/AdminDashboardController.php Désactive le bandeau davertissement "domaine différent de SEO & URL".
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

  • proxy.conf : Apache truste X-Forwarded-Proto: https pour positionner 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, HTTP_X_FORWARDED_PROTO et HTTP_HOST corrompus ; définit 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- ).
  • edubox-clear-cache-init.sh/tmp/init-scripts/edubox-clear-cache.sh : vidage des caches Smarty/Symfony et des assets CCC à chaque démarrage du conteneur, afin que les changements de domaine/port soient pris en compte.

Utilisation dans EduBox

Le template PrestaShop 9 dans server/prisma/seed.ts utilise cette image :

app:
  image: gitea.alfrednobel.edudeploy.com/yacine/edubox/edubox-prestashop:9-edubox-8

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

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.
  2. Build manuel sur chaque agent : copier ce dossier sur l'agent et lancer docker build avant le premier déploiement.