快速安装_文档-OpenNJet开源社区

快速开始

安装

NJet官方提供centos,ubuntu,cloudOS等多个版本的2进制安装包,及软件源。其中支持的有:

OS 架构 当前版本 下载链接
Centos7.x​ x86-64​ 3.1.0 https://gitee.com/njet-rd/njet/releases/download/v3.1.0/njet-3.1.0-1.el7.x86_64.rpm
Ubuntu18.04​ x86-64 3.1.0 https://gitee.com/njet-rd/njet/releases/download/v3.1.0/njet_3.1.0-1~ubuntu.18.04~bionic_amd64.deb
Ubuntu20.04 x86-64 3.1.0 https://gitee.com/njet-rd/njet/releases/download/v3.1.0/njet_3.1.0-1~ubuntu.18.04~bionic_amd64.deb
Ubuntu22.04 x86-64​ 3.1.0 https://gitee.com/njet-rd/njet/releases/download/v3.1.0/njet_3.1.0-1~ubuntu.18.04~bionic_amd64.deb

二进制安装包,可以从gitee的主仓库选择对应的版本进行下载,或通过软件源的方式自动获得后续的 更新,目前支持centos及ubuntu的软件源配置。除NJet主应用外,NJet的某些功能模块会通过独立的 二进制发行包进行可选安装,当前提供的有njet-otel模块,用于支持调用链跟踪,其安装参考«njet- otel安装说明»(todo)。

1. 二进制安装​

OpenNJet 提供多个版本操作系统下的二进制安装文件,二进制包安装后,所有OpenNJet 相关的文件 都在 /usr/local/njet 目录下, 并在 /usr/lib/systemd/system 目录下添加service 文件。

1.1 RPM 安装​

  1. 从 gitee https://gitee.com/njet-rd/njet/releases上下载对应操作系统的rpm 格式安装包​

  2. 使用 yum 进行安装 例如下载的安装包是njet-2.0.0-1.el7.x86_64.rpm, yum localinstall ./njet- 2.0.0-1.el7.x86_64.rpm​

  3. 安装后,使用命令 systemctl start njet 启动服务​

  4. 使用命令 systemctl stop njet 停止服务​

1.2 DEB 安装​

  1. 从 gitee https://gitee.com/njet-rd/njet/releases上下载对应操作系统的deb 格式安装包​
  2. 使用 dpkg 进行安装 例如下载的安装包是njet_2.0.1-1~ubuntu.18.04~bionic_amd64.deb, dpkg -i ./njet_2.0.1-1~ubuntu.18.04~bionic_amd64.deb​
  3. 安装后,使用命令 systemctl start njet 启动服务​
  4. 使用命令 systemctl stop njet 停止服务​

2. 安装发行版

2.1 centos发行版​

现在 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
  1. 更新yum 缓存
yum clean all
yum makecache #类似于 apt update​
  1. 安装 njet 或 njet-otel
yum install njet
yum install njet-otel
  1. 启动njet服务​
systemctl start njet

2.2 ubuntu发行版​

目前支持Ubuntu 18.04/20.04/22.04 amd64 架构的操作系统通过APT源直接安装二进制软件包​ 具体安装方式如下:

  1. 添加gpg 文件​
 sudo apt-get update
 sudo apt-get install ca-certificates curl gnupg
 sudo install -m 0755 -d /etc/apt/keyrings
 curl -fsSL https://njet.org.cn/download/linux/ubuntu/gpg | sudo gpg --dearmor -
o /etc/apt/keyrings/njet.gpg
 sudo chmod a+r /etc/apt/keyrings/njet.gpg
  1. 添加APT 源​
 echo \

"deb [arch=$(dpkg --print-architecture) signed-
by=/etc/apt/keyrings/njet.gpg] https://njet.org.cn/download/linux/ubuntu \
 $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
 sudo tee /etc/apt/sources.list.d/njet.list > /dev/null
 sudo apt-get update
  1. 安装及启动
 sudo apt-get install njet
 sudo systemctl start njet

3. 源码安装

3.1 下载 OpenNJet 源码​

如果要下载特定tag的源码,如v2.0.0,则执行:

git clone -b v2.0.0 git@gitee.com:njet-rd/njet.git

如果要下载最新源码,则执行:

git clone git@gitee.com:njet-rd/njet.git

