FROM docker.io/alpine:3.22 AS base ARG APP_UID=10000 ARG APP_GID=10000 ENV UV_PROJECT=/usr/local/src/dooris/api/ ENV UV_WORKING_DIR=/usr/local/src/dooris/api/ ENV UV_COMPILE_BYTECODE=1 ENV UV_LINK_MODE=copy ENV UV_CACHE_DIR=/var/cache/dooris/uv/ ENV UV_NO_MANAGED_PYTHON=true ENV VIRTUAL_ENV=/usr/local/share/dooris/venv/ ENV PNPM_HOME=/usr/local/share/dooris/pnpm/ ENV PATH=$PNPM_HOME:$VIRTUAL_ENV/bin:$PATH ENV DOORIS_SERVE_STATIC=/var/www/dooris/static/ WORKDIR /usr/local/src/dooris/ RUN apk add --no-cache uv python3 pnpm RUN addgroup -g $APP_GID dooris &&\ adduser -h /usr/local/src/dooris -u $APP_UID -G dooris -D dooris &&\ mkdir -p /var/www/dooris/ /usr/local/share/dooris/ /usr/local/src/dooris/ /var/cache/dooris/ &&\ chown -R dooris:dooris /var/www/dooris/ /usr/local/share/dooris/ /usr/local/src/dooris/ /var/cache/dooris/ FROM base AS deps USER dooris ADD --link --chown=dooris:dooris api/pyproject.toml api/uv.lock api/ ADD --link --chown=dooris:dooris app/package.json app/pnpm-lock.yaml app/ RUN uv venv $VIRTUAL_ENV &&\ uv sync --active --frozen --no-install-project --no-editable RUN pnpm --dir=app/ install --frozen-lockfile --package-import-method=copy FROM deps AS final ADD --chown=dooris:dooris --link . /usr/local/src/dooris/ RUN pnpm --dir=app/ run build --outDir=$DOORIS_SERVE_STATIC RUN --mount=type=cache,uid=$APP_UID,gid=$APP_GID,target=$UV_CACHE_DIR \ uv sync --active --frozen ENTRYPOINT [ "uv", "run", "--active", "dooris-api" ] EXPOSE 8000/tcp