使用nginx unit部署微服务




前端时间,nginx发布了nginx unit。NGINX Unit 是一个动态的网络应用服务器,它被设计为可运行多种编程语言的。通过API可以轻巧,多面化的动态配置Unit。目前为止nginx unit支持php,python以及go。其他语言如java,javascript等语言尚未提供支持。

有了nginx unit,我们就可以不用配置繁琐的php-fpm和uwsgi,只需要一个json文件即可部署一个微服务。

NGINX Unit 现在是beta版本。你现在虽然可以使用它,但建议仅用于测试环境,不建议用于生产环境。

GitHub:https://github.com/nginx/unit/

中文文档:https://github.com/tuzimoe/unit/blob/master/README_zh-Hans.md

下面我们使用nginx unit部署一个django项目,以frankgx97/nem-downloader: django网易云音乐下载器,适用于新版api为例。

安装nginx unit

nginx unit为ubuntu和centos提供了预编译的安装包,按照文档的步骤安装即可。其他系统需要自行编译安装。

我创建了一个Dockerfile,你可以直接使用这个Dockerfile构建一个镜像。如果想要自己编译安装,也可以参考这个dockerfile。

https://github.com/frankgx97/nginx-unit-docker

如果你想要自己构建镜像,不要基于alpine构建,因为alpine使用musl而非glibc,无法支持unit中用到的getcontext

配置

unit默认使用unix socket通信(在我的Docker镜像中配置为通过8000端口通信),socket的默认位置为/var/run/control.unit.sock

一个python应用的配置如下:

#unit.json
{
    "listeners": {
        "*:8093": {
            "application": "pythonapp"
        }
    },

    "applications": {
        "pythonapp": {
            "type": "python",
            "workers": 2,
            "path": "/www",#wsgi.py所在目录。django默认生成的wsgi.py在一个子目录下,需要把它复制到应用根目录。
            "module": "wsgi"
        }
    }
}

使用如下命令配置unit

curl -X PUT -d @unit.json --unix-socket /var/run/control.unit.sock

如果出现"success": "Reconfiguration done."即成功。

此时应用已经可以通过http://localhost:8093/访问




Posted

in

by

Comments

发表回复/Leave a Reply

您的电子邮箱地址不会被公开。/Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.