Bâcher l'interface dans l'image complète aussi, repli inscriptible
- Le Dockerfile principal (worker, --serve, local-2m) n'avait pas l'étape de bake : le repli de webapp.py tentait d'écrire webapp_assets/ dans le paquet installé (dist-packages, propriété de root) et faisait planter l'import de la webapp sous l'utilisateur lidar. - Même étape de bake que Dockerfile.webapp, avec cd /tmp pour cibler le paquet installé (sinon la copie source /app capte l'import via sys.path). - Le repli de webapp.py ne casse plus l'import si le dossier du paquet n'est pas inscriptible : réécriture dans un répertoire temporaire.
This commit is contained in:
@ -58,6 +58,14 @@ COPY setup.py .
|
|||||||
COPY lidar_pipeline/ ./lidar_pipeline/
|
COPY lidar_pipeline/ ./lidar_pipeline/
|
||||||
RUN pip3 install --no-cache-dir .
|
RUN pip3 install --no-cache-dir .
|
||||||
|
|
||||||
|
# CSS/JS de l'interface (app.js/app.css + Leaflet) bâchés dans l'image :
|
||||||
|
# la webapp les sert depuis webapp_assets/ du paquet installé, plus depuis
|
||||||
|
# le volume (cf. Dockerfile.webapp). cd /tmp : sans lui, python3 -c met le
|
||||||
|
# répertoire courant (/app, copie source) sur sys.path et le bake atterrirait
|
||||||
|
# dans la copie au lieu du paquet installé (dist-packages) qu'utilise le
|
||||||
|
# conteneur au runtime.
|
||||||
|
RUN cd /tmp && python3 -c "import pathlib, lidar_pipeline.index as i; i._write_ui_assets(pathlib.Path(i.__file__).resolve().parent / 'webapp_assets')"
|
||||||
|
|
||||||
# Copy backward-compatible entry point
|
# Copy backward-compatible entry point
|
||||||
COPY process_lidar.py /usr/local/bin/
|
COPY process_lidar.py /usr/local/bin/
|
||||||
RUN chmod +x /usr/local/bin/process_lidar.py
|
RUN chmod +x /usr/local/bin/process_lidar.py
|
||||||
|
|||||||
@ -147,13 +147,19 @@ async def _log_client_ip(request: Request, call_next):
|
|||||||
return await call_next(request)
|
return await call_next(request)
|
||||||
|
|
||||||
# CSS/JS de l'interface : servis depuis l'IMAGE (bâchés au build, cf.
|
# CSS/JS de l'interface : servis depuis l'IMAGE (bâchés au build, cf.
|
||||||
# Dockerfile.webapp), plus depuis le volume — le code de l'interface suit
|
# Dockerfile / Dockerfile.webapp), plus depuis le volume — le code de
|
||||||
# l'image, pas le cache de tuiles. En repli (dev, source non bâchée), on les
|
# l'interface suit l'image, pas le cache de tuiles. En repli (dev, source
|
||||||
# régénère depuis les constantes de l'index pour que /assets soit actif même
|
# non bâchée), on les régénère depuis les constantes de l'index ; si le
|
||||||
# avant la première génération.
|
# dossier du paquet n'est pas inscriptible (install système sans bake),
|
||||||
|
# repli dans un répertoire temporaire pour ne pas casser l'import.
|
||||||
_assets_dir = Path(__file__).resolve().parent / "webapp_assets"
|
_assets_dir = Path(__file__).resolve().parent / "webapp_assets"
|
||||||
if not (_assets_dir / "app.js").is_file():
|
if not (_assets_dir / "app.js").is_file():
|
||||||
from .index import _write_ui_assets
|
from .index import _write_ui_assets
|
||||||
|
try:
|
||||||
|
_write_ui_assets(_assets_dir)
|
||||||
|
except OSError:
|
||||||
|
import tempfile
|
||||||
|
_assets_dir = Path(tempfile.gettempdir()) / "lidar_webapp_assets"
|
||||||
_write_ui_assets(_assets_dir)
|
_write_ui_assets(_assets_dir)
|
||||||
|
|
||||||
# --- Cache à la demande : la visualisation peuple le cache local -------------
|
# --- Cache à la demande : la visualisation peuple le cache local -------------
|
||||||
|
|||||||
Reference in New Issue
Block a user