如果要下载特定branch(比如dynconf)的源码,则执行:

git clone git@gitee.com:njet-rd/njet.git --branch=dynconf

如果要下载特定branch(比如dynconf)的特定commit (ca5eaf057a5709a615a4873a1558c6d9fe1cc213)的源码,则执行:

git clone <remote_repository> --branch=<branch_name> --single-branch --depth=1
commit/ca5eaf057a5709a615a4873a1558c6d9fe1cc213

如果要下载特定commit(ca5eaf057a5709a615a4873a1558c6d9fe1cc213)源码,则执行:

git clone -b ca5eaf057a5709a615a4873a1558c6d9fe1cc213 git@gitee.com:njet-rd/njet.git

3.2 编译:

提供两种编译方法:

  1. dockerfile快速编译,不用宿主机安装依赖的编译环境以及软件

    依赖:docker 环境(需要在编译机器安装docker并启动docker)

    docker build -t njet_main:v1.0 .

    docker run -v `pwd`:/njet_main njet_main:v1.0 /bin/bash -c "cd /njet_main &&
    ./build_cc.sh conf make"
  1. 宿主机安装依赖环境以及软件 centos7系统请安装如下软件:
    gcc gcc-c++
    libtool libtool-ltdl cmake3
    make cmake perl perl-CPAN
    zlib-devel cmake perl-IPC-Cmd
    pkgconfig make vim-common
    sudo m4 deltarpm openssl-devel
    automake autoconf pcre2-devel
    yum-utils rpm-build

ubuntu系统请安装如下软件:

    gcc g++ make cmake libpcre2-dev
    libpcre3-dev libssl-dev zlib1g-dev
    perl m4  libtool  automake 
    autoconf vim-common unzip  libcap2-bin

编译命令:

    ./build_cc.sh conf make

3.3 安装:

• 将 /usr/local/lib 目录添加到 /etc/ld.so.conf 文件,并使用 make install 安装编译后的依赖库,可 执行文件,动态模块及默认配置文件。

sudo bash -c 'echo "/usr/local/lib" >> /etc/ld.so.conf'
sudo ./build_cc.sh install

4. 启动

4.1 手工起停

  1. 通过源码编译安装的,可执行文件及相关的配置文件将安装到目录/usr/local/njet
 cd /usr/local/njet
 sbin/njet

4.2 通过systemctl起停​

使用 rpm 或 deb 二进制安装后,会在 /usr/lib/systemd/system/ 目录下添加 service文件。​

使用 sudo systemctl start njet 启动服务。​

使用 sudo systemctl stop njet 停止服务​

5. 验证

通过浏览器或curl/wget访问部署机器的8080地址​

curl http localhost:8080/


6.njet wsgi 安装

在以下两个rpm包或者deb包的基础上安装MrDoc应用并启动njet服务

6.1 安装两个rpm或者deb包

centos:

https://gitee.com/njet-rd/njet/releases/download/v3.1.0/njet-3.1.0-1.el7.x86_64.rpm

https://gitee.com/njet-rd/njet/releases/download/v3.1.0/njet-python-wsgi-3.1.0-1.el7.x86_64.rpm

ubunbu :

https://gitee.com/njet-rd/njet/releases/download/v3.1.0/njet_3.1.0-1~ubuntu.18.04~bionic_amd64.deb

https://gitee.com/njet-rd/njet/releases/download/v3.1.0/njet_python_wsgi_3.1.0-1~ubuntu.18.04~bionic_amd64.deb

6.2 使用njet自带的python环境

6.2.1 配置python环境

最好不配置到root用户,配置给njet用户比较好。防止系统混乱

ln -s /usr/local/njet/pyenv ~/.pyenv
chmod 777 /root/.pyenv/versions/3.8.19/bin/python3.8

6.2.2 将以下命令复制到~/.bashrc中,

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

export PATH=/usr/local/njet/pyenv/versions/3.8.19/bin/:$PATH
export LD_LIBRARY_PATH=/usr/local/njet/pyenv/versions/3.8.19/lib:$LD_LIBRARY_PATH


6.2.3 查看是否生效

bash
pip3 -V
which python3
python3 -V

img

6.3 创建一个最简单的wsgi应用

cd /usr/local/njet/apps
mkdir simple_wsgi
cd simple_wsgi
touch __init__.py
vim wsgi.py

