kong網關自身的管理界面屬於付費的應用,而第三方界面又非常少,konga算是相對比較好的一款了,雖然也有一些問題,但整體的功能還比較全,github倉庫為:https://github.com/pantsel/konga,konga支持兩種方式部署分別是docker和nodejs原生部署,下面將依次寫一下
不管哪種方式部署,都推薦將相關的信息持久化,建議生產環境使用數據庫保存信息,我們這里和kong一樣統一使用postgresql來保存配置信息,下面分為3步來敘述:分別是數據庫設置、docker方式運行、nodejs原生方式運行,注意運行方式只能選1種,不能兩種方式都用
1. 數據庫設置
首先登錄進postgresql交互控制台,然后執行下面的語句創建konga的數據庫並授權用戶:
CREATE ROLE konga LOGIN PASSWORD 'konga123456'; CREATE DATABASE konga OWNER konga;
這里創建的數據庫:konga,用戶:konga,密碼:konga123456
然后編輯pgsql數據目錄下的pg_hba.conf設置用戶訪問權限:
host konga konga 0.0.0.0/0 md5
因為可能待會docker方式啟動的時候由於容器內的ip和外面不相同,避免連接pgsql被拒絕,因此CIDR這里設置0.0.0.0/0臨時允許全部的來源訪問,保存配置后,重啟postgresql服務,數據庫配置完畢
2. docker方式運行konga
為了提高拉取鏡像的速度,可以配置國內的docker鏡像源,比如網易的,這個設置不再詳細敘述;另一種方法可以為docker設置代理訪問也可以加快速度,首先設置環境變量:
export http_proxy=http://192.168.0.112:1080 export https_proxy=http://192.168.0.112:1080
然后在docker啟動時直接添加參數--http-proxy=true即可自動使用環境變量中的代理,默認這個參數是false
上面是設置代理的方式,可以選擇性使用,使用下面的命令可以啟動一個不依賴數據庫的容器:
docker run -p 1337:1337 --name konga -e "NODE_ENV=production" --http-proxy=true pantsel/konga
第一次運行會自動去鏡像源拉取鏡像,然后啟動容器,之后再啟動就不需要再加--http-proxy參數了,也可以通過本地運行的容器中恢復: docker start <容器ID> ,上面這種方式啟動是將配置保存到了文件中,如果本地的容器刪除了,下次再從鏡像啟動的時候所有數據都沒有了,會非常麻煩,因此選擇使用外部的postgresql數據庫,使用之前需要先初始化數據庫,命令如下:
docker run pantsel/konga -c prepare -a postgres -u postgresql://konga:konga123456@192.168.28.128:5432/konga
執行完之后可以發現所有的數據表都創建好了,然后啟動容器:
docker run -p 1337:1337 -e "TOKEN_SECRET=699a85ee59a1" -e "DB_ADAPTER=postgres" -e "DB_HOST=192.168.28.128" -e "DB_PORT=5432" -e "DB_USER=konga" -e "DB_PASSWORD=konga123456" -e "DB_DATABASE=konga" -e "NODE_ENV=production" --name konga pantsel/konga
其中TOKEN_SECRET是一串密鑰,可以自己隨機生成,其余的都是數據庫的配置,如果感覺上面這個參數太多也可以直接使用參數DB_URI指定一個全的url即可,和初始化數據庫那個類似;另外如果剛才用konga名稱啟動過容器,可能再次啟動會報錯name已經存在,需要先執行: docker rm <容器ID> 刪除剛才的容器,然后再運行即可,容器正常啟動后,就可以訪問瀏覽器,訪問:http://<ip>:1337,即可打開初始的頁面:
然后填寫用戶名、郵件、密碼信息,點擊CREATE ADMIN,創建管理賬戶,然后會自動跳轉到登錄界面,這里可能會存在一個bug就是頁面沒有跳轉成功怎么刷新都是空白,這種情況下可以嘗試Ctrl+F5強制刷新頁面或者是直接清空最近的記錄、cookie等再次刷新頁面即可進入登錄界面,我自己測試是83一下的chrome內核會有這個問題,而84以上的不會有,這是konga本身的一個問題,如果碰到了注意一下
然后輸入用戶名和密碼,登錄管理系統即可
默認會提示輸入kong admin api的url,正常輸入然后創建連接即可,然后就可以看到完整的管理模塊了,需要注意的是默認情況下kong admin api為了保證安全,監聽的網卡為127.0.0.1,需要在配置文件中改成實際的網卡ip,這樣這里才可以連接成功,不過這樣又引入新的安全問題,要解決這個問題可以采用kong的自校驗完成,這類不再詳細說了,很簡單,可以自己探索配置一下
3. nodejs方式運行konga
最后一種方式是使用nodejs直接在系統上運行konga,首先要安裝nodejs相關的包:
yum install nodejs
安裝之后就有了npm相關的工具,然后克隆kong的源碼:
git clone https://github.com/pantsel/konga.git cd konga
當然也可以自行去github下載指定版本的源碼包,上傳到服務器上使用也一樣,然后自動下載相關的依賴:
npm i
如果依賴下載超時或者失敗,同樣也可以配置代理來提速,默認的npm包注冊url是:https://registry.npmjs.org,所以只需要配置一下https代理即可:
npm config set https-proxy http://192.168.0.112:1080 # 查看代理配置 npm config get
然后即可開始下載,完成之后會有提示:
提示的這些漏洞可以暫時不關心,現在代理就算用完了,可以刪除一下:
npm config delete https-proxy
除了設置代理的方式,也可以使用國內的npm源,比如阿里雲的,但是這個我自己沒有測試,先放個鏈接:https://developer.aliyun.com/mirror/NPM?from=tnpm
然后可以執行命令開始初始化數據庫,注意數據庫和用戶要先按照第一步進行創建和授權,然后執行下面命令初始化數據庫:
node ./bin/konga.js prepare --adapter postgres --uri postgresql://konga:konga123456@192.168.28.128:5432/konga
默認運行的時候讀取的配置文件是:.env,可以配置比如綁定地址和端口,數據庫連接等配置,默認當前目錄下存在一份.env_example,可以拷貝出來: cp .env_example .env ,然后按照實際的配置進行修改,我這里配置如下:
PORT=1337 NODE_ENV=production KONGA_HOOK_TIMEOUT=120000 DB_ADAPTER=postgres DB_URI=postgresql://konga:konga123456@192.168.28.128:5432/konga KONGA_LOG_LEVEL=warn TOKEN_SECRET=some_secret_token
配置完成之后保存,注意DB_URI中用戶名密碼等要寫全,其他的配置項就不用再配置了,否則會出現很多麻煩的用戶錯誤問題,konga這里處理的非常糟糕,吐槽一下參數配置真是太爛了O(∩_∩)O,最后執行下面的命令啟動konga:
npm run production
# 或者是
npm start
然后可以打開瀏覽器測試訪問,如果出現上面的問題仍然嘗試清空的緩存來解決,如果還是不行可以嘗試運行下面的命令補充依賴:
npm run bower-deps
補充完依賴后再次啟動嘗試,上面兩個命令都試一下,一般就可以了,然后登錄頁面,連接kong admin api,其他的操作都一致了
上面就是konga的兩種安裝運行方式,極力推薦使用docker運行,而本地的方式運行可能會出現一些莫名其妙的問題需要花費時間調試,docker的方式可維護性更好,如果有其他問題,歡迎交流~