diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..4a246ec6c3050ae30b65f6e28a8ba022a281c91c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +Dockerfile +.dockerignore diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..c4c14b7c89747791eee1d278b10797d6c033bebf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM python:alpine +ARG django_version=1.11 +ARG dev_packages="gcc g++ postgresql-dev" +ADD ./entrypoint.sh / + +VOLUME /static + +WORKDIR /app + +RUN apk update && \ + apk add bash git \ + ${dev_packages} && \ + DJANGO_VERSION=$(echo ${django_version} | \ + awk -F. '{bump=$NF+1;for(i=1;i<NF;i++){printf("%s.",$i)};printf("%s",bump)}') && \ + pip install "Django<=${DJANGO_VERSION}" gunicorn \ + psycopg2-binary psycopg2 mysql-connector \ + django-heroku whitenoise[brotli] && \ + apk del ${dev_packages} + +ENTRYPOINT [ "/entrypoint.sh" ] diff --git a/README.md b/README.md index 6d2dd9fc5b899238c059b55521ad3ff8a7c83899..794afc450706fdd059ad95eef5cf102eff053969 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # docker-django +A docker image to execute Django apps. It uses: + +* An environment variable GIT_URL to retrieve the project +* django-heroku to reconfigure settings via environment variable. diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000000000000000000000000000000000000..3f2c8d5903e4c640a167284b057af4e25623bb2d --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +printenv +set -x +git clone ${GIT_URL} . +pip install -r requirements.txt --no-input + +DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE:-$(basename ${WSGI_MODULE} .wsgi).settings} + +# Override static content +cat > settings.py <<EOF +from ${DJANGO_SETTINGS_MODULE} import * +STATIC_ROOT='/static' +EOF + +export DJANGO_SETTINGS_MODULE=settings + +python manage.py collectstatic --no-input + +python manage.py migrate + +if [ -z "${WSGI_MODULE}" ] +then + export WSGI_MODULE=$(basename $(dirname $(find . -name wsgi.py | head -1))).wsgi +fi + +gunicorn --log-level=INFO ${WSGI_MODULE} $*