NGINX Unit-通用Web应用程序服务器-一个轻量级且多功能的开源服务器,通过跨八个不同的编程语言运行时本地执行应用程序代码来简化应用程序堆栈。
NGINX Unit - universal web app server - a lightweight and versatile open source server that simplifies the application stack by natively executing application code across eight different programming language runtimes.

Docker hub
https://hub.docker.com/_/unit
Github
https://github.com/nginx/unit
Webiste
https://unit.nginx.org/

Nginx Unit 教程:现代化应用服务器的入门指南

Nginx Unit 是一个轻量级、高性能的应用服务器,由 Nginx 团队开发。它支持多种编程语言和框架,包括 Python、PHP、Go、Ruby、JavaScript (Node.js) 和 Java。Unit 的设计目标是简化应用部署和管理,同时提供卓越的性能和可扩展性。

本教程将引导你完成 Nginx Unit 的安装、配置和基本使用。

一、安装 Nginx Unit

1. 使用包管理器安装 (推荐):

  • Debian/Ubuntu:

    sudo apt-get install unit
  • CentOS/RHEL:

    sudo yum install unit
  • Fedora:

    sudo dnf install unit

2. 从源代码编译安装:

如果你需要自定义编译选项或使用最新的开发版本,可以从源代码编译安装。请参考官方文档获取详细步骤:https://unit.nginx.org/installation/

二、配置 Nginx Unit

Nginx Unit 的配置文件通常位于 /etc/unit/ 目录下。主要的配置文件是 config.json,它定义了 Unit 的全局设置和应用配置。

1. 基本配置示例:

{
    "listeners": {
        "*:8080": {
            "application": "myapp"
        }
    },
    "applications": {
        "myapp": {
            "type": "python",
            "module": "wsgi",
            "path": "/path/to/myapp"
        }
    }
}
  • listeners: 定义 Unit 监听的端口和对应的应用。
  • applications: 定义应用的配置,包括类型、模块和路径。

2. 配置说明:

  • type: 指定应用的类型,例如 python, php, go, ruby, nodejs, java 等。
  • module: 指定应用的入口模块,例如 Python 的 wsgi 模块。
  • path: 指定应用的根目录。

3. 应用配置示例:

  • Python (WSGI):

    {
        "type": "python",
        "module": "wsgi",
        "path": "/path/to/myapp",
        "home": "/path/to/virtualenv"
    }
  • PHP:

    {
        "type": "php",
        "root": "/path/to/myapp",
        "index": "index.php"
    }
  • Go:

    {
        "type": "go",
        "executable": "/path/to/myapp"
    }

三、启动和管理 Nginx Unit

1. 启动 Unit:

sudo systemctl start unit

2. 停止 Unit:

sudo systemctl stop unit

3. 重启 Unit:

sudo systemctl restart unit

4. 查看 Unit 状态:

sudo systemctl status unit

5. 重新加载配置文件:

修改配置文件后,无需重启 Unit,只需重新加载配置:

sudo systemctl reload unit

四、部署应用

1. 将应用代码放置在配置文件中指定的路径。

2. 确保应用依赖已安装。

3. 重新加载 Unit 配置。

4. 访问应用:

根据配置的监听端口,通过浏览器或 curl 访问应用。例如:

curl http://localhost:8080

五、高级功能

Nginx Unit 还提供了许多高级功能,例如:

  • 负载均衡: 可以将多个应用实例配置为负载均衡组。
  • TLS/SSL: 支持 HTTPS 加密通信。
  • 访问控制: 可以配置 IP 地址限制和身份验证。
  • 日志记录: 可以配置访问日志和错误日志。

有关更多高级功能的详细信息,请参考官方文档:https://unit.nginx.org/configuration/

六、总结

Nginx Unit 是一个功能强大且易于使用的应用服务器,适用于各种规模的应用程序。它简化了应用部署和管理,同时提供了卓越的性能和可扩展性。通过本教程,你已经掌握了 Nginx Unit 的基本使用方法,可以开始部署你的应用了。

资源:

Nginx Unit 可以轻松地与 Docker 集成,方便你在容器化环境中部署和管理应用。以下是使用 Docker 运行 Nginx Unit 的步骤。


