徐州市建设局招投标网站,wordpress 产品筛选,在线seo优化工具,wordpress怎么添加栏目nginx向云原生演进#xff0c;All in OpenNJet#xff01; 1. 应用门户简介
NJet 应用引擎是基于 Nginx 的面向互联网和云原生应用提供的运行时组态服务程序#xff0c;作为底层引擎#xff0c;NJet 实现了NGINX 云原生功能增强、安全加固和代码重构#xff0c;利用动态加…nginx向云原生演进All in OpenNJet 1. 应用门户简介
NJet 应用引擎是基于 Nginx 的面向互联网和云原生应用提供的运行时组态服务程序作为底层引擎NJet 实现了NGINX 云原生功能增强、安全加固和代码重构利用动态加载机制可以实现不同的产品形态如Web服务器、流媒体服务器、负载均衡、代理(Proxy)、应用中间件、API网关、消息队列等产品形态等等。NJet使用现有的API Gateway及各动态配置模块提供的能力实现了一个Portal管理模块。通过该模块对外提供应用门户的功能以此来简化应用的开发及部署过程。应用可以只专注于业务逻辑的实现将通用的安装配置及权限认证功能统一交给NJet应用门户管理模块。逻辑架构如下图所示 2. 应用部署流程
用户使用管理员账号登录Portal门户上传应用添加用户/组/角色最后进行应用的授权。完成上述操作后使用普通用户账号登录门户即可使用应用。
a. 管理员登录
在部署包含Portal 管理模块的环境上使用api gateway的管理员账号登录后将显示Portal 的管理界面在该界面中可以进行应用的部署及相关的授权。 b. 上传应用
应用管理中点击“新增”选择Portal 应用的相应npk 文件(应用的结构在后续章节进行说明)。点击确认后Portal管理模块将自动创建应用需要的Location/Upstream, 由于使用了NJet的动态配置功能所有的改动将实时生效不需要重启或重加载NJet。
应用如果需要连接第三方组件门户管理模块也提供了通用组件的配置能力。 c. 创建访问应用需要的用户/组/角色
应用门户使用Api Gateway提供的授权能力其模型是“用户-组-角色”的授权模型一个用户可以归属于不同的用户组一个用户组可以分配多个角色API 授权将授权到角色上。
应用门户的 UI上可以对用户/组/角色及相互间的关系进行维护。 d. 对应用进行授权
在应用管理中选择应用授权对应用不同的访问路径可以授予不同的角色。
e. 普通用户登录
使用普通用户账号登录后将显示应用一览页面在改列表页面中点击对应的图标将跳转至具体的应用中。 3. Portal 应用结构
使用Portal 管理模块部署的应用需要使用Portal模块可以识别的格式进行目录规划及应用打包文件类型是npk (NJet Package)。 典型的目录结构如下图所示 META-INF 目录 manifest.json: 应用的基本信息包括入口地址配置地址及location / upstream 信息。 图标文件: jpg 或 jpg 格式的文件 app_openapi.json: openapi 3.0 格式的文件其中path 支持 通配符* 例如 /setting/* app_schema.json: 应用需要的组件配置项 可选非必须 scripts 目录 应用使用的脚本 static 目录 静态页面资源文件javascript 脚本 css
manifest.json 示例 该文件中定了入口地址entry_point), 应用配置地址cfg_url), 及应用需要的 location, upstream servers, \proxy_pass。Location 中可以直接配置属性__access_control: “true” 来标识该访问地址需要使用门户提供的用户授权功能。
{manifest_version: 1.0.0,app: {name: ollamaApp,version: 1.0.0,arch: x86_64,description: Ollma Chat application,icon_file: ollama.jpg,api_file: app_openapi.json },deployment: {type: location,server_name: ,entry_point: /ollama-app/open/chat,cfg_url: /ollama-app/open/config,locations: [{path: /ollama-app/conversation,properties: { content_by_lua_file: ${APP_PREFIX}/scripts/chat_api.lua}},{path: /ollama-app/setting,properties: {__access_control: true, content_by_lua_file: ${APP_PREFIX}/scripts/chat_api.lua}},{path: /ollama-app/chat,properties: {access_by_lua_file: ${APP_PREFIX}/scripts/access.lua, proxy_set_header: [Host 192.168.0.206,Origin http://192.168.0.206],proxy_pass: {schema: http,servers: [{server:192.168.40.206:11434}],url: /api/chat}}},{path: /ollama-app,properties: {__access_control: true, alias: ${APP_PREFIX}/static/,try_files: $uri $uri/ /ollama-app/index.html}}]}
}
app_schema.json 示例 应用需要连接第三方组件时组件的配置通过json文件描述配置项门户管理模块将根据json内容动态生成配置页面。该配置使用 formily (阿里巴巴表单框架 https://formilyjs.org/)定义的格式。 以下示例文件为连接redis 组件时需提供的json文件。
{redis_host: {type: string,x-component: Input,x-component-props: {placeholder: 请输入ip地址},x-decorator: Form.Item,x-decorator-props: {label: Redis IP,tooltip: 请输入ip地址}},redis_port: {type: number,x-component: InputNumber,x-component-props: {placeholder: 请输入端口号,min: 0,max: 65535},x-decorator: Form.Item,x-decorator-props: {label: Redis Port,tooltip: 请输入端口号}},redis_password: {type: string,x-component: Input.Password,x-component-props: {placeholder: 请输入 密码},x-decorator: Form.Item,x-decorator-props: {label: Redis密码,tooltip: 请输入密码}}
}
4. Demo 应用完整实例
a. 通过ftp 获取到 demo 应用包
地址 ftp.tmlake.com 目录 /OpenNjet/Software/v3.2.2-portal 文件 demo_app_1.0.2.npk
b. 使用默认管理员账号 agw_admin /****** 登录 /portal c. 添加demo应用
在应用管理中选择新增添加获取的 demo_app_1.0.2.npk, 并点击确认 成功后应用管理页面将出现 demo 应用的条目 d. 为用户添加用户/组/角色
添加一个demo用户角色
添加一个demo用户组
为这个组分配角色 添加一个 user1 用户并指定 domain 为 “demo”
为这个用户分配组 e. 编辑应用的授权
在应用管理列表中点击 demo 的授权该应用只有一个访问地址选择后点击授权在弹出的窗口下拉框中选择demoUserRole f. 使用刚创建的普通用户账号登录 /portal
应用列表中显示出我们刚刚部署的demo 应用 点击应用图标后跳转到应用的页面 该demo应用只是简单的一些页面Tab, 展示的也只是一些测试数据
5. 后续改进
目前部署的应用有新版本需要升级时需要在应用管理中删除应用后重新上传。后续将继续优化门户管理模块提供应用的版本管理及回滚功能。
6. 参考
a. 使用到的API
API Gateway: 用户/组/权限的增删改查api group 创建oas3.0 格式文档导入应用部署接口 doc/swagger/helper_api_gateway.yaml · OpenNJet/OpenNJet - Gitee.com 动态Location API: 动态添加及删除Location doc/swagger/helper_dy_loc.yaml · OpenNJet/OpenNJet - Gitee.com 动态Upstream API: 动态添加及删除 Upsteam doc/swagger/helper_dyn_http_ups.yaml · OpenNJet/OpenNJet - Gitee.com\
b. Demo 应用包的下载
地址 ftp.tmlake.com \ 目录 /OpenNjet/Software/v3.2.2-portal 文件 demo_app_1.0.2.npk
c. NJet版本及Portal 获取及安装
NJet 版本需要 3.2.2 Portal 门户管理模块获取 地址 ftp.tmlake.com
目录 /OpenNjet/Software/v3.2.2-portal/ 文件 portal_1.0.2.npk , ssh_remote_mod.so Portal 门户管理模块安装 修改配置 /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;load_module modules/njt_agent_dynlog_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_dyn_upstream_module.so;
load_module modules/njt_http_dyn_server_module.so;
load_module modules/njt_http_token_sync_module.so;
load_module modules/njt_http_upstream_member_module.so;
load_module modules/njt_http_dyn_lua_module.so;events {worker_connections 1024;
}shared_slab_pool_size 100m;
http {token_sync zonetoken:4M sync_time5s clean_time10s;dyn_kv_conf conf/iot-work.conf;include mime.types;access_log off;vhost_traffic_status_zone;lua_package_path $prefix/lualib/lib/?.lua;$prefix/modules/?.lua;$prefix/apps/?.lua;;;lua_package_cpath $prefix/lualib/clib/?.so;;;init_by_lua_block {local _require(lor.index)local _require(lsqlite3complete)}server {listen 8080;error_page 401 302 /portal;client_max_body_size 1000m; location / {root html;}location /icons/ {alias /usr/local/njet/apps/__icons/;try_files $uri 404;}}
}
load_module modules/njt_http_sendmsg_module.so;
load_module modules/njt_ctrl_config_api_module.so;
load_module modules/njt_helper_health_check_module.so;
load_module modules/njt_http_upstream_api_module.so;
load_module modules/njt_http_location_api_module.so;
load_module modules/njt_doc_module.so;
load_module modules/njt_http_vtsd_module.so;
load_module modules/njt_http_lua_module.so;
load_module modules/njt_http_dyn_upstream_module.so;
load_module modules/njt_http_dyn_upstream_api_module.so;
load_module modules/njt_http_dyn_server_api_module.so;
load_module modules/njt_http_upload_module.so;error_log logs/error_ctrl.log error;events {worker_connections 1024;
}http {dyn_kv_conf conf/ctrl_kv.conf;lua_package_path $prefix/lualib/lib/?.lua;$prefix/modules/?.lua;;;lua_package_cpath $prefix/lualib/clib/?.so;;;init_by_lua_block {local _require(lor.index)local _require(lsqlite3complete)}include mime.types;access_log off;server {client_max_body_size 1000m; listen 8081;location / {return 200 njet control panel\n;}location /api {dyn_module_api; }location /doc {doc_api;}location /metrics {vhost_traffic_status_display;vhost_traffic_status_display_format html;}location /api_gateway {access_by_lua_block {local acrequire(api_gateway.access.control)local accessac.new(/api_gateway)access:check()}content_by_lua_block {local api_gatewayrequire(api_gateway)api_gateway.main()}}}
}
拷贝 ssh_remote_mod.so
sudo cp ssh_remote_mod.so /usr/local/njet/lualib/clib/重启 njet
sudo systemctl stop njet
sudo systemctl start njet
将下载后的 portal_1.0.2.npk 文件上传到 njet 主机上并且主机上安装 curl 及 jq 命令行工具
NJET_SITEhttp://localhost:8081PORTAL_FILE$(curl -k -s -F fileportal_1.0.2.npk $NJET_SITE/api/v1/upload |jq -r .file)TOKEN$(curl -k -X POST -d {login_data:{username: agw_admin, password: ********}} -s $NJET_SITE/api_gateway/auth/login | jq -r .token)curl -X POST \$NJET_SITE/api_gateway/deploy/app \-H Authorization: Bearer $TOKEN \-H Content-Type: application/json \-d {\uploaded_file\: \$PORTAL_FILE\}NJet 应用引擎通过内核重构实现了独特的运行时动态配置加载能力是 新一代高性能 Web 应用引擎 。NJet 拥有高性能数据面处理能力将集群、高可用、主动健康检查、声明式 API 等多种辅助功能通过 NJet 独特的副驾驶 CoPilot 服务框架调度从而方便功能扩展隔离管理 / 控制功能对数据面的影响NJet 应用引擎性能超过 CNCF 推荐 Envoy 应用引擎的三倍。 官网https://njet.org.cn/ 邮件组https://njet.org.cn/mailman/listinfo