advent22/Dockerfile

99 lines
2.3 KiB
Docker
Raw Permalink Normal View History

ARG NODE_VERSION=24
ARG PYTHON_VERSION=3.14
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
# install ui dependencies
2023-09-18 18:16:34 +00:00
WORKDIR /usr/local/src/advent22_ui
RUN --mount=type=bind,source=ui/package.json,target=package.json \
--mount=type=bind,source=ui/yarn.lock,target=yarn.lock \
--mount=type=bind,source=ui/.yarn/releases,target=.yarn/releases \
--mount=type=bind,source=ui/.yarnrc.yml,target=.yarnrc.yml \
--mount=type=cache,id=ui,target=/root/.yarn \
\
yarn install --immutable --check-cache;
2023-09-18 18:16:34 +00:00
# copy and build ui
2023-09-18 19:03:38 +00:00
COPY ui ./
RUN --mount=type=cache,id=ui,target=/root/.yarn \
set -ex; \
\
2026-02-22 01:31:07 +00:00
yarn build --outDir /opt/advent22/ui; \
# exclude vite-bundle-analyzer output
rm /opt/advent22/ui/stats.html;
###############
# install app #
###############
2023-09-18 18:16:34 +00:00
ARG PYTHON_VERSION
FROM dhi.io/python:${PYTHON_VERSION}-dev AS install-app
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
2023-09-18 18:16:34 +00:00
# env setup
WORKDIR /opt/advent22
ENV UV_COMPILE_BYTECODE=1 \
UV_NO_DEV=1 \
UV_LINK_MODE="copy"
RUN --mount=type=bind,source=api/uv.lock,target=api/uv.lock \
--mount=type=bind,source=api/pyproject.toml,target=api/pyproject.toml \
--mount=type=bind,source=api/.python-version,target=api/.python-version \
--mount=type=cache,id=api,target=/root/.cache/uv \
set -ex; \
\
# prepare data directory
mkdir data; \
chown nobody:nobody data; \
chmod u=rwx,g=rx,o=rx data; \
2023-09-18 19:03:38 +00:00
\
# install api deps
uv sync \
--project api/ \
--locked \
--no-install-project \
--no-editable \
;
# install api
COPY api api/
RUN --mount=type=cache,id=api,target=/root/.cache/uv \
\
uv sync \
--project api/ \
--locked \
--no-editable \
;
# add prepared ui
COPY --from=build-ui /opt/advent22/ui ui/
####################
# production image #
####################
ARG PYTHON_VERSION
FROM dhi.io/python:${PYTHON_VERSION} AS production
ENV PATH="/opt/advent22/api/.venv/bin:$PATH"
EXPOSE 8000
CMD [ "advent22" ]
2023-09-16 21:57:19 +00:00
ARG PYTHON_VERSION
COPY --from=install-app /opt/python/lib/python${PYTHON_VERSION} /opt/python/lib/python${PYTHON_VERSION}/
COPY --from=install-app /opt/advent22 /opt/advent22/
2023-10-29 16:28:34 +00:00
WORKDIR /opt/advent22/data
VOLUME [ "/opt/advent22/data" ]
2023-09-18 19:03:38 +00:00
# run as unprivileged user
USER nobody