-
Notifications
You must be signed in to change notification settings - Fork 59
Expand file tree
/
Copy pathDockerfile-dev
More file actions
101 lines (85 loc) · 3.18 KB
/
Dockerfile-dev
File metadata and controls
101 lines (85 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# syntax=docker/dockerfile:1.7
ARG UV_VERSION=0.11.9
FROM ghcr.io/astral-sh/uv:${UV_VERSION} AS uv
FROM node:24-alpine AS dev-base
COPY --from=uv /uv /uvx /bin/
WORKDIR /seed
COPY ./.python-version /seed/.python-version
RUN --mount=type=cache,target=/root/.cache/uv \
apk add --no-cache \
alpine-sdk \
bash \
bash-completion \
brotli \
bzip2-dev \
cargo \
coreutils \
gdal \
gdal-dev \
geos-dev \
git \
libffi-dev \
libpq-dev \
libxml2-dev \
libxslt-dev \
linux-headers \
musl-dev \
ncurses-dev \
nginx \
nginx-mod-http-brotli \
openssl-dev \
pcre \
pcre-dev \
readline-dev \
sqlite-dev \
tzdata \
xz-dev \
zlib-dev && \
corepack enable && \
uv python install && \
python_path="$(uv python find)" && \
ln -sf "${python_path}" /usr/local/bin/python3 && \
ln -sf "${python_path}" /usr/local/bin/python && \
mkdir -p /run/nginx /var/log/supervisord
## Note on some of the commands above:
## - coreutils is required due to an issue with our wait-for-it.sh script:
## https://github.com/vishnubob/wait-for-it/issues/71
ENV GDAL_LIBRARY_PATH="/usr/lib/libgdal.so" \
GEOS_LIBRARY_PATH="/usr/lib/libgeos_c.so" \
PNPM_STORE_DIR="/pnpm/store" \
npm_config_python="/usr/local/bin/python3" \
UV_LINK_MODE=copy \
UV_PYTHON_INSTALL_DIR="/opt/uv/python" \
UV_PROJECT_ENVIRONMENT="/seed/.venv"
ENV PATH="/seed/.venv/bin:$PATH"
FROM dev-base AS python-dev-deps
COPY ./pyproject.toml /seed/pyproject.toml
COPY ./uv.lock /seed/uv.lock
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --managed-python --no-install-project && \
uv pip install supervisor==4.3.0 remote-pdb "watchdog[watchmedo]"
FROM dev-base AS frontend-dev-deps
ENV CI=true
COPY ./package.json /seed/package.json
COPY ./pnpm-lock.yaml /seed/pnpm-lock.yaml
COPY ./pnpm-workspace.yaml /seed/pnpm-workspace.yaml
COPY ./vendors/package.json /seed/vendors/package.json
COPY ./vendors/pnpm-lock.yaml /seed/vendors/pnpm-lock.yaml
COPY ./ng_seed/seed-angular /seed/ng_seed/seed-angular
RUN --mount=type=cache,id=pnpm,target=/pnpm/store,sharing=locked \
pnpm install --frozen-lockfile --store-dir "${PNPM_STORE_DIR}" --config.confirmModulesPurge=false && \
cd /seed/ng_seed/seed-angular && \
./node_modules/.bin/ng build
FROM dev-base AS dev
COPY --from=python-dev-deps /opt/uv/python /opt/uv/python
COPY --from=python-dev-deps /seed/.venv /seed/.venv
### Copy over the SEED application and prebuilt frontend assets
COPY . /seed/
COPY --from=frontend-dev-deps /seed/node_modules /seed/node_modules
COPY --from=frontend-dev-deps /seed/vendors/node_modules /seed/vendors/node_modules
COPY --from=frontend-dev-deps /seed/ng_seed/seed-angular/node_modules /seed/ng_seed/seed-angular/node_modules
COPY --from=frontend-dev-deps /seed/collected_static/ng-app /seed/collected_static/ng-app
COPY ./docker/wait-for-it.sh /usr/local/wait-for-it.sh
RUN git config --system --add safe.directory /seed
EXPOSE 80
CMD ["uv", "run", "hypercorn", "config.asgi:seed", "--bind", "0.0.0.0:80", "--reload"]