何为 OpenNjet ?
OpenNJet 应用引擎是基于 NGINX 的面向互联网和云原生应用提供的运行时组态服务程序,作为底层引擎,OpenNJet 实现了NGINX 云原生功能增强、安全加固和代码重构,利用动态加载机制可以实现不同的产品形态,如Web服务器、流媒体服务器、负载均衡、代理(Proxy)、应用中间件、API网关、消息队列等产品形态等等。
更多信息参见—— https://njet.org.cn/
类似产品
OpenNjet感觉很强大的样子,而目前市面上的也有相关的类似解决方案,可以做做对比
- Nginx
- 目前市面上最有名的 Web服务器 解决方案
- 是一个高性能的Web服务器,专注于对静态内容的快速和高效服务。它采用异步网络IO模型,具有很好的抗高并发能力。Nginx通常用作反向代理服务器,也可以实现负载均衡和动静分离。它的特点是轻量级,占用更少的内存和资源,并且支持热部署,即不停机更新配置文件和升级版本。
- Apache
- 是一个通用的Web服务器,支持静态和动态内容,可以通过扩展脚本和模块来支持更多的功能。它性能稳定,功能强大,高度模块化,并且可以作为代理服务器或负载均衡器使用。Apache支持多种操作系统和Web服务器平台,通用性较高,但可能需要更多的配置和管理。
- Tomcat
- 是一个专门用于Java应用程序的Web服务器和应用程序服务器,可以运行Java Servlet和JavaServer Pages(JSP)。它是轻量级的应用服务器,支持动态处理,并且可以独立于Apache运行。Tomcat使用基于线程池的模型来处理请求,能够支持大量并发请求,但在处理静态内容方面性能较低。
OpenNjet 的优势
- 性能无损动态配置 (这个功能是着实不错👍)
- 灵活的CoPilot框架
- 支持HTTP/3
- 支持国密
- 企业级应用
- 高效安全
OpenNjet 的使用实践
实践过程中作者使用服务器配置为
CPU - 2核 内存 - 2GB CentOS 7.6 64bit
(对于CentOs镜像目前只支持 centos 7 和 x86_64架构)当然 OpenNjet 针对不同系统镜像提供了专用的解决方案,官方提供centos,ubuntu,cloudOS等多个版本的2进制安装包,及软件源。具体参见官网文档: 快速开始--安装
先说一下大概流程
- 在
服务器
上安装 OpenNjet - 部署 WebServer 服务,部署网站
- 尝试动态修改配置
安装
现在 njet 支持yum源安装了,目前只支持 centos 7 和 x86_64架构。具体安装方式如下:
采用
发行版
的方式安装,官网目前还提供二进制文件安装
&源码安装
1.生成njet.repo
# 官方给的命令,先执行,若报错往下看
echo "
[opennjet]
name=OpenNJet
baseurl=https://njet.org.cn/download/linux/centos/$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://njet.org.cn/download/linux/centos/RPM-GPG-KEY-OpenNJet
" > /etc/yum.repos.d/njet.repo
上面是官方给的命令,(在执行第二步--
yum clean all
)可能会提示报错如下:
Loaded plugins: fastestmirror, langpacks
File contains parsing errors: file:///etc/yum.repos.d/njet.repo
[line 3]: name=OpenNJet
[line 4]: baseurl=https://njet.org.cn/download/linux/centos///
[line 5]: enabled=1
[line 6]: gpgcheck=1
[line 7]: gpgkey=https://njet.org.cn/download/linux/centos/RPM-GPG-KEY-OpenNJet
是因为 $releasever 和 $basearch
不能被识别,原因如下
它们通常由CentOS或RHEL(Red Hat Enterprise Linux)系统的发行版信息脚本来设置。这些变量代表特定于发行版的信息,用于构建YUM仓库的URL。
$releasever 通常指的是发行版的版本号,例如 "7" 对于 CentOS 7。
$basearch 指的是底层架构的类型,例如 "x86_64" 对于64位系统。
所以命令更新为如下
echo -e "[opennjet]\nname=OpenNJet\nbaseurl=https://njet.org.cn/download/linux/centos/7/x86_64/\nenabled=1\ngpgcheck=1\ngpgkey=https://njet.org.cn/download/linux/centos/RPM-GPG-KEY-OpenNJet" | sudo tee /etc/yum.repos.d/njet.repo
# echo -e 来允许解释反斜杠 \ 作为转义字符,tee 命令用于将输出写入文件。
2.更新yum 缓存
记得 两个命令 要依次执行
yum clean all
#成功输出如下
#Loaded plugins: fastestmirror, langpacks
#Cleaning repos: docker-ce-stable epel extras opennjet os updates
#Cleaning up list of fastest mirrors
yum makecache #类似于 apt update
#成功输出如下
# Metadata Cache Created
3.安装 njet 或 njet-otel
yum install njet
yum install njet-otel
# 会有 is this ok 的确认,输入 y 即可
#成功输出如下
#Installed:
# njet.x86_64 0:2.1.0-1.el7
#Dependency Installed:
# pcre2.x86_64 0:10.23-2.el7
#Complete!
也可以使用
yum list installed
来查看,所有的安装库,检查是否安装起了 njet
启动OpenNjet
- 通过systemctl起停
sudo systemctl start njet
#无输出
- 检查是否安装成功,执行以下命令
njet -h
# 输入如下即为成功
# njet version: njet/2.1.0 (NJT_49bbb7323c42624fcc702182352114b2427d284d)
# ...等
若输出
-bash: njet: command not found
则是环境变量的问题,不做过多赘述
# 临时解决方案
# 1.执行 命令 找到 njet 的bin执行文件的位置
find / -name njet
# 假设输出如下
# /usr/local/njet
# /usr/local/njet/sbin/njet
# 2.直接使用路径调用njet命令
/usr/local/njet/sbin/njet -h
# 输入如下即为成功
# njet version: njet/2.1.0 (NJT_49bbb7323c42624fcc702182352114b2427d284d)
# ...等
测试启动Web Server服务
刚好最近使用 Nuxt.js 模仿了以下 某站 的移动端首页,使用 OpenNjet 来部署
这里要注意 njet 安装在服务器后,会有一个
njet
文件夹产生,里面有如下文件结构
├── build 编译rpm/deb脚本
├── auto 自动检测系统环境以及编译相关的脚本
│ ├── cc 关于编译器相关的编译选项的检测脚本
│ ├── lib njet编译所需要的一些库的检测脚本
│ ├── os 与平台相关的一些系统参数与系统调用相关的检测
│ └── types 与数据类型相关的一些辅助脚本
├── conf 存放默认配置文件,在make install后,会拷贝到安装目录中去
├── contrib 存放一些实用工具,如geo配置生成工具(geo2njet.pl)
├── html 存放默认的网页文件,在make install后,会拷贝到安装目录中去
├── repos 存放yum数据源
├── doc njet的api文档
│ ├── swagger openapi 接口网页文档
│ ├── gui 前端展示页面文档
│ └── manual njet文档手册
├── luajit luajit
├── lualib lualib
├── modules njet动态模块以及util模块
└── src 存放njet的源代码
├── core njet的核心源代码,包括常用数据结构的定义,以及njet初始化运行的核心代码如main函数
├── event 对系统事件处理机制的封装,以及定时器的实现相关代码
│ └── modules 不同事件处理方式的模块化,如select、poll、epoll、kqueue等
├── http njet作为http服务器相关的代码
│ └── modules 包含http的各种功能模块
├── ext/lua lua模块
├── mail njet作为邮件代理服务器相关的代码
├── stream tcp/ udp 四层网络代理服务器相关的代码
├── misc 一些辅助代码,测试c++头的兼容性,以及对google_perftools的支持
└── os 主要是对各种不同体系统结构所提供的系统函数的封装,对外提供统一的系统调用接口
找到 njet 项目文件路径
find / -name njet
# 假设输出如下
# /usr/local/njet #就是这个文件夹
# /usr/local/njet/sbin/njet #这是环境变量所用
测试启动
njet -p /usr/local/njet -c conf/njet.conf
# njet -p njet项目目录 -c njet.conf配置在njet项目路径 启动项目
# njet -s stop 停止服务的命令
- 访问
服务器公网IP:8080
看到如下页面即成功
使用Web Server服务 部署网站服务
先将测试启动的 njet 服务停止,执行以下命令
#停止服务的命令
njet -s stop
准备好 njet.conf
- 类似于 Nginx 的
default.conf
,njet 也有自己的配置文件njet.conf
- 将下面的内容放进 上诉提到的 njet 项目文件下的
conf/njet.conf
(注意不要把其他的默认内容覆盖了,仅仅配置 http.server 对应的部分就好)
# 起一个 http 服务
http {
# 设置 server 配置
server {
# 监听8080 端口
listen 8080;
# 嘻嘻 我的网站就叫 SiliSili
server_name shitMountainSiliSili.com;
# web网页文件的 根目录 以及 启动文件
location / {
root html;
# root /var/www/html;
# index index.html;
}
}
}
准备好Web网页应用项目文件
将所有的项目文件都上传至服务器,位置如下usr/local/njet/html
, 即njet项目所在位置下的html文件夹
- 代码文件
启动web server 服务
- 服务器运行命令
njet -p /usr/local/njet -c conf/njet.conf
- 访问
服务器公网IP:8080
看到如下页面即成功
参考资料
OpenNjet官网:https://njet.org.cn/
🎯 开发指南
📖 使用手册