Workshop: Deploy Django, Gunicorn, NGINX, Postgresql using Docker

Project Directory

$ mkdir djangoprj
$ mkdir config
$ mkdir config/nginx
$ touch Dockerfile
$ touch docker-compose.yml

$ python3 -m venv venv36
$ source venv36/bin/activate
(venv36) $  pip install django psycopg2

$ django-admin startproject taladdee
$ mv taladdee src

edit database configuration

DATABASES = {  
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD':  'password',
        'HOST': 'db',
        'PORT': 5432,
    }
}

nginx config

$ cat taladdee.conf 
upstream web {  
  ip_hash;
  server web:8000;
}

# portal
server {  
  location / {
        proxy_pass http://web/;
    }
  listen 8000;
  server_name localhost;
}

docker-conpose.yml

version: '3'  
services:  
  nginx:
    image: nginx:1.13.7-alpine
    container_name: ng01
    ports:
      - "8000:8000"
    volumes:
      - ./src:/src
      - ./config/nginx:/etc/nginx/conf.d
    depends_on:
      - web
  web:
    build: .
    image: djangoapp:1.0.0
    container_name: dg01
    command: bash -c "python manage.py makemigrations && python manage.py migrate && gunicorn taladdee.wsgi -b 0.0.0.0:8000"
    depends_on:
      - db
    volumes:
      - ./src:/src
    expose:
      - "8000"

  db:
    image: postgres:10.1-alpine
    container_name: ps01
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
    pgdata:

django

docker-compose up -d
docker-compose stop

#Nginx
docker exec -ti nginx bash

#Web
docker exec -ti web bash

#Database
docker exec -ti db bash

for logs

#Nginx
docker-compose logs nginx  
#Web
docker-compose logs web  
#DB
docker-compose logs db

Manage Databae

postgres=# \connect postgres
You are now connected to database "postgres" as user "postgres".

postgres=# \l
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
$ python3 -m venv venv36
Useful Docker Commands (use with care)

View docker images
docker images
List actively running images (add -l to include stopped containers)
docker ps
View container logs
docker logs -f <containerID>
Stop container
docker stop <containerID>
Delete dead images
for i in `docker images|grep \<none\>|awk '{print $3}'`;do docker rmi $i;done
Delete containers
docker rm -f `docker ps --no-trunc -a -q`

results matching ""

    No results matching ""