-
Notifications
You must be signed in to change notification settings - Fork 6
/
Dockerfile
130 lines (92 loc) · 2.61 KB
/
Dockerfile
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
########
# Python dependencies builder
#
FROM python:3.11-slim-bookworm AS python-builder
WORKDIR /app
ENV LANG=C.UTF-8
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
COPY docker/bin/apt-install.sh /usr/local/bin/
RUN apt-install.sh \
build-essential \
libpq-dev \
libffi-dev \
libjpeg62-turbo-dev \
zlib1g-dev \
libwebp-dev
RUN python -m venv /app/venv
COPY requirements/production.txt ./requirements/
# Install Python deps
RUN pip install --require-hashes --no-cache-dir -r requirements/production.txt
########
# assets builder and webpack dev server
#
FROM node:18-slim AS assets
ENV PATH=/app/node_modules/.bin:$PATH
WORKDIR /app
# copy dependency definitions
COPY package.json package-lock.json ./
# install dependencies
RUN npm ci
# copy supporting files and media
COPY .prettierignore webpack.config.js webpack.static.config.js ./
COPY ./src ./src
RUN npm run build
########
# django app container
#
FROM python:3.11-slim-bookworm AS app-base
# Extra python env
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PIP_DISABLE_PIP_VERSION_CHECK=1
ENV PATH="/app/venv/bin:$PATH"
# add non-priviledged user
RUN adduser --uid 1000 --disabled-password --gecos '' --no-create-home webdev
WORKDIR /app
EXPOSE 8000
CMD ["./bin/run.sh"]
COPY docker/bin/apt-install.sh /usr/local/bin/
RUN apt-install.sh gettext libxslt1.1 git curl libmagickwand-dev
# copy in Python environment
COPY --from=python-builder /app/venv /app/venv
# changes infrequently
COPY ./bin ./bin
COPY ./docker ./docker
COPY LICENSE ./
# TODO: add newrelic.ini and contribute.json to the COPY below
# We don't have anything in the repo with this, but we need it for revision.txt
RUN mkdir ./root_files
# changes more frequently
COPY ./birdbox ./birdbox
COPY ./src ./src
########
# expanded webapp image for testing and dev
#
FROM app-base AS devapp
CMD ["./bin/run-tests.sh"]
COPY requirements/* ./requirements/
COPY ./pyproject.toml ./
RUN pip install --require-hashes --no-cache-dir -r requirements/dev.txt
RUN pip install --require-hashes --no-cache-dir -r requirements/test.txt
RUN bin/run-sync-all.sh
RUN chown webdev:webdev -R .
USER webdev
# build args
ARG GIT_SHA=latest
ENV GIT_SHA=${GIT_SHA}
########
# final image for deployment
#
FROM app-base AS release
RUN bin/run-sync-all.sh
COPY --from=assets /app/birdbox/birdbox/static/ /app/birdbox/birdbox/static/
RUN honcho run --env docker/envfiles/prod.env docker/bin/build_staticfiles.sh
# Change User
RUN chown webdev:webdev -R .
USER webdev
# build args
ARG GIT_SHA=latest
ENV GIT_SHA=${GIT_SHA}
RUN echo "${GIT_SHA}" > ./root_files/revision.txt