Setting up a docker-compose django project
1. Follow the django docker-compose guide set-up here.2. Your working directory should now contain all files listed below
- Dockerfile docker-compose.yml manage.py requirements.txt
- $ sudo docker-compose up

Django production application configuration
1. Modify your Dockerfile as follows
FROM python:3.6.4
ENV PYTHONUNBUFFERED 1
ENV PORT 5000
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code
RUN pip install -r requirements
ADD . /code
CMD python3 manage.py runserver 0.0.0.0:$PORT
import os
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
os.environ.setdefault("DJANGO_SETTINGS_MODULE",
"project_name.settings")
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
# Copy your secret key to .env file
import os
from decouple import config
import dj_database_url
..............
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)
ALLOWED_HOSTS = ['.herokuapp.com/']
.......
INSTALLED_APPS = [ # ... 'whitenoise.runserver_nostatic', 'django.contrib.staticfiles', # ...]
.......
DATABASES = { 'default': dj_database_url.config(
default=config('DATABASE_URL') )
}
.....
MIDDLEWARE_CLASSES = [.....
'whitenoise.middleware.WhiteNoiseMiddleware',
# ...]
.......
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'),)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
- Update your requirements.txt to include whitenoise==3.3.1
*.pyc
*.sqlite3
*.env
NB: Copy the contents of this file to another file called .dockerignore
SECRET_KEY='pdfjsskskfiuf.............'
DEBUG=False
# Copy your own secret key from settings.py
version: '2'
services:
web:
build: .
ports:
- "5000:5000"
env_file: .env
depends on:
- db
volumes:
- .:/code
db:
image: postgres:latest
ports:
- "5432:5432"
Deploy to heroku
1. Create a heroku app, together with the add-ons needed for production, e.g. postgres database:
$ heroku login
$ heroku create endeesa
$ heroku git:remote -a endeesa
$ heroku addons: create heroku-postgresql:hobby-dev -a endeesa
3. Update your .env file
SECRET_KEY='k_^7*=x48^&f-7_mgm3$z*=-4ogj(!q+prrbi......'
DEBUG=False
DATABASE_URL='postgres://ntgdltqnyzxb1.amaz/dddie91mk0phpq'........'
4. Deploy your containerized django application to heroku
$ heroku container:login
$ heroku container:push web
- Run $ heroku open, to view your live site
- You can continue with local development by running
- $ sudo docker-compose up --build
- Note that to do this, you need to set DEBUG = TRUE inside your .env file.
- It is recommended that you modify your project to use two settings such that all in all your project is structured as follows
- settings
- base.py
- production.py
- development.py
- This way, you can import base.py in both production.py and development.py and override different variables as needed. e.g. DEBUG=False inside production.py and DEBUG=True iniside development.py.
Comments
Post a Comment