46 lines
1.4 KiB
Docker
46 lines
1.4 KiB
Docker
FROM mambaorg/micromamba:1.5.10
|
|
|
|
WORKDIR /app
|
|
|
|
# Install FreeCAD + Python via conda-forge (headless)
|
|
RUN micromamba create -y -n fc -c conda-forge \
|
|
python=3.12 freecad \
|
|
&& micromamba clean -a -y
|
|
|
|
# Activate env for subsequent RUN/CMD
|
|
ENV MAMBA_DOCKERFILE_ACTIVATE=1
|
|
SHELL ["/bin/bash", "-lc"]
|
|
|
|
# Install small OS deps (git for SheetMetal)
|
|
# NOTE: do NOT switch users; keep it simple and reproducible
|
|
USER root
|
|
RUN mkdir -p /var/lib/apt/lists/partial \
|
|
&& apt-get update \
|
|
&& apt-get install -y --no-install-recommends git ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Python deps into conda env
|
|
COPY requirements.txt /app/requirements.txt
|
|
RUN micromamba run -n fc pip install --no-cache-dir -r /app/requirements.txt
|
|
|
|
# App sources
|
|
COPY . /app
|
|
|
|
# SheetMetal workbench (we'll link it into HOME at runtime)
|
|
RUN mkdir -p /opt/freecad_mods \
|
|
&& git clone --depth 1 https://github.com/shaise/FreeCAD_SheetMetal.git /opt/freecad_mods/SheetMetal
|
|
|
|
# Make FreeCAD find SheetMetal without any host volume
|
|
ENV HOME=/opt/freecad_home
|
|
RUN mkdir -p /opt/freecad_home/.local/share/FreeCAD/Mod \
|
|
&& ln -s /opt/freecad_mods/SheetMetal /opt/freecad_home/.local/share/FreeCAD/Mod/SheetMetal
|
|
|
|
# Runtime env (overridable)
|
|
ENV FREECADCMD=/opt/conda/envs/fc/bin/freecadcmd
|
|
ENV FREECAD_TIMEOUT_SEC=1200
|
|
ENV FREECAD_LOCK_FILE=/app/_jobs/.freecad.lock
|
|
ENV HOME=/config
|
|
|
|
EXPOSE 5055
|
|
|
|
CMD ["bash", "-lc", "micromamba run -n fc gunicorn -w 1 --threads 4 -b 0.0.0.0:5055 app:app"] |