Exemple de Dockerfile
# JS Build (From ECR Registry)
FROM 243262675455.dkr.ecr.eu-west-3.amazonaws.com/containers:base as js-build
USER app
COPY frontend /app/frontend
RUN aws codeartifact login --tool npm --domain eqs-store --domain-owner 243262675455 --repository eqs-store
RUN cd /app/frontend && npm config set unsafe-perm true && npm run install:all && npm run build
RUN rm -rf /app/frontend/node_modules/
# PY & Image Build (From ECR Registry)
FROM 243262675455.dkr.ecr.eu-west-3.amazonaws.com/containers:base as py-buil
USER appWORKDIR /app
COPY --from=js-build /app/frontend frontend
COPY smart-contracts/nyx smart-contracts/nyx
COPY backend backend
RUN find frontend/static/dist/css -type f | xargs gzip -f -k -9
RUN find frontend/static/dist/js -type f | xargs gzip -f -k -9
RUN pip3 install --user --upgrade -r /app/backend/scripts/requirements.base
COPY do /app/doCOPY backend/scripts/start_prod.sh /app/start_prod.sh
ENV STATIC_URL=/static STATIC_ROOT=/app/static
ENV LOG_DIR=/app/log UPLOAD_PATH=/app/documents
RUN backend/manage.py collectstatic --noinput --clear
RUN backend/manage.py compilemessages -l en -l fr
EXPOSE 8000
EXPOSE 8001
CMD /usr/bin/bash -euxc /app/start_prod.sh
cd backend && until djcli dbcheck; do sleep 1; done \
&& EMAIL_BACKEND=main.email.ConsoleEmailBackend ./manage.py migrate --noinput \
&& cd /app/backend; uvicorn main.asgi:application --workers 12 --host 0.0.0.0 --ws auto --port 8001 --loop asyncio & \
uwsgi \
--spooler=/spooler/blockchain \
--spooler=/spooler/mail \
--spooler=/spooler/kyc \
--spooler=/spooler/document_upload \
--spooler-processes=8 \
--spooler-frequency=1 \
--locks=32 \
--sharedarea 2 \
--http-socket=0.0.0.0:8000 \
--http-enable-proxy-protocol \
--stats=127.0.0.1:8100 \
--stats-http \
--memory-report \
--chdir=/app/backend \
--spooler-chdir=/app/backend \
--plugin=python \
--module=main.wsgi:application \
--http-keepalive \
--harakiri=1024 \
--max-requests=100 \
--listen 1024 \
--spooler-max-tasks=100 \
--master \
--workers=12 \
--processes=6 \
--chmod=666 \
--log-5xx \
--vacuum \
--enable-threads \
--post-buffering=8192 \
--ignore-sigpipe \
--ignore-write-errors \
--disable-write-exception \
--mime-file /etc/mime.types \
--thunder-lock \
--offload-threads '%k' \
--route '^/static/.* addheader:Cache-Control: public, max-age=7776000' \
--route '^/js|css|fonts|images|icons|favicon.png/.* addheader:Cache-Control: public, max-age=7776000' \
--static-map /static/fonts=/app/frontend/static/dist/fonts \
--static-map /static/images=/app/frontend/static/dist/images \
--static-map /static/icons=/app/frontend/static/dist/icons \
--static-map /static/favicon.png=/app/frontend/static/dist/favicon.png \
--static-map /fonts=/app/frontend/static/dist/fonts \
--static-map /images=/app/frontend/static/dist/images \
--static-map /icons=/app/frontend/static/dist/icons \
--static-map /favicon.png=/app/frontend/static/dist/favicon.png \
--static-map /dist=/app/frontend/static/dist \
--static-map /js=/app/frontend/static/dist/js \
--static-map /css=/app/frontend/static/dist/css \
--static-map /static=/app/static \
--static-gzip-all