wsgi.py:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello Return from python wsgi\n"]


最简单的应用如下: img

6.4 NJet启动wsgi

6.4.1 njet.conf:

#load_module modules/njt_http_vtsc_module.so;
load_module modules/njt_http_location_module.so; #load_module modules/njt_agent_dynlog_module.so; #load_module modules/njt_http_dyn_map_module.so; #load_module modules/njt_stream_dyn_map_module.so; #load_module modules/njt_range_module.so;
#load_module modules/njt_http_dyn_range_module.so;
#load_module modules/njt_http_dyn_server_module.so;
# load_module modules/njt_http_upstream_api_module.so;
# load_module modules/njt_http_lua_module.so;
#load_module modules/njt_stream_lua_module.so;
#load_module modules/njt_http_multi_header_module.so;
load_module modules/njt_python_wsgi_module.so;
#load_module modules/njt_http_upload_module.so;
helper ctrl modules/njt_helper_ctrl_module.so /etc/njet/conf/ctrl.conf;
helper broker modules/njt_helper_broker_module.so conf/mqtt.conf;
#helper broker modules/njt_helper_rsync_module.so conf/rsync.conf;

worker_processes  auto;
# daemon off;
cluster_name helper;
node_name test_node1;


error_log logs/error.log info;    
pid        /etc/njet/njet.pid;

events {
    worker_connections  1024;
}


python_stack_size 512k; #这个要设置得大一些


http {
        include mime.types;
   # python_include inc.py; #这个目前不需要测
   # python_access "access(r)";#这个目前不需要测
  #  log_format postdata $request_body;

    server {
        listen 8080;

       root  /usr/local/njet/apps;

#        location /test {
#            enable_http_multi_part_parse;#这个目前不需要测
#            python_content "content(r)"; #这个目前不需要测
#        }

       location / {
           wsgi  simple_wsgi;
        }

    }
}




6.4.2 需要配置ldconfig

#root 用户配置
cat << EOF >> /etc/ld.so.conf.d/njet.conf
/usr/local/njet/pyenv/versions/3.8.19/lib
EOF
ldconfig 

6.4.3 设置环境变量,会在PYTHONPATH下查找对应的模块

export PYTHONPATH=/etc/njet:/usr/local/njet/apps

6.4.3.1 启动脚本如下:

sudo -u njet --preserve-env=PYTHONPATH /usr/local/njet/sbin/njet -p /usr/local/njet -c conf/njet.conf

6.4.3.2 或者修改service

[Unit]
Description=njet
After=network.target

[Service]
Type=forking
User=njet
Group=njet
WorkingDirectory=/usr/local/njet
Environment="PYTHONPATH=/etc/njet:/usr/local/njet/apps"
ExecStart=/usr/local/njet/sbin/njet -p /usr/local/njet -c conf/njet.conf
ExecStop=/usr/local/njet/sbin/njet -p /usr/local/njet -c conf/njet.conf -s stop
ExecReload=/usr/local/njet/sbin/njet -p /usr/local/njet -c conf/njet.conf -s reload
RestartPreventExitStatus=SIGKILL
PrivateTmp=true

[Install]
WantedBy=multi-user.target


systemctl daemon-reload
systemctl start njet


njet启动不需要配置其他的环境变量,例如PATH,LD_LIBRARY_PATH

因为njet启动过程中,在 python module初始化过程内增加了两个setenv,效果类似于下面两指令,只在njet启动后生效。


export PATH=/usr/local/njet/pyenv/versions/3.8.19/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/njet/pyenv/versions/3.8.19/lib:$LD_LIBRARY_PATH

6.5 访问njet 启动的应用

curl 127.0.0.1:8080
Hello Return from python wsgi

img

功能特性

继承 nginx-1.23.1 所有功能, 并且100%兼容nginx

OpenNJet 功能特性

Copilot框架

支持动态加载不同的外部copilot模块

支持外部模块异常退出的自动重启

KV模块

支持键值的查询及设置

支持键值的持久化

动态配置框架

支持控制平面的消息发送

支持RPC消息、组播消息

支持消息持久化

Cache-purge

支持缓存清理

支持按指定前缀清理缓存

开启分片后修改源文件不会造成下载失败

health_check

