Download Dockerfile from FineEnvs/DesignGym: direct link, hf CLI and curl.
- Browser
- Download file 2.22 kB
-
https://huggingface.co/spaces/FineEnvs/DesignGym/resolve/main/Dockerfile
- Command line
-
hf download hf://spaces/FineEnvs/DesignGym/Dockerfile
-
curl -L -o Dockerfile https://huggingface.co/spaces/FineEnvs/DesignGym/resolve/main/Dockerfile
2.22 kB
| # DesignGym: OpenEnv server + editor + headless Chromium for the GUI surface. | |
| FROM python:3.12-slim | |
| ENV PYTHONUNBUFFERED=1 UV_LINK_MODE=copy PLAYWRIGHT_BROWSERS_PATH=/opt/ms-playwright | |
| WORKDIR /app/design_canvas | |
| # skia-python links against EGL/GL and fontconfig even when rendering on the CPU. | |
| RUN apt-get update && apt-get install -y --no-install-recommends libegl1 libgl1 libfontconfig1 \ | |
| && rm -rf /var/lib/apt/lists/* \ | |
| && pip install --no-cache-dir uv | |
| # Dependencies first, for layer caching. | |
| COPY pyproject.toml uv.lock ./ | |
| RUN uv sync --frozen --no-dev --extra daytona --no-install-project | |
| COPY . . | |
| RUN uv sync --frozen --no-dev --extra daytona \ | |
| && .venv/bin/python -m playwright install --with-deps chromium \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Tasks. With corpus-manifest.json in the build context (the Space), the server | |
| # plays the full Crello corpus from the FineEnvs/crello-bucket mount at /corpus: | |
| # the image holds code and the manifest only. Without it (a plain local | |
| # `docker build`), a small task pack is built into the image instead. | |
| ARG PACK_TRAIN=240 | |
| ARG PACK_VALIDATION=60 | |
| ARG PACK_TEST=120 | |
| ENV HF_HOME=/tmp/hf DESIGN_CANVAS_CACHE=/tmp/design-canvas-cache DESIGN_CANVAS_SOURCE_ROOT=/corpus | |
| RUN if [ -f corpus-manifest.json ]; then \ | |
| echo "serving the bucket-backed corpus"; \ | |
| else \ | |
| .venv/bin/design-canvas prepare --pack /data/pack --train ${PACK_TRAIN} \ | |
| --validation ${PACK_VALIDATION} --test ${PACK_TEST} && rm -rf /tmp/hf; \ | |
| fi | |
| COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh | |
| # an upload to the Hub does not keep the executable bit | |
| RUN chmod 0755 /usr/local/bin/docker-entrypoint.sh | |
| # The server only reads /app and /data; no chown, which would copy both into a new layer. | |
| RUN useradd --create-home --uid 1000 user | |
| USER user | |
| ENV PATH="/app/design_canvas/.venv/bin:$PATH" PORT=8000 MAX_CONCURRENT_ENVS=64 | |
| EXPOSE 8000 | |
| HEALTHCHECK --interval=30s --timeout=5s --start-period=60s --retries=3 \ | |
| CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" | |
| ENTRYPOINT ["docker-entrypoint.sh"] | |
| # OpenEnv's entry point: one process, or DESIGN_CANVAS_WORKERS processes behind one URL (server/router.py) | |
| CMD ["server"] | |