31 lines
1.3 KiB
Docker
31 lines
1.3 KiB
Docker
FROM python:3.9 as builder
|
|
# enchant dependency for sphinx and npm for webpack
|
|
RUN apt-get update && apt-get install -y python-enchant npm
|
|
# copy source files
|
|
WORKDIR /access_controller/
|
|
COPY ./ /access_controller
|
|
# dev requirements for building sphinx docs
|
|
RUN pip install -r requirements/dev.txt -r requirements/prod.txt
|
|
# build js dist
|
|
RUN npm install -g npx
|
|
RUN (cd main/control_page_js_modules && npm install && npx webpack)
|
|
# build static and documentation files into build/webserver
|
|
RUN ./manage.py collectstatic --no-input && ./documentation.sh
|
|
# create production venv to copy to final image
|
|
# production venv is built here because `cryptography` requires rust which doesn't ship on alpine
|
|
RUN python -m venv venv && venv/bin/pip install -r requirements/prod.txt
|
|
# move files necessary to run the app to the build folder (including production venv)
|
|
RUN mv venv access_controller main manage.py build
|
|
|
|
FROM python:3.9-alpine
|
|
WORKDIR /access_controller/
|
|
COPY --from=builder ["/access_controller/build", "./"]
|
|
RUN apk update && apk add postgresql-libs && adduser -D -H -u 5579 actrl && chmod -R -w ./
|
|
USER actrl
|
|
EXPOSE 8000
|
|
CMD . venv/bin/activate && \
|
|
python manage.py migrate && \
|
|
rm -rf srv/* && \
|
|
cp -rT webserver srv && \
|
|
daphne -b 0.0.0.0 access_controller.asgi:application
|