2026-02-16 01:06:33 +00:00
|
|
|
ARG NODE_VERSION=24
|
2026-02-19 23:28:48 +00:00
|
|
|
ARG PYTHON_VERSION=3.14
|
2026-02-16 01:06:33 +00:00
|
|
|
|
2023-09-18 18:16:34 +00:00
|
|
|
############
|
|
|
|
|
# build ui #
|
|
|
|
|
############
|
2023-09-16 21:57:19 +00:00
|
|
|
|
2026-02-16 01:06:33 +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
|
2026-02-19 22:45:59 +00:00
|
|
|
RUN --mount=type=bind,source=ui/package.json,target=package.json \
|
|
|
|
|
--mount=type=bind,source=ui/yarn.lock,target=yarn.lock \
|
|
|
|
|
set -ex; \
|
|
|
|
|
\
|
2026-02-16 01:06:33 +00:00
|
|
|
corepack enable; \
|
2026-02-19 22:45:59 +00:00
|
|
|
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 ./
|
2026-02-16 01:06:33 +00:00
|
|
|
RUN set -ex; \
|
2026-02-19 22:45:59 +00:00
|
|
|
\
|
2026-02-16 01:06:33 +00:00
|
|
|
yarn dlx update-browserslist-db@latest; \
|
2026-02-19 22:45:59 +00:00
|
|
|
yarn build --dest /tmp/advent22_ui; \
|
2026-02-16 01:06:33 +00:00
|
|
|
# exclude webpack-bundle-analyzer output
|
2026-02-19 22:45:59 +00:00
|
|
|
rm -f /tmp/advent22_ui/report.html;
|
2026-02-16 01:06:33 +00:00
|
|
|
|
2026-02-19 23:28:48 +00:00
|
|
|
|
|
|
|
|
###############
|
|
|
|
|
# install app #
|
|
|
|
|
###############
|
2023-09-18 18:16:34 +00:00
|
|
|
|
2026-02-19 02:09:28 +00:00
|
|
|
ARG PYTHON_VERSION
|
2026-02-19 23:28:48 +00:00
|
|
|
FROM dhi.io/python:${PYTHON_VERSION}-dev AS install-app
|
2023-09-18 18:16:34 +00:00
|
|
|
|
2026-02-19 23:28:48 +00:00
|
|
|
# env setup
|
|
|
|
|
WORKDIR /opt/advent22
|
|
|
|
|
ENV UV_WORKING_DIR="api/" \
|
2026-02-19 02:09:28 +00:00
|
|
|
UV_COMPILE_BYTECODE=1 \
|
|
|
|
|
UV_NO_DEV=1 \
|
2026-02-19 22:45:59 +00:00
|
|
|
UV_LINK_MODE="copy"
|
|
|
|
|
|
2026-02-19 02:09:28 +00:00
|
|
|
RUN --mount=from=ghcr.io/astral-sh/uv,source=/uv,target=/bin/uv \
|
|
|
|
|
--mount=type=cache,target=/root/.cache/uv \
|
2026-02-19 23:28:48 +00:00
|
|
|
--mount=type=bind,source=api/uv.lock,target=api/uv.lock \
|
|
|
|
|
--mount=type=bind,source=api/pyproject.toml,target=api/pyproject.toml \
|
|
|
|
|
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
|
|
|
\
|
2026-02-19 23:28:48 +00:00
|
|
|
# install advent22_api deps
|
2026-02-19 02:09:28 +00:00
|
|
|
uv sync \
|
|
|
|
|
--locked \
|
|
|
|
|
--no-install-project \
|
|
|
|
|
--no-editable \
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
# install advent22_api
|
2026-02-19 23:28:48 +00:00
|
|
|
COPY api api/
|
2026-02-19 02:09:28 +00:00
|
|
|
RUN --mount=from=ghcr.io/astral-sh/uv,source=/uv,target=/bin/uv \
|
|
|
|
|
--mount=type=cache,target=/root/.cache/uv \
|
2026-02-16 01:06:33 +00:00
|
|
|
\
|
2026-02-19 02:09:28 +00:00
|
|
|
uv sync \
|
|
|
|
|
--locked \
|
|
|
|
|
--no-editable \
|
|
|
|
|
;
|
|
|
|
|
|
2026-02-19 23:28:48 +00:00
|
|
|
# add prepared advent22_ui
|
|
|
|
|
COPY --from=build-ui /tmp/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
|
2026-02-19 22:45:59 +00:00
|
|
|
CMD [ "advent22" ]
|
2023-09-16 21:57:19 +00:00
|
|
|
|
2026-02-19 23:28:48 +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
|
|
|
|
2026-02-19 22:45:59 +00:00
|
|
|
WORKDIR /opt/advent22/data
|
|
|
|
|
VOLUME [ "/opt/advent22/data" ]
|
2026-02-19 02:09:28 +00:00
|
|
|
|
2023-09-18 19:03:38 +00:00
|
|
|
# run as unprivileged user
|
|
|
|
|
USER nobody
|