NGINX Unit

Django Channels§

要使用 Django Channels 框架和 Unit 运行 Django 应用

  1. 使用 Python 3.6+ 语言模块安装 Unit

  2. 安装并配置 Django 3.0+ 框架。官方文档 建议设置虚拟环境;如果你这样做,稍后配置 Unit 时将其列为home。此处为/path/to/venv/

  3. 在你的虚拟环境中安装 Django Channels

    $ cd /path/to/venv/
    $ source bin/activate
    $ pip install channels
    $ deactivate
    
  4. 创建一个 Django 项目。此处,我们将使用 教程聊天应用,将其安装在/path/to/app/;在你的配置中使用真实路径。以下步骤假定你的项目使用 基本目录结构

    /path/to/app/
    |-- manage.py
    |-- chat/
    |   |-- ...
    |-- mysite/
    |   |-- ...
    |   `-- asgi.py
    `-- static/
    
  5. 运行以下命令,以便 Unit 可以访问 应用程序目录

    # chown -R unit:unit /path/to/app/
    

    注意

    unit:unit 用户组对仅适用于 官方软件包、Docker 镜像和一些 第三方仓库。否则,帐户名称可能不同;运行 ps aux | grep unitd 命令以确保。

    有关更多详细信息,包括权限,请参阅 安全检查清单

  6. 根据官方Channels 指南将 Django Channels 集成到你的项目中。

  7. 接下来,为 Unit 创建 Django Channels 配置。此处,/path/to/app/ 目录存储在 path 选项中;虚拟环境为 homemysite/ 子目录中的 ASGI 模块通过 module 导入。如果你重新排列目录,请相应地设置pathhomemodule

    你还可以使用 environment 选项设置项目依赖的一些环境变量。最后,如果你的项目使用 Django 的静态文件,可以选择添加一个路由以使用 Unit 提供这些文件。

    以下是一个示例(对 sharepathenvironmentmodulehome 使用实际值)

    {
        "listeners": {
            "*:80": {
                "pass": "routes"
            }
        },
    
        "routes": [
            {
                "match": {
                    "uri": "/static/*"
                },
    
                "action": {
                    "share": "/path/to/app$uri"
                }
            },
            {
                "action": {
                    "pass": "applications/djangochannels"
                }
            }
        ],
    
        "applications": {
            "djangochannels": {
                "type": "python 3.X",
                "path": "/path/to/app/",
                "home": "/path/to/venv/",
                "module": "mysite.asgi",
                "environment": {
                    "DJANGO_SETTINGS_MODULE": "mysite.settings"
                }
            }
        }
    }
    
  8. 上传更新后的配置。假设上述 JSON 已添加到 config.json

    # curl -X PUT --data-binary @config.json --unix-socket \
           /path/to/control.unit.sock http://localhost/config/
    

    注意

    控制套接字路径可能有所不同;运行 unitd -h 或参阅启动和关闭以了解详情。

    成功更新后,你的项目和应用(此处为聊天)将在侦听器的 IP 地址和端口上运行

    Django Channels on Unit - Tutorial App Screen