@@ -3,19 +3,18 @@ FROM docker.io/node:lts-bookworm-slim AS node-base-stage
33
44WORKDIR /app
55
6- COPY ./package.json ./package-lock.json ./
6+ COPY ./package.json ./
77
88RUN --mount=type=cache,target=/root/.npm \
9+ --mount=type=bind,source=package-lock.json,target=package-lock.json \
910 npm ci
1011
1112
1213FROM node-base-stage AS node-build-stage
1314
14- COPY ./tsconfig.json ./tsconfig.json
15- COPY ./socnet/static/private/css/ ./socnet/static/private/css/
16- COPY ./socnet/static/private/js/ ./socnet/static/private/js/
17-
18- RUN npm run build
15+ RUN --mount=type=bind,source=tsconfig.json,target=tsconfig.json \
16+ --mount=type=bind,source=socnet/static/private,target=socnet/static/private \
17+ npm run build
1918
2019
2120FROM node-base-stage AS node-watch-stage
@@ -25,11 +24,6 @@ RUN apt-get update \
2524 && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
2625 && rm -rf /var/lib/apt/lists/*
2726
28- ARG GID UID
29-
30- RUN groupmod --gid "${GID}" node \
31- && usermod --gid node --uid "${UID}" node
32-
3327USER node
3428
3529ENTRYPOINT ["tini" , "--" ]
@@ -40,12 +34,6 @@ CMD ["npm", "run", "watch"]
4034FROM docker.io/python:3.12-slim-bookworm AS python-base-stage
4135
4236ENV \
43- PIP_DISABLE_PIP_VERSION_CHECK=1 \
44- PIP_NO_COLOR=1 \
45- PIP_NO_INPUT=1 \
46- PIP_PROGRESS_BAR=off \
47- PIP_ROOT_USER_ACTION=ignore \
48- PIP_UPGRADE=1 \
4937 PYTHONDONTWRITEBYTECODE=1 \
5038 PYTHONUNBUFFERED=1
5139
@@ -54,32 +42,28 @@ WORKDIR /app
5442
5543FROM python-base-stage AS python-build-stage
5644
57- ENV \
58- POETRY_NO_ANSI=1 \
59- POETRY_NO_CACHE=1 \
60- POETRY_NO_INTERACTION=1
61-
6245RUN apt-get update \
6346 && apt-get install -y --no-install-recommends build-essential curl libpq-dev \
6447 && curl -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal \
6548 && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
6649 && rm -rf /var/lib/apt/lists/*
6750
68- ENV PATH= "/root/.cargo/bin:${PATH}"
69-
70- RUN --mount=type=cache,target=/root/.cache/pip,sharing=locked \
71- pip install poetry poetry-plugin-export
51+ ENV \
52+ PATH= "/root/.cargo/bin:${PATH}" \
53+ UV_COMPILE_BYTECODE=1 \
54+ UV_LINK_MODE=copy
7255
73- COPY ./poetry.lock ./pyproject.toml ./
7456COPY ./socnet_rs/ ./socnet_rs/
7557
76- ARG POETRY_GROUPS
58+ ARG EXTRA
7759
78- RUN --mount=type=cache,target=/app/socnet_rs/target,sharing=locked \
79- --mount=type=cache,target=/root/.cache/pip,sharing=locked \
60+ RUN --mount=from=ghcr.io/astral-sh/uv,source=/uv,target=/bin/uv \
61+ --mount=type=cache,target=/app/socnet_rs/target,sharing=locked \
62+ --mount=type=cache,target=/root/.cache/uv,sharing=locked \
8063 --mount=type=cache,target=/root/.cargo/registry,sharing=locked \
81- poetry export --without-hashes --only="${POETRY_GROUPS}" | \
82- pip wheel --wheel-dir /usr/src/app/wheels -r /dev/stdin
64+ --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
65+ --mount=type=bind,source=uv.lock,target=uv.lock \
66+ uv sync --extra="${EXTRA}" --no-dev --no-install-project --frozen
8367
8468
8569FROM python-base-stage AS python-base-run-stage
@@ -96,25 +80,36 @@ RUN apt-get update \
9680 && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
9781 && rm -rf /var/lib/apt/lists/*
9882
99- COPY --from=python-build-stage /usr/src/app/wheels/ /wheels/
83+ COPY --from=python-build-stage /app/.venv /app/.venv
84+
85+ ENV PATH="/app/.venv/bin:$PATH"
10086
101- RUN pip install --no-index --find-links /wheels/ /wheels/* \
102- && rm -rf /wheels/
87+ ENTRYPOINT ["tini" , "--" , "bash" , "/app/docker/django/entrypoint.sh" ]
10388
104- ENTRYPOINT ["tini " , "--" , " /app/docker/django/entrypoint .sh" ]
89+ CMD ["bash " , "/app/docker/django/start .sh" ]
10590
106- CMD ["/app/docker/django/start.sh" ]
10791
92+ FROM python-base-run-stage AS python-local-run-stage
10893
109- FROM python-ci-run-stage AS python-local-run-stage
94+ ENV DJANGO_SETTINGS_MODULE=config.settings.local
95+
96+ RUN apt-get update \
97+ && apt-get install -y --no-install-recommends gettext libpq-dev tini wait-for-it \
98+ && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
99+ && rm -rf /var/lib/apt/lists/* \
100+ && groupadd --gid 1000 django \
101+ && useradd --gid 1000 --no-log-init --uid 1000 django
110102
111- ARG GID UID
103+ COPY --chown=django:django --from=python-build-stage /app/.venv /app/.venv
112104
113- RUN groupadd --gid "${GID}" --system django \
114- && useradd --gid django --no-log-init --system --uid "${UID}" django
105+ ENV PATH="/app/.venv/bin:$PATH"
115106
116107USER django
117108
109+ ENTRYPOINT ["tini" , "--" , "bash" , "/app/docker/django/entrypoint.sh" ]
110+
111+ CMD ["bash" , "/app/docker/django/start.sh" ]
112+
118113
119114FROM python-base-run-stage AS python-production-run-stage
120115
@@ -124,22 +119,21 @@ RUN apt-get update \
124119 && apt-get install -y --no-install-recommends brotli gettext libpq-dev tini wait-for-it \
125120 && apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
126121 && rm -rf /var/lib/apt/lists/* \
127- && groupadd --system django \
128- && useradd --gid django --no-log-init --system django \
122+ && groupadd --gid 1000 django \
123+ && useradd --gid 1000 --no-log-init --uid 1000 django \
129124 && mkdir -p /var/www/django/static /var/www/django/media \
130125 && chown django:django /var/www/django/static /var/www/django/media
131126
132- COPY --from=python-build-stage /usr/src/ app/wheels/ /wheels/
127+ COPY --chown=django:django -- from=python-build-stage /app/.venv /app/.venv
133128
134- RUN pip install --no-index --find-links /wheels/ /wheels/* \
135- && rm -rf /wheels/
129+ ENV PATH="/app/.venv/bin:$PATH"
136130
137131COPY --chown=django:django . .
138- COPY --from=node-build-stage /app/socnet/static/public/css/ /app/socnet/static/public/css/
139- COPY --from=node-build-stage /app/socnet/static/public/js/ /app/socnet/static/public/js/
132+ COPY --chown=django:django -- from=node-build-stage /app/socnet/static/public/css/ /app/socnet/static/public/css/
133+ COPY --chown=django:django -- from=node-build-stage /app/socnet/static/public/js/ /app/socnet/static/public/js/
140134
141135USER django
142136
143- ENTRYPOINT ["tini" , "--" , "/app/docker/django/entrypoint.prod.sh" ]
137+ ENTRYPOINT ["tini" , "--" , "bash" , " /app/docker/django/entrypoint.prod.sh" ]
144138
145- CMD ["/app/docker/django/start.prod.sh" ]
139+ CMD ["bash" , " /app/docker/django/start.prod.sh" ]
0 commit comments