Microservices hiện nay được đề cập tới trong thế giới phần mềm, công nghệ được kỳ vọng cao và đánh giá như một xu hướng cho tương lai (Open API, service provider, …). Khi làm việc với microservices chắc hản phần lớn đăng được xậy dựng bằng nginx. NGINX là một phần mềm web server mã nguồn mở, sử dụng kiến trúc hướng sự kiện (event-driven) không đồng bộ (asynchronous). Mục tiêu ban đầu để phục vụ HTTP cache nhưng sau được áp dụng vào reverse proxy, HTTP load balancer và các giao thức truyền mail như IMAP4, POP3, và SMTP. Chắc chắn rằng nhừng ai từng làm việc với nginx đều có vô vàn lạ lẫm với những config trong nginx và hơn thế nữa việc thay đỏi cấu hình của nginx đỏi hỏi kỹ sư phải thực sự có ảm hiểm rõ về nginx và hệ thống vì bất cứ vấn để xẩy ra cũng anh hưởng nguy hiểm đến hệ thống và khắc phục rất khó khăn. Hôm nay mình xin đưa ra một giải phải để giảm thiểu rủi ro cũng như giúp mọi người có các tiếp cận đơn gian hơn với nginx đó là Nginx unit.

Nginx unit là gì?

NGINX Unit: About

NGINX Unit là một dynamic application server, có khả năng chạy bên cạnh NGINX Plus và NGINX  độc lập. Điều tuyệt vời là nó hỗ trợ API RESTful JSON, triển khai các thay đổi cấu hình mà không làm gián đoạn dịch vụ và chạy các ứng dụng được xây dựng với nhiều ngôn ngữ và framework. Cải tiến lớn phải không nào, điều này sẽ giúp chúng ta config nó với JSON và dùng REST API để thay đổi cấu hình.

Các tính năng chính của NGINX UNIT

Flexibility
  • Toàn bộ cấu hình được quản lý động qua HTTP thông qua API RESTful JSON thân thiện với người dùng
  • Cập nhật cấu hình được thực hiện trong thời gian chạy mà không bị gián đoạn. ZERO DOWNTIME -> Quá ngon phải không nào
  • Yêu cầu được chuyển giữa nội dung tĩnh , máy chủ ngược dòng và ứng dụng cục bộ
  • dynamic load balancing bằng phương pháp round-robin
Hiệu suất
  • Đương nhiên rồi khi mà nó vẫn là NGINX
Bảo mật & Mạnh mẽ

Ngôn ngữ ứng dụng được hỗ trợ

  • Assembly
  • Go
  • JavaScript (Node.js)
  • Java
  • Perl
  • PHP
  • Python
  • Ruby
  • Và nhiều ngôn ngữ khác nữa

Thực hành deploy flask app với nginx unit

Tạo flask app đơn giản

Mình sẽ triển khai một ứng dụng rất cơ bản hiển thị Hello world. Tạo một tệp có tên app.pytrong thư mục project.

from flask import Flask
app = Flask(__name__)
application = app


@app.route('/')
def hello_world():
    return 'Hello, World!'

Thêm file requirements.txt để cài flask

flask

Dùng lênh pip3 install -r requirements.txt để cài đặt flask sau đó kiểm tra cài đặt bằng lênh flask run


Nếu hiện thị tương tự như trên là đã thành công

Cài đặt nginx unit

Các cần cài trước docker https://docs.docker.com/engine/install/

Sau đó tại 1 Dockerfile như sau

# keep our base image as small as possible
FROM nginx/unit:1.19.0-python3.7

# port used by the listener in config.json
EXPOSE 8080

COPY requirements.txt /config/requirements.txt
RUN apt update && apt install -y python3-pip    \
    && pip3 install -r /config/requirements.txt \
    && rm -rf /var/lib/apt/lists/*

COPY config.json /docker-entrypoint.d/config.json
COPY app.py /www/app.py

uẩn bị file config.json cho nginx unit

{
  "listeners": {
    "*:8080": {
      "pass": "applications/python_app"
    }
  },
  "applications": {
    "python_app": {
      "type": "python",
      "path": "/www/",
      "module": "app"
    }
  }
}

Mình sẽ cài đặt cổng 8080 đển pass đến flask.
Bây giờ có thể chạy docker để kiểm tra

sudo docker build -t build — tag=unit-flask .

sudo docker run -p 8080:8080 unit-flask

Bây giờ truy cập vào http://localhost:8080 sẽ có kết quả như sau