Package: dockdj
DockdjDjango app deployment made easyDockdj is a command line tool that allows you to deploy anyDjangoapp to single Ubuntu server.This tool is inspired byMeteor uptool which is used to deployMeteor.jsapp.You can install and use Dockdj on Linux, Mac and Windows. It can deploy to servers running latest Ubuntu.Dockdj is powered byDocker compose, making deployment easy to manage.RequirementThis tool needs Python > 3.6InstallInstall the dockdj using following command$ pip install dockdjUsageLets say you have a Django project with channels (asgi) and celery worker.
And celery worker needs rabbit mq.
Dockdj can help to deploy this app easily with following architecture.
Each box inside server is docker container.+-----------------------------------------------------------------------------+
|                      Ubuntu server 18.04 LTS                                |
|                                                                             |
|                                                   +----------------+        |
|                                          +--------+   wsgi:80      |        |
|        +---------------+                 |        |  (gunicorn)    |        |
|        |  nginx:80     +-----------------+        +----------------+        |
|        |  static files +-----------------+                                  |
|        +---------------+                 |                                  |
|           localhost:8000                 |        +----------------+        |
|                                          |        |   asgi:80      |        |
|                                          +--------+  (daphne)      |        |
|                                                   +----------------+        |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|                                                                             |
|         +--------------+                          +----------------+        |
|         |  celery      +--------------------------+   rabbit mq    |        |
|         |              |                          |                |        |
|         +--------------+                          +----------------+        |
|                                                                             |
|                                                                             |
|             Example deployment of django app using dockdj                   |
+-----------------------------------------------------------------------------+How to deploy as show in diagram?Create a sibling to the django project directory for saving dockdj settings
files which will be used to deploy the django app$ mkdir deploy

parent
    - hello_world
    |    -hello_world
    |        -wsgi.py
    - deploy

$ cd deploy

$ dockdj initThis will create two filesdockdj.yamlandsettings.pyparent
    - hello_world
    |    -hello_world
    |        -wsgi.py
    - deploy
        - dockdj.yaml
        - settings.pyModify thedockdj.yamlfile to enter server configuration and app details.
Initial file looks as follows.
Remove the optional/unused configuration according to your needs.---
server:
  host: 1.2.3.4
  # must be sudo without password
  username: root
  pem: "/home/user/.ssh/id_rsa"
app:
  # Project name used by script to name docker
  name: hello_world_stage
  settings: 'hello_world/settings.py'
  wsgi:
    app: 'hello_world.wsgi:application'
  asgi: # optional if app uses agsi like channels
    app: 'hello_world.asgi:application'
    paths: # used by nginx to route to asig
      - /ws
      - /some_thing_else
  celery: # optional for celery django app
    app: 'hello_world'
  requirements_file: 'requirements.txt'
  extra_files: # Optional: config, certs any other files loaded to /app/extra_files/* in docker container
    - /path/to/abc.txt
  # Django project directory
  path: "/path/to/django/code/hello_world"
  docker:
    image: python:3.7

compose:
  services:
    celery:
      depends_on:
        - rabbitmq
    rabbitmq:
      image: rabbitmqsettings.pyfill contains settings which will be appended to your django app's settings.py file. You can enter production related settings or override development settings here. Initialsettings.pyfile looks like as follows.DEBUG = False

# Add the your servers host name or ip address
ALLOWED_HOSTS = ['1.2.3.4', 'www.example.com']

CELERY_BROKER_URL = 'amqp://guest:guest@rabbitmq:5672//'After editing these two files appropriately run following command to setup server. This will install docker in Ubuntu servers if not already installed.$ dockdj setupTo deploy the django app run following.$ dockdj deployThis will create docker images of your Django app.
Collects the static file and adds it to nginx container.
Runs all required containers as specified indockdj.yaml.
Binds the port 80 of nginx container to port 8000 of Ubuntu host.
Port binding can be modified by adding following configuration in `dockdj.yaml'compose:
  services:
    nginx:
      ports:
      - 8004:80dockdj stopRun following command to stop all containers$ dockdj stopdockdj restartRun following command to restart all containers$ dockdj restartdockdj logsRun following command to see logs of all containers$ dockdj logsdockdj one-offYou can run one-off script on server using one-off sub command as follows.$ dockdj one-off python manage.py migrate