advent22/Dockerfile

83 lines
1.8 KiB
Docker
Raw Normal View History

ARG NODE_VERSION=24
ARG PYTHON_VERSION=3.14-slim
2023-09-18 18:16:34 +00:00
############
# build ui #
############
2023-09-16 21:57:19 +00:00
ARG NODE_VERSION
2023-10-27 15:10:25 +00:00
FROM node:${NODE_VERSION} AS build-ui
2023-09-19 16:00:31 +00:00
# env setup
2023-09-18 18:16:34 +00:00
WORKDIR /usr/local/src/advent22_ui
2023-09-16 21:57:19 +00:00
2023-09-19 16:00:31 +00:00
# install advent22_ui dependencies
RUN --mount=type=bind,source=ui/package.json,target=package.json \
--mount=type=bind,source=ui/yarn.lock,target=yarn.lock \
set -ex; \
\
corepack enable; \
yarn install --frozen-lockfile;
2023-09-18 18:16:34 +00:00
2023-09-19 16:00:31 +00:00
# copy and build advent22_ui
2023-09-18 19:03:38 +00:00
COPY ui ./
RUN set -ex; \
\
yarn dlx update-browserslist-db@latest; \
yarn build --dest /tmp/advent22_ui; \
# exclude webpack-bundle-analyzer output
rm -f /tmp/advent22_ui/report.html;
############
# main app #
############
2023-09-18 18:16:34 +00:00
ARG PYTHON_VERSION
FROM python:${PYTHON_VERSION} AS production
2023-09-18 18:16:34 +00:00
# env setup for uv
ENV \
PATH="/opt/advent22/api/.venv/bin:$PATH" \
UV_COMPILE_BYTECODE=1 \
UV_NO_DEV=1 \
UV_LINK_MODE="copy"
2023-09-19 16:00:31 +00:00
EXPOSE 8000
2023-09-18 18:16:34 +00:00
# install advent22_api deps
WORKDIR /opt/advent22/api
RUN --mount=from=ghcr.io/astral-sh/uv,source=/uv,target=/bin/uv \
--mount=type=cache,target=/root/.cache/uv \
--mount=type=bind,source=api/uv.lock,target=uv.lock \
--mount=type=bind,source=api/pyproject.toml,target=pyproject.toml \
2023-09-18 19:03:38 +00:00
\
uv sync \
--locked \
--no-install-project \
--no-editable \
;
# install advent22_api
COPY api ./
RUN --mount=from=ghcr.io/astral-sh/uv,source=/uv,target=/bin/uv \
--mount=type=cache,target=/root/.cache/uv \
\
uv sync \
--locked \
--no-editable \
;
CMD [ "advent22" ]
2023-09-16 21:57:19 +00:00
2023-10-29 16:28:34 +00:00
# add prepared advent22_ui
COPY --from=build-ui /tmp/advent22_ui /opt/advent22/ui
2023-10-29 16:28:34 +00:00
# prepare data directory
WORKDIR /opt/advent22/data
VOLUME [ "/opt/advent22/data" ]
RUN chown -R nobody:nogroup ./
2023-09-18 19:03:38 +00:00
# run as unprivileged user
USER nobody