Deploying Django to Openshift#

There are a few key things to understand about docker images on openshift:

  • Don’t run as root (you can build as root)
  • Don’t listen port < 1024
  • Openshift starts the image with a random UID but always with root GID. So if the container need to write a directory. Set the directory group as root with rwx permission to make openshift happy!
  1. Initialise project

    django-admin startproject keycloak-portal

  2. Go into the folder and intialise a venv

    python3.8 -m venv env source env/bin/activate pip install django

  3. Add requirements

    pip freeze > requirements.txt

  4. Create a dockerfile based on an example dockerfile don’t use a shit dockerfile like this

    pull official python alpine image#

    FROM python:3.8-alpine

    LABEL maintainer=”My Name my@email.co.za

    ENV PYTHONUNBUFFERED 1 ENV PYTHONDONTWRITEBYTECODE 1

    USER root

    Update pip#

    RUN pip install –upgrade pip

    Create the working directory#

    RUN mkdir -p /code WORKDIR /code

    Installing requirements.txt from project#

    COPY ./requirements.txt /code/ RUN pip install –no-cache-dir -r /code/requirements.txt

    removing temporary packages from docker and removing cache#

    RUN rm -rf ~/.cache/pip

    Copy Project#

    COPY . /code/

    Allow the root user access to the code#

    RUN rm -rf /code/.git* && \ chown -R 1001 /code && \ chgrp -R 0 /code && \ chmod -R g+w /code

    USER 1001

    EXPOSE 8000

    CMD will run when this dockerfile is running#

    CMD [“sh”, “-c”, “python manage.py collectstatic –no-input; python manage.py migrate; python manage.py runserver 0.0.0.0:8000”]

  5. Build the image

    docker build -t keycloak_portal:0.1 .

  6. Run the image

    docker run -it -p 8000:8000 keycloak_portal:0.1

  7. Push the image to a private or public repo

  8. Create the project and deploy the app on openshift

Sources#

https://blog.openshift.com/migrating-django-applications-openshift-3/ https://ruddra.com/posts/openshift-python-gunicorn-nginx-jenkins-pipelines-part-one/ https://medium.com/@uddishverma22/leveraging-docker-images-to-deploy-your-django-backend-on-openshift-5e268d679173 * Elasticsearch Openshift Compatability