FROM debian:9

# The Dockerfile for this project is split into 5 layers.
# - Base:     The base image
# - System:   System package installation
# - Compile:  Custom compilation and installation
# - Packages: Application packages (e.g. npm, pip etc)
# - App:      Task runs and application prep
# The order of the layers is based on which parts are likely to be
#   modified the most.
# The project source is added in the App layer so as not to invalidate
#   the Dockerfile cache.

# SYSTEM
SHELL ["/bin/bash","-ex","-c"]
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y\
      build-essential\
      closure-compiler\
      cron\
      locales\
      libgdal-dev\
      libpq-dev\
      python\
      python3-dev\
      python3-pip\
      python3\
      rsync\
      virtualenv\
      wget\
 && echo "en_GB.UTF-8 UTF-8" > /etc/locale.gen\
 && locale-gen en_GB.UTF-8\
 && dpkg-reconfigure locales\
 && /usr/sbin/update-locale LANG=en_GB.UTF-8
ENV LC_ALL en_GB.UTF-8

# COMPILE
WORKDIR /build
RUN wget https://nodejs.org/dist/v7.10.0/node-v7.10.0-linux-x64.tar.gz\
 && tar -xvf node-v7.10.0-linux-x64.tar.gz\
 && pushd node-v7.10.0-linux-x64\
 && rsync --archive ./* /usr/local\
 && popd\
 && wget http://download.osgeo.org/proj/proj-4.9.1.tar.gz\
 && wget http://download.osgeo.org/proj/proj-datumgrid-1.5.tar.gz\
 && tar -xvf proj-4.9.1.tar.gz && cd proj-4.9.1/nad\
 && tar -xvf ../../proj-datumgrid-1.5.tar.gz && cd ../ \
 && ./configure && make && make install

RUN apt-get update && apt-get install -y gettext git

# PACKAGES
WORKDIR /app
COPY ./requirements.txt .
RUN python3 -m pip install -r requirements.txt

# APP
WORKDIR /app
COPY . .
COPY ./support/cron/* /etc/cron.d/
RUN chmod 0644 /etc/cron.d/*\
 && touch /var/log/cron.log

EXPOSE 8000

CMD [ "python3", "manage.py", "migrate", "&&", \
      "python3", "manage.py", "runserver", "0.0.0.0:8000" ]