Django Openshift
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!
- 
Initialise project django-admin startproject keycloak-portal 
- 
Go into the folder and intialise a venvpython3.8 -m venv env source env/bin/activate pip install django 
- 
Add requirements pip freeze > requirements.txt 
- 
Create a dockerfile based on an example dockerfile probably best to avoid a 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”] 
- 
Build the image docker build -t keycloak_portal:0.1 . 
- 
Run the image docker run -it -p 8000:8000 keycloak_portal:0.1 
- 
Push the image to a private or public repo 
- 
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