将django应用程序作为docker容器部署到ubuntu服务器。

dockdj的Python项目详细描述


dockdj

django应用程序部署变得简单

dockdj是一个命令行工具,允许您将任何Django应用程序部署到单个ubuntu服务器。

这个工具的灵感来自于用于部署Meteor.js应用程序的Meteor up工具。

您可以在linux、mac和windows上安装和使用dockdj。它可以部署到运行最新ubuntu的服务器上。

dockdj由Docker compose提供支持,使部署易于管理。

要求

此工具需要python>;3.6

安装

使用以下命令安装dockdj

$ pip install dockdj

用法

假设你有一个有频道(asgi)和芹菜工人的django项目。 芹菜工人需要兔子MQ。 dockdj可以通过以下架构帮助轻松部署此应用程序。 服务器内的每个盒子都是Docker容器。

+-----------------------------------------------------------------------------+
|                      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                   |
+-----------------------------------------------------------------------------+
如何如图所示部署?

为保存dockdj设置创建django项目目录的同级 将用于部署django应用程序的文件

$ mkdir deploy

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

$ cd deploy

$ dockdj init

这将创建两个文件dockdj.yamlsettings.py

parent
    - hello_world
    |    -hello_world
    |        -wsgi.py
    - deploy
        - dockdj.yaml
        - settings.py

修改dockdj.yaml文件以输入服务器配置和应用程序详细信息。 初始文件如下所示。 根据需要删除可选/未使用的配置。

---
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: rabbitmq

settings.pyfill包含将附加到django应用程序的settings.py文件中的设置。您可以在此处输入与生产相关的设置或替代开发设置。初始settings.py文件如下所示。

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//'

适当编辑这两个文件后,运行以下命令安装服务器。如果还没有安装,这将在ubuntu服务器上安装docker。

$ dockdj setup

要部署django应用程序,请运行以下命令。

$ dockdj deploy

这将创建你的django应用的docker图像。 收集静态文件并将其添加到nginx容器中。 运行dockdj.yaml中指定的所有必需容器。 将nginx容器的80端口绑定到ubuntu主机的8000端口。 可以通过在“dockdj.yaml”中添加以下配置来修改端口绑定

compose:
  services:
    nginx:
      ports:
      - 8004:80

停靠站

运行以下命令停止所有容器

$ dockdj stop

Dockdj重新启动

运行以下命令重新启动所有容器

$ dockdj restart

dockdj日志

运行以下命令查看所有容器的日志

$ dockdj logs

Dockdj一次性

您可以使用以下一次性子命令在服务器上运行一次性脚本。

$ dockdj one-off python manage.py migrate

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Eclipse不识别渐变依赖项   java RecyclerView在从API(OkHttp)刷新时无法滚动,导致IndexOutOfBoundsException崩溃   java如何在JavaDoc中显示示例代码,而不必手动复制/粘贴?   java Android设置自定义actionbar   用Java制作swing标签生成器   java Spring引导Hibernate无法删除验证令牌   Java中的递归问题   JAVANet 4垃圾收集   仅使用一个ImageView的java视图翻转器   使用高级正则表达式在java中拆分字符串   Python中Java volatile的等价物   java数据流作业总是创建新的默认存储桶,即使设置了tempLocation和gcpTempLocation?   变量未在Java中初始化   当iam试图将TestNG安装到Eclipse版本:Mars中时使用java。1获取错误,因为软件包含未着色的内容   运行Sqoop命令时出现java_主页问题   SpringJava框架自动维护实体历史记录   多线程Java:为什么/什么是这些线程监控?   java如何控制mavenjettyplugin的VM参数?   java在equals方法中比较两个对象名称   java设置Itext表中的标题行