Spaces:
Paused
Paused
| # syntax=docker/dockerfile:1 | |
| FROM ubuntu:22.04 | |
| ENV DEBIAN_FRONTEND=noninteractive | |
| # ----------------------------- | |
| # System deps | |
| # ----------------------------- | |
| RUN apt-get update \ | |
| && apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| git \ | |
| make \ | |
| curl \ | |
| ca-certificates \ | |
| pkg-config \ | |
| libudev-dev \ | |
| libsystemd-dev \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # ----------------------------- | |
| # Node.js (v22.21.1) via nvm | |
| # ----------------------------- | |
| ENV NVM_DIR=/opt/nvm | |
| RUN mkdir -p ${NVM_DIR} \ | |
| && curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash | |
| ARG NODE_VERSION=22.21.1 | |
| RUN bash -lc ". ${NVM_DIR}/nvm.sh \ | |
| && nvm install ${NODE_VERSION} \ | |
| && nvm alias default ${NODE_VERSION} \ | |
| && nvm use default \ | |
| && node -v \ | |
| && npm -v \ | |
| && npx -v" | |
| ENV PATH=${NVM_DIR}/versions/node/v${NODE_VERSION}/bin:$PATH | |
| # ----------------------------- | |
| # uv (system-wide) | |
| # ----------------------------- | |
| RUN curl -LsSf https://astral.sh/uv/install.sh | sh \ | |
| && install -m 0755 /root/.local/bin/uv /usr/local/bin/uv | |
| ENV UV_PYTHON_INSTALL_DIR=/opt/uv/python | |
| RUN mkdir -p /opt/uv/python \ | |
| && chmod -R 755 /opt/uv | |
| ARG PYTHON_VERSION=3.12.12 | |
| RUN uv python install ${PYTHON_VERSION} | |
| # ----------------------------- | |
| # Clone Opentrons monorepo | |
| # ----------------------------- | |
| ARG OPENTRONS_REF=edge | |
| RUN git clone --depth 1 --branch ${OPENTRONS_REF} https://github.com/Opentrons/opentrons.git /root/opentrons | |
| WORKDIR /root/opentrons | |
| RUN uv run --python ${PYTHON_VERSION} make -C robot-server setup | |
| # ----------------------------- | |
| # App user + deps | |
| # ----------------------------- | |
| RUN useradd -m -u 1000 user | |
| USER user | |
| ENV HOME=/home/user | |
| ENV UV_CACHE_DIR=/home/user/.cache/uv | |
| WORKDIR $HOME/app | |
| RUN mkdir -p $UV_CACHE_DIR | |
| # install python deps (fastapi/uvicorn含む) | |
| COPY --chown=user requirements.txt $HOME/app/requirements.txt | |
| RUN uv venv --python ${PYTHON_VERSION} .venv \ | |
| && uv pip install --python .venv/bin/python -r requirements.txt | |
| # copy app code (api.py / entrypoint.sh など) | |
| COPY --chown=user . $HOME/app | |
| # ----------------------------- | |
| # Entrypoint | |
| # ----------------------------- | |
| USER root | |
| COPY entrypoint.sh /entrypoint.sh | |
| RUN chmod +x /entrypoint.sh | |
| WORKDIR /root/opentrons | |
| ENV PORT=7860 | |
| EXPOSE 7860 | |
| ENTRYPOINT ["/bin/bash", "-lc", "/entrypoint.sh"] | |