API网关Kong学习笔记(二十一): Kong的开发环境设置(IntelliJ Idea)

Tags: kong 

目录

说明

一段时间没有折腾kong,简直忘得干干净净,连开发环境怎么设置的都忘了….还好Lua的项目管理工具中有过记录,这里将其中与kong相关的部分抽出来单独成篇,方便有需要的同学也方便我自己查阅。

相关笔记

2019-05-06 16:28:56:kong 1.1.x有了一个重大变换,实现了db-less模式,可以不使用数据库了,见笔记二十六:查看全部笔记如果是刚开始学习kong,直接从1.x开始,0.x已经不再维护,0.15是0.x的最后一个版本。

前19篇笔记是刚开始接触kong时记录的,使用的版本是0.14.1,当时对kong一知半解,笔记比较杂乱。第二十篇开始是再次折腾时的笔记,使用的版本是1.0.3,笔记相对条理一些。

从0.x到1.x需要关注的变化有:

  1. 插件全部使用pdk
  2. 0.x中不鼓励使用的特性都被移除了;
  3. 全部使用kong.db,以前独立的dao彻底清除,代码简洁清晰了。

安装IntelliJ Idea插件:EmmyLua

IntelliJ Idea中有两个Lua插件,一个是Lua,一个是EmmyLua。实测结果是EmmyLua对代码跳转的支持更好一些,这个插件是国人开发的,也比较活跃。安装EmmyLua插件后,用luarocks初始化一个lua项目,然后在Idea中直接将项目目录导入。

下载kong代码,完成初始化

这里使用的是lua5.1,提前在系统上安装luarocks,在mac上可以用brew安装:

git clone https://github.com/Kong/kong.git
cd kong
luarocks init --lua-dir=/usr/local/opt/[email protected]

下载kong依赖的lua包:

./luarocks build

在Mac上执行这个命令可能会遇到下面错误:

Error: Failed installing dependency: https://luarocks.org/luasec-0.7-1.src.rock - Could not find header file for OPENSSL
  No file openssl/ssl.h in /usr/local/include
  No file openssl/ssl.h in /usr/include
  No file openssl/ssl.h in /include
You may have to install OPENSSL in your system and/or pass OPENSSL_DIR or OPENSSL_INCDIR to the luarocks command.

这是因为没有安装openssl或者openssl文件位于其它目录中,如果是用brew命令安装的openssl,可以用brew info openssl找到openssl文件路径:

$ brew info openssl
openssl: stable 1.0.2q (bottled) [keg-only]
SSL/TLS cryptography library
...省略...
For compilers to find openssl you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl/include"

OPENSSL_DIR明确指定OPENSSL目录就可以了,如下:

$ ./luarocks build OPENSSL_DIR=/usr/local/opt/openssl   CRYPTO_DIR=/usr/local/opt/openssl
...
kong 1.0.3-0 is now installed in ... / (license: Apache 2.0)

在IntelliJ Idea中设置SDK,添加lua代码路径

EmmyLua插件在执行代码跳转时,先从项目源代码中查找,然后从lua_modules/lib/luarocks最新版本的Lua目录中查找,最后从SDK的ClassPath/SourcePath目录中查找。

SDK的ClassPath/SourcePath设置面板:

File -> Project Structure->SDKs

在SDK窗口中选择当前使用的SDK,譬如LuaJ,在它的ClassPathSourcePath中添加项目目录外的代码路径,点击界面下方的“+”添加。至少要把本地安装的Lua模块目录添加到SDK的ClassPath/SourcePath中,例如在Mac上,lua代码被安装在:

/usr/local/share/lua/5.1/

在Mac上为Idea的SDK添加代码目录时,在“+”弹出的对话框中可能找不到/usr目录,可以做一个符号连接,将符号连接添加到SDK中,例如:

ln -s /usr/local/share/lua/5.1 ~/Bin/lua-5.1-sdk

如果项目用到了OpenResty,将OpenResty的模块路径添加到SDK的ClassPath/SourcePath中,Mac上用brew安装的OpenResty的package目录是:

/usr/local/Cellar/openresty/1.13.6.2/lualib/

可能也需要做符号连接:

ln -s /usr/local/Cellar/openresty/1.13.6.2/lualib ~/Bin/openresty-1.13.6.2-lualib

运行与调试

Lua代码的运行和调试,快捷键ctrl+alt+r调出运行窗口,快捷键ctrl+alt+d调出Debug窗口。

我习惯打印日志,远程运行时调试还没试过 2019-03-11 15:14:56

参考

  1. Lua的项目管理工具
  2. Lua代码的运行和调试

kong

  1. API网关Kong学习笔记(二十六): Kong 1.1引入db-less模式,无数据库部署
  2. API网关Kong学习笔记(二十五): 重温 kong ingress controller
  3. API网关Kong学习笔记(二十四): 在kubernetes中启用kong的插件
  4. API网关Kong学习笔记(二十三): Kong 1.0.3的plugin/插件机制的实现
  5. API网关Kong学习笔记(二十二): Kong 1.0.3源代码快速走读
  6. API网关Kong学习笔记(二十一): Kong的开发环境设置(IntelliJ Idea)
  7. API网关Kong学习笔记(二十): Kong 1.0.3的安装部署和与Kubernetes的对接
  8. API网关Kong学习笔记(十九): Kong的性能测试(与Nginx对比)
  9. API网关Kong学习笔记(十八): Kong Ingress Controller的CRD详细说明
  10. API网关Kong学习笔记(十七): Kong Ingress Controller的使用
  11. API网关Kong学习笔记(十六): Kong转发请求的工作过程
  12. API网关Kong学习笔记(十五): KongIngress的定义细节
  13. API网关Kong学习笔记(十四): Kong的Admin API概览和使用
  14. API网关Kong学习笔记(十三): 向数据库中插入记录的过程分析
  15. API网关Kong学习笔记(十二): 插件的目录中schema分析
  16. API网关Kong学习笔记(十一): 自己动手写一个插件
  17. API网关Kong学习笔记(十): Kong在生产环境中的部署与性能测试方法
  18. API网关Kong学习笔记(九): Kong对WebSocket的支持
  19. API网关Kong学习笔记(八): Kong Ingress Controller的实现
  20. API网关Kong学习笔记(七): Kong数据平面Plugin的调用与实现
  21. API网关Kong学习笔记(六): Kong数据平面的事件、初始化与插件加载
  22. API网关Kong学习笔记(五): 功能梳理和插件使用-安全插件使用
  23. API网关Kong学习笔记(四): 功能梳理和插件使用-认证插件使用
  24. API网关Kong学习笔记(三): 功能梳理和插件使用-基本使用过程
  25. API网关Kong学习笔记(二): Kong与Kubernetes集成的方法
  26. API网关Kong学习笔记(一): Nginx、OpenResty和Kong入门,基础概念和安装部署
  27. API网关Kong学习笔记(零): 使用过程中遇到的问题以及解决方法

推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  系统软件  程序语言  运营经验  水库文集  网络课程  微信网文  发现知识星球