File size: 2,351 Bytes
14a7de5
a6561fb
8f22300
a20ad5f
6751543
14a7de5
fb2899e
14a7de5
a20ad5f
 
a6561fb
 
 
a20ad5f
 
51a9c73
a6561fb
 
a20ad5f
bee3f8a
14a7de5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
df7d9dd
 
 
 
8b3e169
df7d9dd
bee3f8a
98ecc08
a20ad5f
2efee4c
14a7de5
fb2899e
14a7de5
e8eeb0f
df7d9dd
51a9c73
 
a20ad5f
16a9021
14a7de5
fb2899e
14a7de5
4afed9d
30ea8d8
8b3e169
df7d9dd
8b3e169
30ea8d8
 
8b3e169
 
fb2899e
a20ad5f
 
 
 
fb2899e
30ea8d8
ac3964b
14a7de5
 
 
a20ad5f
5231d74
a20ad5f
 
2694bf1
fb2899e
 
 
14a7de5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# 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"]