一、使用官方 Nginx Unit Docker 镜像

Nginx Unit 提供了官方 Docker 镜像,可以直接从 Docker Hub 拉取并使用。

1. 拉取官方镜像:

docker pull nginx/unit

2. 运行 Nginx Unit 容器:

docker run -d --name myunit -p 8080:80 nginx/unit
  • -d: 后台运行容器。
  • --name myunit: 为容器指定名称。
  • -p 8080:80: 将容器的 80 端口映射到主机的 8080 端口。

3. 验证容器是否运行:

docker ps

你应该看到 myunit 容器正在运行。

4. 访问 Nginx Unit:

在浏览器或使用 curl 访问 http://localhost:8080,你会看到 Nginx Unit 的默认欢迎页面。


二、自定义 Nginx Unit 配置

在 Docker 中使用 Nginx Unit 时,通常需要自定义配置文件以部署你的应用。以下是具体步骤:

1. 创建配置文件:

在本地创建一个 config.json 文件,例如:

{
    "listeners": {
        "*:80": {
            "application": "myapp"
        }
    },
    "applications": {
        "myapp": {
            "type": "python",
            "module": "wsgi",
            "path": "/www/myapp"
        }
    }
}

2. 创建应用目录:

在本地创建一个目录,例如 myapp,并将你的应用代码放入其中。

3. 运行容器并挂载配置和应用目录:

docker run -d --name myunit \
    -p 8080:80 \
    -v /path/to/your/config.json:/docker-entrypoint.d/config.json \
    -v /path/to/your/myapp:/www/myapp \
    nginx/unit
  • -v /path/to/your/config.json:/docker-entrypoint.d/config.json: 将本地的 config.json 挂载到容器中的 /docker-entrypoint.d/config.json,这是 Unit 自动加载配置的位置。
  • -v /path/to/your/myapp:/www/myapp: 将本地的应用目录挂载到容器中的 /www/myapp

4. 验证应用是否运行:

访问 http://localhost:8080,你应该看到你的应用已经成功部署。


三、使用 Dockerfile 构建自定义镜像

如果你需要更复杂的配置或依赖,可以使用 Dockerfile 构建自定义镜像。

1. 创建 Dockerfile:

FROM nginx/unit:latest

# 安装 Python 和依赖
RUN apt-get update && apt-get install -y python3 python3-pip

# 将应用代码复制到容器中
COPY myapp /www/myapp

# 将配置文件复制到容器中
COPY config.json /docker-entrypoint.d/config.json

# 安装应用依赖
RUN pip3 install -r /www/myapp/requirements.txt

2. 构建镜像:

docker build -t myunit-app .

3. 运行容器:

docker run -d --name myunit-app -p 8080:80 myunit-app

4. 验证应用是否运行:

访问 http://localhost:8080,你应该看到你的应用已经成功部署。


四、使用 Docker Compose 管理多个服务

如果你的应用需要多个服务(例如数据库、缓存等),可以使用 Docker Compose 来管理。

1. 创建 docker-compose.yml 文件:

version: '3'
services:
  unit:
    image: nginx/unit
    ports:
      - "8080:80"
    volumes:
      - ./config.json:/docker-entrypoint.d/config.json
      - ./myapp:/www/myapp
    depends_on:
      - redis

  redis:
    image: redis:latest

2. 启动服务:

docker-compose up -d

3. 验证应用是否运行:

访问 http://localhost:8080,你应该看到你的应用已经成功部署,并且可以连接到 Redis 服务。


五、总结

通过 Docker,你可以轻松地在容器化环境中部署和管理 Nginx Unit。无论是使用官方镜像、自定义配置,还是通过 Dockerfile 和 Docker Compose 构建复杂的环境,Nginx Unit 都能与 Docker 无缝集成,为你的应用提供高性能和可扩展性。

资源:

使用官方镜像创建应用

使用官方 Nginx Unit Docker 镜像可以轻松创建和运行多种语言的应用。以下是针对 Python、PHP、Node.js 和 Go 的示例,展示如何在 Docker 中使用 Nginx Unit 部署这些语言的应用。