支持单独在helper进程开启健康检查,不影响数据面业务

支持运行时动态开启或关闭健康检查功能

支持校验返回http code

支持校验返回http header

支持校验返回http body

支持https健康检查

支持强制健康检查,以及持久化功能

支持国密https健康检查

Split-clients-2

支持蓝绿发布

支持运行时动态调整流量比例

黑白名单

支持黑名单方式进行访问IP的限制

支持白名单方式进行访问IP的限制

 支持运行时动态设置IPv4的黑白名单列表 

doc模块

支持location 级别通过doc_api 指令配置,实现对swaggergui页面的访问

支持通过swagger 页面实现对各功能opentapi的访问

支持通过gui页面实现对动态模块配置修改的能力

telemetry(外部编译模块)

支持http请求在不同server间的服务追踪

支持动态开关控制调用链的生成

正向代理(支持http/https

实现了HTTP CONNECT 方法支持http/https正向代理访问

vts模块

支持serverrequestresponsetrafficcache信息的统计,其中serverresponse可以按照response code进行分类统计,分类统计使用的response code1xx2xx3xx4xx5xx

支持upstreamcache信息的统计

支持通过内嵌的html页面进行统计信息的展示

支持通过Prometheusgrafana进行统计信息的展示

支持动态配置serverlocation统计开关,支持动态配置serverfilter key

国密支持

支持server中使用国密

支持反向代理中使用国密

支持国密双证证书

动态(国密)证书更新

动态access log

支持运行中动态关闭access log功能

支持运行中动态修改写入的日志文件

支持运行中切换syslog服务器

支持运行中切换写入文件的变量

支持运行时增加日志format

支持运行时修改日志format

声明式API

支持感知声明式模块注册

支持查询声明式模块查询

支持PUT方式更新声明式配置

边车支持

支持流量劫持,兼容istio 规则

支持协议识别

支持代理http1.1

支持 istio 的双向认证(service-to-service mTLS)

动态location 支持

支持通过api vs 添加 location

支持通过api vs中删除已经添加的location

动态upstream api 支持

支持通过api,对http stream 中的upstream 信息进行查询

支持通过api,对http stream 中的upstream server 进行, 添加,修改,删除

支持通过api,对http stream 中的upstream 的统计信息进行重置

支持post 添加的upstream server 持久化或非持久化 

动态域名upstream server

支持静态配置upstream server 域名的reslove 属性,定时解析域名,根据域名对应的ip 增减结果,同步更新到upstream server 列表中

支持通过upstream api post接口,添加server 域名,并定时解析域名

Http 会话保持支持

支持cookie 会话保持

支持route 会话保持

支持lear 会话保持 

负载均衡

slow_start 慢启动功能,针对轮询算法,实现server新增或故障转正常后,业务的流量在指定时间,缓慢增长

动态SSL证书

动态ssl证书功能由声明式api改为命令式api

动态配额功能

配额(limit conn、limit rps、limit rate)功能声明式 API 动态化配置

组播集群

  组播gossip构建集群功能
  基于组播实现app_stickey 会话同步功能
  基于组播实现limit connection集群连接数限制功能
  基于组播实现limit rps集群请求数限制功能

动态worker数量调整

动态调整worker进程数量

HA Copilot

提供HA Copilot模块,NJet多个实例间支持VIP的配置

贡献指南

贡献从哪里开始入手?

开始入手

初阶入门:从快速上手开始

文档贡献:当然您也可以考虑从文档贡献

高阶挑战:先来两个优化任务练练手

问题反馈:

1、提交 Issue 反馈问题

2、描述如何重现该问题(可选)

3、可提供解决方案(可选)

4、提交PR以解决问题(可选)

如果您想为OpenNJet贡献一个新功能点:

1、提出 issue 指出你想要的新功能以及原因

2、在 issue 中指出这个功能的实现方案以及测试大纲(可选)

3、提出PR实现这个新的功能

如果您对现有的已经存在的问题感兴趣:

1、您可以在标有bug、improvement和enhancement的issue标签内帮助他人。您可以选择给出对应的解决方案,并提交PR修复该issue

2、在标有question标签的issue内回答问题帮助他人

参加社区活动

如果您对现有的活动感兴趣:

欢迎关注我们的活动页面或者关注我们的QQ群:了解最新动态。

活动日历还在更新中···