目录
- 一、初识OpenNJet
- 二、系统架构
- 三、动手实践
- 1.CentOS 编译环境配置
- 1.1配置yum源:
- 1.2.yum安装软件包
- 1.3.创建符号连接
- 2.编译代码
- 编译 OpenNJet
- 执行 make
- 四、基本使用说明
- 1.目录结构概述:
- 2.常用命令:
- 五、部署 Web 应用程序
- 配置文件修改
- 启动 NJet
- 六、总结
一、初识OpenNJet
OpenNJet 应用引擎是一个基于 NGINX 的运行时组态服务程序,专为互联网和云原生应用提供支持。通过对 NGINX 架构的改进和扩展,OpenNJet 实现了云原生功能增强、安全加固和代码重构,具备动态加载机制,能够实现多种产品形态,如 Web 服务器、流媒体服务器、负载均衡、代理、应用中间件、API 网关、消息队列等。
想要了解更多可以查看OpenNJet官网:https://njet.org.cn/
二、系统架构
NGINX以其高性能在API网关领域中脱颖而出,但其缺乏动态配置能力一直为业界所批评。为了解决这一问题,OpenNJet在NGINX的基础架构上进行了扩展和改进,增加了C语言编写的可持久化动态存储功能,使得配置更改可以动态生效,从而显著提升了OpenNJet的灵活性和适用性。
此外,随着对应用引擎可观测性需求的增加,OpenNJet采用了Copilot框架,通过将业务处理、配置变更与性能指标采集、日志记录和跟踪信息注入分离,有效减少了遥测数据处理对主要性能的影响。作为一个云原生的应用引擎,OpenNJet支持行业广泛使用的Ingress和Sidecar API规范。基于动态配置和Copilot框架,OpenNJet能够通过更新独立的Copilot模块来快速适应不断变化的行业标准,确保其在现代应用部署中的竞争力。
三、动手实践
OpenNJet 的编译与安装相对简单,需要准备相应的编译环境,并执行简单的编译命令和安装步骤。具体流程清晰明了,开发者能够快速上手。
本文以 CentOS 系统环境为例带大家动手实践一下
1.CentOS 编译环境配置
1.1配置yum源:
首先执行以下指令:
sudo yum --enablerepo=extras install -q -y epel-release centos-release-scl-rh https://repo.ius.io/ius-release-el7.rpm
sudo curl -o /etc/yum.repos.d/mercurial.repo https://www.mercurial-scm.org/release/centos7/mercurial.repo
上面步骤完成后,文件系统的目录/etc/yum.repos.d 将生成对应的repo文件
ls -al /etc/yum.repos.d/mercurial.repo
1.2.yum安装软件包
sudo yum install -y devtoolset-8-make devtoolset-8-toolchain ca-certificates mercurial zlib-devel cmake3 ninja-build libunwind-devel pcre-devel openssl-devel libtool libtool-ltdl
1.3.创建符号连接
sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/gcc /usr/local/bin/gcc
sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/c++ /usr/local/bin/c++
sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/cc /usr/local/bin/cc
sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/make /usr/local/bin/make
2.编译代码
https://github.com/OpenNJet/OpenNJet
可以去 GitHub 下载 zip 文件并上传至 /home 目录下,并解压
编译 OpenNJet
执行以下代码
sudo sh build_cc.sh conf
执行 make
sudo make
正确编译完成如上图所示
最后执行:make install
四、基本使用说明
OpenNJet 提供了丰富的命令和参数,方便进行配置和管理。通过指定配置文件和启动参数,开发者可以快速启动、测试、停止和重新加载服务,同时提供了详细的目录结构和功能说明,方便进行定制和扩展。
1.目录结构概述:
- build: 包含用于编译rpm/deb的脚本。
- auto: 自动检测系统环境和编译配置脚本,包括编译器选项(cc)、库(lib)、系统参数(os)和数据类型(types)。
- conf: 默认配置文件,安装时复制到安装目录。
- contrib: 包括实用工具如geo配置生成器(geo2njet.pl)。
- html: 默认网页文件,安装时复制到安装目录。
- repos: 包含yum数据源。
- doc: 存放API文档,包括Swagger API、GUI页面和手册。
- src: njet源代码,包含核心、事件处理、HTTP服务器代码、邮件和网络代理服务器代码等。
2.常用命令:
- njet -h: 显示帮助信息。
- njet -p /tmp/njet/ -c conf/njet.conf: 启动,可以指定配置文件路径和配置文件。
- njet -t: 测试配置信息是否正确。
- njet -v: 显示版本信息。
- njet -V: 显示编译参数。
- njet -s stop: 快速停止服务。
- njet -s quit: 优雅停止服务。
- njet -s reload: 重新加载配置。
五、部署 Web 应用程序
配置文件修改
首先我们可以通过修改 njet.conf 文件来配置 OpenNJet。
/usr/local/njet/conf/njet.conf
worker_processes auto;
cluster_name njet;
node_name node1;
error_log logs/error.log error;
helper ctrl modules/njt_helper_ctrl_module.so conf/njet_ctrl.conf;
helper broker modules/njt_helper_broker_module.so;
#helper ha modules/njt_helper_ha_module.so conf/vrrp.conf;
load_module modules/njt_http_split_clients_2_module.so;
load_module modules/njt_agent_dynlog_module.so;
load_module modules/njt_http_dyn_bwlist_module.so;
load_module modules/njt_dyn_ssl_module.so;
load_module modules/njt_http_vtsc_module.so;
load_module modules/njt_http_location_module.so;
#load_module modules/njt_http_lua_module.so;
#load_module modules/njt_http_modsecurity_module.so;
#load_module modules/njt_http_dyn_modsecurity_module.so;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name example.com;
location / {
root /usr/local/njet/html;
index index.html;
}
}
}
在 /usr/local/njet/html
下我们创建了 index.html 文件
启动 NJet
sudo systemctl start njet
然后我们可以使用服务器的 IP 地址或域名访问这个页面
OpenNJet作为新一代云原生引擎有着多样的安装方式可以满足不同情况的需求,除了上面所展示的基本Web配置外,OpenNJet还具有动态配置,国密支持等等功能,期待能有越来越多的开发者加入进来,一起体验和不断完善OpenNJet的生态环境。
六、总结
本文系统地介绍了OpenNJet,一个基于NGINX的云原生应用引擎,旨在提供对互联网和云原生应用的全面支持。通过对NGINX架构的改进和扩展,OpenNJet解决了NGINX在动态配置能力和性能指标采集方面的不足,并提供了简单的编译和安装流程以及丰富的命令和参数,使用户能够快速上手并灵活配置和管理服务。