一、Python 应用

1. 创建项目结构:

my-python-app/
├── app.py
├── requirements.txt
└── config.json

2. 编写 app.py (一个简单的 WSGI 应用):

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return [b"Hello, World from Python!"]

3. 编写 requirements.txt (依赖文件):

# 可以留空,因为这是一个简单的应用

4. 编写 config.json (Unit 配置文件):

{
    "listeners": {
        "*:80": {
            "application": "myapp"
        }
    },
    "applications": {
        "myapp": {
            "type": "python",
            "module": "app",
            "path": "/www/myapp"
        }
    }
}

5. 运行 Docker 容器:

docker run -d --name my-python-app \
    -p 8080:80 \
    -v $(pwd)/my-python-app:/www/myapp \
    -v $(pwd)/my-python-app/config.json:/docker-entrypoint.d/config.json \
    nginx/unit

6. 访问应用:

打开浏览器或使用 curl 访问 http://localhost:8080,你会看到输出:Hello, World from Python!


二、PHP 应用

1. 创建项目结构:

my-php-app/
├── index.php
└── config.json

2. 编写 index.php:

<?php
echo "Hello, World from PHP!";
?>

3. 编写 config.json (Unit 配置文件):

{
    "listeners": {
        "*:80": {
            "application": "myapp"
        }
    },
    "applications": {
        "myapp": {
            "type": "php",
            "root": "/www/myapp",
            "index": "index.php"
        }
    }
}

4. 运行 Docker 容器:

docker run -d --name my-php-app \
    -p 8080:80 \
    -v $(pwd)/my-php-app:/www/myapp \
    -v $(pwd)/my-php-app/config.json:/docker-entrypoint.d/config.json \
    nginx/unit

5. 访问应用:

访问 http://localhost:8080,你会看到输出:Hello, World from PHP!


三、Node.js 应用

1. 创建项目结构:

my-node-app/
├── app.js
├── package.json
└── config.json

2. 编写 app.js:

const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello, World from Node.js!');
});

server.listen(80);

3. 编写 package.json:

{
    "name": "my-node-app",
    "version": "1.0.0",
    "main": "app.js",
    "scripts": {
        "start": "node app.js"
    }
}

4. 编写 config.json (Unit 配置文件):

{
    "listeners": {
        "*:80": {
            "application": "myapp"
        }
    },
    "applications": {
        "myapp": {
            "type": "nodejs",
            "script": "/www/myapp/app.js"
        }
    }
}

5. 运行 Docker 容器:

docker run -d --name my-node-app \
    -p 8080:80 \
    -v $(pwd)/my-node-app:/www/myapp \
    -v $(pwd)/my-node-app/config.json:/docker-entrypoint.d/config.json \
    nginx/unit

6. 访问应用:

访问 http://localhost:8080,你会看到输出:Hello, World from Node.js!


四、Go 应用

1. 创建项目结构:

my-go-app/
├── main.go
└── config.json

2. 编写 main.go:

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World from Go!")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":80", nil)
}

3. 编译 Go 应用:

go build -o my-go-app

4. 编写 config.json (Unit 配置文件):

{
    "listeners": {
        "*:80": {
            "application": "myapp"
        }
    },
    "applications": {
        "myapp": {
            "type": "go",
            "executable": "/www/myapp/my-go-app"
        }
    }
}

5. 运行 Docker 容器:

docker run -d --name my-go-app \
    -p 8080:80 \
    -v $(pwd)/my-go-app:/www/myapp \
    -v $(pwd)/my-go-app/config.json:/docker-entrypoint.d/config.json \
    nginx/unit

6. 访问应用:

访问 http://localhost:8080,你会看到输出:Hello, World from Go!


五、总结

通过官方 Nginx Unit Docker 镜像,你可以轻松部署 Python、PHP、Node.js 和 Go 等多种语言的应用。只需编写简单的配置文件和代码,即可在 Docker 中运行你的应用。Nginx Unit 的灵活性和高性能使其成为容器化环境中部署应用的理想选择。

资源:

标签: Nginx

添加新评论