1
- ARG FUNCTION_DIR="/home/app/"
1
+ # check=skip=SecretsUsedInArgOrEnv
2
+ ARG FUNCTION_DIR="/home/app"
2
3
3
- FROM python:3.11-slim as build-stage
4
+ FROM python:3.11-slim AS base
4
5
5
- ARG FUNCTION_DIR
6
-
7
- RUN mkdir -p ${FUNCTION_DIR}
8
- WORKDIR ${FUNCTION_DIR}
6
+ ENV DJANGO_SETTINGS_MODULE=pycon.settings.prod \
7
+ AWS_MEDIA_BUCKET=example \
8
+ AWS_REGION_NAME=eu-central-1 \
9
+ SECRET_KEY=DEMO \
10
+ STRIPE_SECRET_API_KEY=demo \
11
+ STRIPE_SUBSCRIPTION_PRICE_ID=demo \
12
+ STRIPE_WEBHOOK_SIGNATURE_SECRET=demo \
13
+ CELERY_BROKER_URL=demo \
14
+ CELERY_RESULT_BACKEND=demo \
15
+ HASHID_DEFAULT_SECRET_SALT=demo
9
16
10
17
RUN apt-get update -y && apt-get install -y \
11
- gcc libpq-dev git \
12
- # Pillow
13
- libtiff5-dev libjpeg62 libopenjp2-7-dev zlib1g-dev \
14
- libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python3-tk \
15
- libharfbuzz-dev libfribidi-dev libxcb1-dev libldap2-dev libldap-2.5-0 \
16
- ffmpeg libsm6 libxext6 libglib2.0-0
18
+ # weasyprint
19
+ libpango-1.0-0 libpangoft2-1.0-0 libharfbuzz-subset0 \
20
+ # postgres
21
+ libpq-dev
17
22
18
- ENV LIBRARY_PATH=/lib:/usr/lib
19
-
20
- RUN pip install uv==0.5.5
21
-
22
- ARG TARGETPLATFORM
23
-
24
- ARG TARGETPLATFORM
25
-
26
- RUN if [ "$TARGETPLATFORM" = "linux/arm64" ]; then \
27
- tar -czvf /libs.tar.gz \
28
- /usr/lib/aarch64-linux-gnu/libpq* \
29
- /usr/lib/aarch64-linux-gnu/libldap_r* \
30
- /usr/lib/aarch64-linux-gnu/libldap* \
31
- /usr/lib/aarch64-linux-gnu/liblber* \
32
- /usr/lib/aarch64-linux-gnu/libsasl* \
33
- /usr/lib/aarch64-linux-gnu/libxml2* \
34
- /usr/lib/aarch64-linux-gnu/libgcrypt* \
35
- /usr/lib/aarch64-linux-gnu/libstdc++* \
36
- /usr/lib/aarch64-linux-gnu/libjpeg* \
37
- /usr/lib/aarch64-linux-gnu/libopenjp2* \
38
- /usr/lib/aarch64-linux-gnu/libdeflate* \
39
- /usr/lib/aarch64-linux-gnu/libjbig* \
40
- /usr/lib/aarch64-linux-gnu/liblcms2* \
41
- /usr/lib/aarch64-linux-gnu/libwebp* \
42
- /usr/lib/aarch64-linux-gnu/libtiff* \
43
- /usr/lib/aarch64-linux-gnu/libGL* \
44
- /usr/lib/aarch64-linux-gnu/libgthread* \
45
- /usr/lib/aarch64-linux-gnu/libglib-* \
46
- /usr/lib/aarch64-linux-gnu/libX11* \
47
- /usr/lib/aarch64-linux-gnu/libxcb* \
48
- /usr/lib/aarch64-linux-gnu/libXau* \
49
- /usr/lib/aarch64-linux-gnu/libXdmcp* \
50
- /usr/lib/aarch64-linux-gnu/libXext* \
51
- /usr/lib/aarch64-linux-gnu/libbsd*; \
52
- elif [ "$TARGETPLATFORM" = "linux/amd64" ]; then \
53
- tar -czvf /libs.tar.gz \
54
- /usr/lib/x86_64-linux-gnu/libpq* \
55
- /usr/lib/x86_64-linux-gnu/libldap_r* \
56
- /usr/lib/x86_64-linux-gnu/libldap* \
57
- /usr/lib/x86_64-linux-gnu/liblber* \
58
- /usr/lib/x86_64-linux-gnu/libsasl* \
59
- /usr/lib/x86_64-linux-gnu/libxml2* \
60
- /usr/lib/x86_64-linux-gnu/libgcrypt* \
61
- /usr/lib/x86_64-linux-gnu/libstdc++* \
62
- /usr/lib/x86_64-linux-gnu/libjpeg* \
63
- /usr/lib/x86_64-linux-gnu/libopenjp2* \
64
- /usr/lib/x86_64-linux-gnu/libdeflate* \
65
- /usr/lib/x86_64-linux-gnu/libjbig* \
66
- /usr/lib/x86_64-linux-gnu/liblcms2* \
67
- /usr/lib/x86_64-linux-gnu/libwebp* \
68
- /usr/lib/x86_64-linux-gnu/libtiff* \
69
- /usr/lib/x86_64-linux-gnu/libGL* \
70
- /usr/lib/x86_64-linux-gnu/libgthread* \
71
- /usr/lib/x86_64-linux-gnu/libglib-* \
72
- /usr/lib/x86_64-linux-gnu/libX11* \
73
- /usr/lib/x86_64-linux-gnu/libxcb* \
74
- /usr/lib/x86_64-linux-gnu/libXau* \
75
- /usr/lib/x86_64-linux-gnu/libXdmcp* \
76
- /usr/lib/x86_64-linux-gnu/libXext* \
77
- /usr/lib/x86_64-linux-gnu/libbsd*; \
78
- fi
79
-
80
-
81
- COPY pyproject.toml uv.lock ${FUNCTION_DIR}
82
-
83
- RUN uv sync --no-dev
84
-
85
- # Create GraphQL schema
86
-
87
- FROM python:3.11-slim as schema-stage
23
+ FROM base AS build-stage
88
24
89
25
ARG FUNCTION_DIR
90
26
27
+ RUN apt-get update -y && apt-get install -y \
28
+ gcc git
29
+
30
+ RUN mkdir -p ${FUNCTION_DIR}
91
31
WORKDIR ${FUNCTION_DIR}
92
32
93
- COPY --from=build-stage ${FUNCTION_DIR}/.venv ${FUNCTION_DIR}/.venv
94
- COPY --from=build-stage /usr/local/lib/*.so* /usr/local/lib/
95
- COPY --from=build-stage /libs.tar.gz /libs.tar.gz
33
+ RUN pip install uv==0.5.5
96
34
97
- RUN tar -xvf /libs.tar.gz -C / && rm /libs.tar.gz && ldconfig
35
+ COPY pyproject.toml uv.lock ./
98
36
99
- COPY . ${FUNCTION_DIR}
37
+ RUN uv sync --no-dev
100
38
101
- ENV DJANGO_SETTINGS_MODULE=pycon.settings.prod
39
+ COPY . ./
102
40
103
- RUN AWS_MEDIA_BUCKET=example \
104
- AWS_REGION_NAME=eu-central-1 \
105
- SECRET_KEY=DEMO \
106
- STRIPE_SECRET_API_KEY=demo \
107
- STRIPE_SUBSCRIPTION_PRICE_ID=demo \
108
- STRIPE_WEBHOOK_SIGNATURE_SECRET=demo \
109
- CELERY_BROKER_URL=demo \
110
- CELERY_RESULT_BACKEND=demo \
111
- HASHID_DEFAULT_SECRET_SALT=demo \
112
- ${FUNCTION_DIR}/.venv/bin/python manage.py graphql_schema
41
+ RUN .venv/bin/python manage.py graphql_schema
113
42
114
43
# Build custom admin components
115
44
116
- FROM node:18.17.1 as js-stage
45
+ FROM node:23 AS js-stage
117
46
118
47
ARG FUNCTION_DIR
119
48
@@ -125,52 +54,35 @@ COPY custom_admin/package.json custom_admin/pnpm-lock.yaml ./
125
54
126
55
RUN pnpm install
127
56
128
- COPY custom_admin/ .
57
+ COPY --from=build-stage ${FUNCTION_DIR}/schema.graphql schema.graphql
129
58
130
- COPY --from=schema-stage ${FUNCTION_DIR}/schema.graphql schema.graphql
59
+ COPY custom_admin/ .
131
60
132
- RUN ADMIN_GRAPHQL_URL=schema.graphql pnpm codegen
133
- RUN pnpm build
61
+ RUN ADMIN_GRAPHQL_URL=schema.graphql pnpm codegen && pnpm build
134
62
135
- # Final stage
63
+ # Runtime stage
136
64
137
- FROM python:3.11-slim
65
+ FROM base AS runtime-stage
138
66
139
67
ARG FUNCTION_DIR
140
68
141
69
WORKDIR ${FUNCTION_DIR}
142
70
71
+ ENV LIBRARY_PATH=/lib:/usr/lib LD_LIBRARY_PATH=/lib:/usr/lib
72
+
143
73
RUN apt-get update -y && apt-get install -y curl
144
74
145
75
RUN groupadd -r app && useradd -r -g app app && mkdir -p ${FUNCTION_DIR} && chown -R app:app ${FUNCTION_DIR}
146
76
147
77
COPY --chown=app:app --from=js-stage ${FUNCTION_DIR}/dist/*.html ${FUNCTION_DIR}/custom_admin/templates/astro/
148
78
COPY --chown=app:app --from=js-stage ${FUNCTION_DIR}/dist/_astro ${FUNCTION_DIR}/custom_admin/static/_astro/
149
-
150
79
COPY --chown=app:app --from=build-stage ${FUNCTION_DIR}/.venv ${FUNCTION_DIR}/.venv
151
- COPY --from=build-stage /usr/local/lib/*.so* /usr/local/lib/
152
- COPY --from=build-stage /libs.tar.gz /libs.tar.gz
153
-
154
- RUN tar -xvf /libs.tar.gz -C / && rm /libs.tar.gz && ldconfig
155
80
156
81
COPY --chown=app:app . ${FUNCTION_DIR}
157
82
158
83
USER app
159
84
160
- RUN mkdir -p ${FUNCTION_DIR}/assets
161
-
162
- ENV DJANGO_SETTINGS_MODULE=pycon.settings.prod
163
-
164
- RUN AWS_MEDIA_BUCKET=example \
165
- AWS_REGION_NAME=eu-central-1 \
166
- SECRET_KEY=DEMO \
167
- STRIPE_SECRET_API_KEY=demo \
168
- STRIPE_SUBSCRIPTION_PRICE_ID=demo \
169
- STRIPE_WEBHOOK_SIGNATURE_SECRET=demo \
170
- CELERY_BROKER_URL=demo \
171
- CELERY_RESULT_BACKEND=demo \
172
- HASHID_DEFAULT_SECRET_SALT=demo \
173
- ${FUNCTION_DIR}/.venv/bin/python manage.py collectstatic --noinput
85
+ RUN mkdir -p assets && .venv/bin/python manage.py collectstatic --noinput
174
86
175
- ENTRYPOINT ["/home/app/.venv/bin/python" , "-m" , "awslambdaric " ]
176
- CMD [ "wsgi_handler.handler " ]
87
+ ENTRYPOINT ["/home/app/.venv/bin/gunicorn " ]
88
+ CMD [ "pycon.wsgi " ]
0 commit comments