NJet Portal 應用門戶管理介紹

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 zone=token:4M sync_time=5s clean_time=10s;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 ac=require("api_gateway.access.control")local access=ac.new("/api_gateway")access:check()}content_by_lua_block {local api_gateway=require("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_SITE="http://localhost:8081"PORTAL_FILE=$(curl -k -s -F "file=@portal_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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909510.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909510.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909510.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uni-app學習筆記三十六--分段式選項卡組件的使用

先來看效果: 上圖有3個選項卡(PS:uniapp官方稱之為分段器,我還是習慣叫選項卡),需要實現點擊不同的選項卡時下方切換顯示對應的數據。 下面介紹下實現的過程。 1.在uniapp官方文檔下載并安裝該擴展組件:u…

Qt:Qt桌面程序正常退出注意事項

一般情況下,Qt窗體的創建和顯示命令如下: Main_window main_window; main_window.show(); 主窗體中設置屬性Qt::WA_DeleteOnClose setAttribute(Qt::WA_DeleteOnClose); 則在main.cpp中可以將窗體創建為指針,這樣在退出時可以正確釋放指針…

【arXiv2024】時間序列|TimesFM-ICF:即插即用!時間序列預測新王者!吊打微調!

論文地址:https://arxiv.org/pdf/2410.24087 代碼地址:https://github.com/uctb/TSFM 為了更好地理解時間序列模型的理論與實現,推薦參考UP “ThePPP時間序列” 的教學視頻。該系列內容系統介紹了時間序列相關知識,并提供配套的論…

從0開始學習語言模型--Day02-如何最大化利用硬件

如何利用硬件 這個單元分為內核、并行處理和推理。 內核(Kernels) 我們說的內核一般指的就是GPU,這是我們用于計算的地方,一般說的計算資源就指的是GPU的大小。我們模型所用的數據和參數一般存儲在內存里,假設把內存…

ElasticSearch配置詳解:設置內存鎖定的好處

什么是內存鎖定 "bootstrap": {"memory_lock": "true" }內存鎖定是指將Elasticsearch的JVM堆內存鎖定在物理內存中,防止操作系統將其交換(swap)到磁盤。 內存交換是操作系統的虛擬內存管理機制,當…

成功解決 ValueError: Unable to find resource t64.exe in package pip._vendor.distlib

解決問題 我們在本地的命令行中運行指令"python -m pip install --upgrade pip"的時候,報了如下的錯誤: 解決思路 我們需要重新安裝一下pip。 解決方法 步驟1: 通過執行下面的指令刪除本地的pip: python -m pip uninstall pip…

倉庫物資出入庫管理系統源碼+uniapp小程序

一款基于ThinkPHPuniapp開發的倉庫物資出入庫管理系統,適用于單位內部物資采購、發放管理的庫存管理系統。提供全部無加密源碼,支持私有化部署。 更新日志: 新增 基于UNIAPP開發的手機端,適配微信小程序 新增 字典管理 新增頁面…

基于機器學習的逐巷充填開采巖層運動地表沉降預測

基于機器學習的逐巷充填開采巖層運動地表沉降預測 1. 項目概述 本報告詳細介紹了使用Python和機器學習技術預測逐巷充填開采過程中地表沉降的方法。通過分析地質參數、開采參數和充填參數,構建預測模型評估地表沉降風險。 # 導入必要的庫 import numpy as np import pandas…

MotleyCrew ——拋棄dify、coze,手動搭建多agent工作流

1. MotleyCrew 核心組件 - 協調器: Crew MotleyCrew 的核心是一個 “Crew” 對象,即多代理系統的指揮者。Crew 持有一個全局的知識圖譜(使用 Kuzu 圖數據庫),用于記錄所有任務、任務單元和其執行狀態。 Cr…

掌握這些 Python 函數,讓你的代碼更簡潔優雅

在 Python 編程世界里,代碼的簡潔性與可讀性至關重要。簡潔優雅的代碼不僅便于自己后期維護,也能讓其他開發者快速理解邏輯。而 Python 豐富的內置函數和一些實用的第三方庫函數,就是實現這一目標的有力武器。接下來,就為大家介紹…

簡說ping、telnet、netcat

簡說 ping 和 telnet 命令的作用、用法和區別,方便理解它們在網絡診斷中的用途。 🌐 ping 命令 ? 作用: ping 用于檢測網絡連通性。它通過向目標主機發送 ICMP Echo 請求 并等待回應,從而判斷目標主機是否可達,并測…

基于STM32的超聲波模擬雷達設計

一、雷達概述 雷達(Radio Detection and Ranging,無線電探測與測距)是一種利用電磁波探測目標位置、速度等信息的主動式傳感器系統。其基本原理是發射電磁波并接收目標反射的回波,通過分析回波的時間差、頻率變化等參數&#xff0…

飛書多維表格利用 Amazon Bedrock AI 能力賦能業務

背景 飛書多維表格是一款功能強大的在線數據管理與協作工具。它打破傳統表格局限,將電子表格與數據庫特性融合,支持看板、甘特圖、表單等多種視圖自由切換,可根據項目進度、任務管理等不同場景靈活展示數據。其豐富的字段類型能精準適配各類…

表格對比工具推薦,快速比對Excel文件

軟件介紹 今天為大家推薦一款專為Excel用戶設計的表格比較工具,簡單易用,零基礎也能快速掌握。 輕量高效的辦公助手 Excel比較工具體積僅為11MB,占用空間小,運行流暢,適合各類電腦配置使用。 簡潔明了的操作界面 軟…

深入探究其內存開銷與JVM布局——Java Record

Java 14引入的Record類型如同一股清流,旨在簡化不可變數據載體的定義。它的核心承諾是:??透明的數據建模??和??簡潔的語法??。自動生成的equals(), hashCode(), toString()以及構造器極大地提升了開發效率。 當我們看到這樣的代碼: …

Vue 3 九宮格抽獎系統,采用優雅的 UI 設計和流暢的動畫效果

九宮格抽獎 預覽地址 項目簡介 這是一個基于 Vue 3 開發的現代化九宮格抽獎系統,采用優雅的 UI 設計和流暢的動畫效果,為用戶提供極致的抽獎體驗。系統支持多種獎品配置,實時抽獎記錄展示,以及完整的活動說明功能。 核心功能 …

無縫對接大疆算力平臺:基于Coovally的無人機AI模型端到端優化方案

【導讀】 隨著無人機應用場景的快速拓展,企業對于定制化AI解決方案的需求日益迫切。大疆算力開放平臺為開發者提供了專業的模型量化與部署環境,幫助開發者將訓練好的AI模型高效部署至大疆無人機平臺。 然而,要實現完整的AI開發閉環&#xf…

ubuntu下載CUDA cuDNN

nivida-smi查看顯卡驅動版本 (一)安裝CUDA cuda官網 cuda官網 下載對應版本的cuda 這個官網真不錯啊,下面附上了指令 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin sudo mv c…

FreeRTOS定時器

目錄 1.特性2.運行環境2.1 守護任務2.2 回調函數2.3 內部源碼 3.和Linux對比4.ID5.數據傳輸6.操作函數6.1 創建6.2 刪除6.3 啟動6.4 停止6.5 復位(重置)6.6 修改周期6.7 注意事項 7.示例:一般使用8.示例:定時器防抖 1.特性 定時器…

JavaScript中的迭代器模式:優雅遍歷數據的“設計之道”

JavaScript中的迭代器模式:優雅遍歷數據的“設計之道” 一、什么是迭代器模式? 在編程世界中,迭代器模式(Iterator Pattern)是一種經典的設計模式,它的核心思想是:為集合對象提供一種統一的訪…