1- ARG FUNCTION_DIR="/home/app/ "
1+ ARG FUNCTION_DIR="/home/app"
22
3- FROM python:3.11-slim as build-stage
3+ FROM python:3.11-slim as base
4+
5+ ENV DJANGO_SETTINGS_MODULE=pycon.settings.prod \
6+ AWS_MEDIA_BUCKET=example \
7+ AWS_REGION_NAME=eu-central-1 \
8+ SECRET_KEY=DEMO \
9+ STRIPE_SECRET_API_KEY=demo \
10+ STRIPE_SUBSCRIPTION_PRICE_ID=demo \
11+ STRIPE_WEBHOOK_SIGNATURE_SECRET=demo \
12+ CELERY_BROKER_URL=demo \
13+ CELERY_RESULT_BACKEND=demo \
14+ HASHID_DEFAULT_SECRET_SALT=demo
15+
16+ FROM base as build-stage
417
518ARG FUNCTION_DIR
619
@@ -15,14 +28,10 @@ RUN apt-get update -y && apt-get install -y \
1528 libharfbuzz-dev libfribidi-dev libxcb1-dev libldap2-dev libldap-2.5-0 \
1629 ffmpeg libsm6 libxext6 libglib2.0-0 libpango-1.0-0 libpangoft2-1.0-0 libharfbuzz-subset0
1730
18- ENV LIBRARY_PATH=/lib:/usr/lib
31+ ENV LIBRARY_PATH=/lib:/usr/lib LD_LIBRARY_PATH=/lib:/usr/lib
1932
2033RUN pip install uv==0.5.5
2134
22- ARG TARGETPLATFORM
23-
24- ARG TARGETPLATFORM
25-
2635RUN tar -czvf /libs.tar.gz \
2736 /usr/lib/aarch64-linux-gnu/libpq* \
2837 /usr/lib/aarch64-linux-gnu/libldap_r* \
@@ -50,45 +59,20 @@ RUN tar -czvf /libs.tar.gz \
5059 /usr/lib/aarch64-linux-gnu/libbsd* \
5160 /usr/lib/aarch64-linux-gnu/libpango* \
5261 /usr/lib/aarch64-linux-gnu/libharf* \
62+ /usr/lib/aarch64-linux-gnu/libharfbuzz* \
5363 /usr/lib/aarch64-linux-gnu/libgobject*;
5464
55-
56- COPY pyproject.toml uv.lock ${FUNCTION_DIR}
65+ COPY pyproject.toml uv.lock ./
5766
5867RUN uv sync --no-dev
5968
60- # Create GraphQL schema
61-
62- FROM python:3.11-slim as schema-stage
63-
64- ARG FUNCTION_DIR
65-
66- WORKDIR ${FUNCTION_DIR}
67-
68- COPY --from=build-stage ${FUNCTION_DIR}/.venv ${FUNCTION_DIR}/.venv
69- COPY --from=build-stage /usr/local/lib/*.so* /usr/local/lib/
70- COPY --from=build-stage /libs.tar.gz /libs.tar.gz
71-
72- RUN tar -xvf /libs.tar.gz -C / && rm /libs.tar.gz && ldconfig
73-
74- COPY . ${FUNCTION_DIR}
69+ COPY . ./
7570
76- ENV DJANGO_SETTINGS_MODULE=pycon.settings.prod
77-
78- RUN AWS_MEDIA_BUCKET=example \
79- AWS_REGION_NAME=eu-central-1 \
80- SECRET_KEY=DEMO \
81- STRIPE_SECRET_API_KEY=demo \
82- STRIPE_SUBSCRIPTION_PRICE_ID=demo \
83- STRIPE_WEBHOOK_SIGNATURE_SECRET=demo \
84- CELERY_BROKER_URL=demo \
85- CELERY_RESULT_BACKEND=demo \
86- HASHID_DEFAULT_SECRET_SALT=demo \
87- ${FUNCTION_DIR}/.venv/bin/python manage.py graphql_schema
71+ RUN .venv/bin/python manage.py graphql_schema
8872
8973# Build custom admin components
9074
91- FROM node:18.17.1 as js-stage
75+ FROM node:23 as js-stage
9276
9377ARG FUNCTION_DIR
9478
@@ -100,29 +84,31 @@ COPY custom_admin/package.json custom_admin/pnpm-lock.yaml ./
10084
10185RUN pnpm install
10286
103- COPY custom_admin/ .
87+ COPY --from=build-stage ${FUNCTION_DIR}/schema.graphql schema.graphql
10488
105- COPY --from=schema-stage ${FUNCTION_DIR}/schema.graphql schema.graphql
89+ COPY custom_admin/ .
10690
10791RUN ADMIN_GRAPHQL_URL=schema.graphql pnpm codegen
10892RUN pnpm build
10993
110- # Final stage
94+ # Runtime stage
11195
112- FROM python:3.11-slim
96+ FROM base
11397
11498ARG FUNCTION_DIR
11599
116100WORKDIR ${FUNCTION_DIR}
117101
102+ ENV LIBRARY_PATH=/lib:/usr/lib LD_LIBRARY_PATH=/lib:/usr/lib
103+
118104RUN apt-get update -y && apt-get install -y curl
119105
120106RUN groupadd -r app && useradd -r -g app app && mkdir -p ${FUNCTION_DIR} && chown -R app:app ${FUNCTION_DIR}
121107
122108COPY --chown=app:app --from=js-stage ${FUNCTION_DIR}/dist/*.html ${FUNCTION_DIR}/custom_admin/templates/astro/
123109COPY --chown=app:app --from=js-stage ${FUNCTION_DIR}/dist/_astro ${FUNCTION_DIR}/custom_admin/static/_astro/
124-
125110COPY --chown=app:app --from=build-stage ${FUNCTION_DIR}/.venv ${FUNCTION_DIR}/.venv
111+
126112COPY --from=build-stage /usr/local/lib/*.so* /usr/local/lib/
127113COPY --from=build-stage /libs.tar.gz /libs.tar.gz
128114
@@ -132,20 +118,11 @@ COPY --chown=app:app . ${FUNCTION_DIR}
132118
133119USER app
134120
135- RUN mkdir -p ${FUNCTION_DIR}/ assets
121+ RUN mkdir -p assets
136122
137123ENV DJANGO_SETTINGS_MODULE=pycon.settings.prod
138124
139- RUN AWS_MEDIA_BUCKET=example \
140- AWS_REGION_NAME=eu-central-1 \
141- SECRET_KEY=DEMO \
142- STRIPE_SECRET_API_KEY=demo \
143- STRIPE_SUBSCRIPTION_PRICE_ID=demo \
144- STRIPE_WEBHOOK_SIGNATURE_SECRET=demo \
145- CELERY_BROKER_URL=demo \
146- CELERY_RESULT_BACKEND=demo \
147- HASHID_DEFAULT_SECRET_SALT=demo \
148- ${FUNCTION_DIR}/.venv/bin/python manage.py collectstatic --noinput
125+ RUN .venv/bin/python manage.py collectstatic --noinput
149126
150- ENTRYPOINT ["/home/app/.venv/bin/python" , "-m" , "awslambdaric " ]
151- CMD [ "wsgi_handler.handler " ]
127+ ENTRYPOINT ["/home/app/.venv/bin/gunicorn " ]
128+ CMD [ "pycon.wsgi " ]
0 commit comments