NGINX Unit

Django§

使用 Unit 运行基于 Django 框架 的应用

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

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

  3. 创建一个 Django 项目。此处,我们将其安装在 /path/to/app/;在配置中使用真实路径。以下步骤假定你的项目使用 基本目录结构

    /path/to/app/
    |-- manage.py
    |-- django_app1/
    |   |-- ...
    |-- django_app2/
    |   |-- ...
    |-- project/
    |   |-- ...
    |   |-- asgi.py
    |   `-- wsgi.py
    `-- static/
    
  4. 运行以下命令,以便 Unit 可以访问 应用目录

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

    注意

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

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

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

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

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

    {
        "listeners": {
            "*:80": {
                "pass": "routes"
            }
        },
    
        "routes": [
            {
                "match": {
                    "uri": "/static/*"
                },
    
                "action": {
                    "share": "/path/to/app$uri"
                }
            },
            {
                "action": {
                    "pass": "applications/django"
                }
            }
        ],
    
        "applications": {
            "django": {
                "type": "python 3.X",
                "path": "/path/to/app/",
                "home": "/path/to/venv/",
                "module": "project.wsgi",
                "environment": {
                    "DJANGO_SETTINGS_MODULE": "project.settings",
                    "DB_ENGINE": "django.db.backends.postgresql",
                    "DB_NAME": "project",
                    "DB_HOST": "127.0.0.1",
                    "DB_PORT": "5432"
                }
            }
        }
    }
    

    注意

    ASGI 需要 Python 3.5+ 和 Django 3.0+。

    {
        "listeners": {
            "*:80": {
                "pass": "routes"
            }
        },
    
        "routes": [
            {
                "match": {
                    "uri": "/static/*"
                },
    
                "action": {
                    "share": "/path/to/app$uri"
                }
            },
            {
                "action": {
                    "pass": "applications/django"
                }
            }
        ],
    
        "applications": {
            "django": {
                "type": "python 3.X",
                "path": "/path/to/app/",
                "home": "/path/to/venv/",
                "module": "project.asgi",
                "environment": {
                    "DJANGO_SETTINGS_MODULE": "project.settings",
                    "DB_ENGINE": "django.db.backends.postgresql",
                    "DB_NAME": "project",
                    "DB_HOST": "127.0.0.1",
                    "DB_PORT": "5432"
                }
            }
        }
    }
    
  6. 上传更新后的配置。假设上述 JSON 已添加到 config.json

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

    注意

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

    更新成功后,您的项目和应用应可在侦听器的 IP 地址和端口上使用

    Django on Unit - Admin Login Screen