/
Dockerfile
77 lines (53 loc) · 2.24 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
# This is only intended to build the application for deployment on AWS Lambda with Zappa
# it has limited usage locally
FROM node:20-alpine AS js-static
ENV APP_DIR=/srv/app
ENV NODE_ENV=production
WORKDIR $APP_DIR
COPY package.json package-lock.json $APP_DIR
RUN npm ci
COPY assets ./assets
COPY esbuild.mjs ./
RUN npm run build
FROM python:3.12 AS static-files
ENV APP_DIR=/srv/app \
POETRY_VIRTUALENVS_CREATE=false \
# for poetry, see https://python-poetry.org/docs/master/#installing-with-the-official-installer
PATH="/root/.local/bin:${PATH}"
WORKDIR $APP_DIR
RUN curl -sSL https://install.python-poetry.org | POETRY_VERSION=1.8.2 python3 -
COPY pyproject.toml poetry.lock $APP_DIR
ENV DJANGO_SETTINGS_MODULE onlineweb4.settings
RUN poetry install --no-interaction --no-ansi --no-dev
COPY . .
COPY --from=js-static $APP_DIR/webpack-stats.json ./webpack-stats.json
COPY --from=js-static $APP_DIR/bundles ./bundles
RUN ./manage.py collectstatic
FROM amazon/aws-lambda-python:3.12
LABEL maintainer="Dotkom <dotkom@online.ntnu.no>"
ENV POETRY_VIRTUALENVS_CREATE=false \
PATH="/root/.local/bin:${PATH}"
ARG FUNCTION_DIR="/var/task/"
COPY pyproject.toml poetry.lock $FUNCTION_DIR
# Setup Python environment
RUN dnf install -y git unzip libffi \
&& curl -sSL https://install.python-poetry.org | POETRY_VERSION=1.8.2 python3 - \
# silent, show errors and location (aka follow redirect)
&& curl -sSL --output vault-lambda-extension.zip \
https://releases.hashicorp.com/vault-lambda-extension/0.10.3/vault-lambda-extension_0.10.3_linux_amd64.zip \
&& unzip vault-lambda-extension.zip -d /opt \
&& poetry install --no-root --no-dev -E prod \
&& poetry cache clear . --all -n \
&& dnf remove -y git unzip perl-Git \
&& dnf clean all \
&& rm vault-lambda-extension.zip \
&& rm -rf /var/cache/dnf
COPY ./ $FUNCTION_DIR
RUN ZAPPA_HANDLER_PATH=$(python -c "from zappa import handler; print (handler.__file__)") \
&& echo $ZAPPA_HANDLER_PATH \
&& cp $ZAPPA_HANDLER_PATH $FUNCTION_DIR
COPY --from=static-files /srv/app/webpack-stats.json ./
ARG VERSION
# https://docs.sentry.io/platforms/python/guides/logging/configuration/releases/#setting-a-release
ENV SENTRY_VERSION=${VERSION}
CMD [ "handler.lambda_handler" ]