Apisix开发环境搭建原创
背景
云原生网关Apisix作为Apache基金会的顶级项目被大家所熟知,在微服务架构体系下,网关又是一个不可或缺的重要组件。使用早期的Spring Cloud封装Zuul的网关各方面都不太适合了,升级到Spring Cloud Gateway同样存在着一定的风险。综合考虑后使用Apisix作为API的网关从灵活性和性能方面更能得到更好的效果,也提现了降本提效的业务价值。使用Apisix的同时又带来了一些技术难点,需要了解和使用Lua语言进行开发,当然Apisix目前提供了Golang、Python、Java、JavaScript等运行时的插件供开发人员使用,但从执行效率、部署维护的角度考虑尽量使用Lua语言开发,更利于后期的维护和管理。就此开启了Apisix的插件开发之旅~
环境搭建
任何一种编程语言编写运行程序都需要安装一个环境,Lua也不例外。Apisix是由Nginx、OpenResty、Luajit、Lua5.1、Apisix Core共同组成Apisix的运行时环境。本次的环境搭建基于Apisix 3.2版本完成。
官方步骤
- 下载Apisix3.2源码
APISIX_VERSION='3.2.0'
mkdir apisix-${APISIX_VERSION}
git clone --depth 1 --branch ${APISIX_VERSION} https://github.com/apache/apisix.git apisix-${APISIX_VERSION}
通过上述命令可以下载下Apisix 3.2的源码,执行命令前需要确保电脑上安装了Git。
- 安装依赖
curl https://raw.githubusercontent.com/apache/apisix/master/utils/install-dependencies.sh -sL | bash -
通过以上命令会安装Nginx、OpenResty、Luajit、Lua5.1这些依赖,还包括Apisix使用到第三方的Lua类库。正确安装后一般会安装在系统的/usr/local路径下。
- 初始化配置
在初始化配置之前需要本地电脑上安装Etcd,通过如下命令可以完成Etcd的安装。
ETCD_VERSION='3.4.18'
wget https://github.com/etcd-io/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz
tar -xvf etcd-v${ETCD_VERSION}-linux-amd64.tar.gz && \
cd etcd-v${ETCD_VERSION}-linux-amd64 && \
sudo cp -a etcd etcdctl /usr/bin/
nohup etcd >/tmp/etcd.log 2>&1 &
以上顺利完成后,在源码路径下执行
make deps
Lua的第三方类库安装,第三方类库会安装在源码所在路径下的deps里。
make init
进行Nginx配置文件的初始化
- 启动Apisix
执行make run
启动Apisix
执行make stop
停止Apisix
补充说明
官方给的环境安装说明确实简明扼要,在一切顺利的情况下确实能够完成开发环境的安装。但实际安装过程中由于系统的不同(Linux、MacOS、Windows)、以及同一系统下不同的版本,都存在一些或多或少的差异,导致各种的问题出现。官方提供一些脚本是为了简化环境安装过程,当然我们也要稍微了解一下安装的细节,当遇到安装问题时,不至于手足无措、无可奈何。一下是在安装环境中遇到问题的一些补充,希望能帮助到有缘人
- Lua第三方包的安装
Lua第三方包是有LuaRocks的工具进行管理,LuaRocks是一个类似Maven、Gradle的依赖管理工具,通过LuaRocks管理Lua的第三方包。通过make deps
命令进行安装有些时候会出现安装失败的情况,如果不能完整安装,则可能需要手动安装。手动安装步骤如下:
1.1. 通过LuaRocks官方网站下载在rockspec/apisix-master-0.rockspec文件中dependencies部分出现的第三发Lua库。下载文件分两种,一种为源码.src.rock文件,一种是.rockspec文件。.src.rock文件是源码文件,没有指定依赖关系,通过luarocks --lua-version=5.1 --tree=deps build xxx.src.rock
命令进行安装。.rockspec文件定义了依赖关系,通过luarocks --lua-version=5.1 --tree=deps install xxx.rockspec
命令进行安装。也可以理解为手动/自动安装,但由于出现自动依赖的下载问题,导致需要手动去执行安装,在安装的过程中会出现依赖报错的提示,需要我们回到原始时期,逐个的迭代依赖进行安装,最终安装目标类库。说实话这是个没有办法的办法,曾经视图通过完美的方式解决,但才疏学浅没能找到这样的方案,Lua的资料相对也较少。如有哪位大神能够指定迷津不胜感激。 - Etcd的安装
Etcd安装在开发环境单节点供所有开发人员使用,大家就不用每个人在本机安装Etcd了,是个不错的主意。发现按照上述的命令完成后不能被外部访问。默认Etcd只能通过127.0.0.1IP地址进行访问的。需要再启动Etcd时增加一些参数,如下命令:
etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls=http://0.0.0.0:2380 --initial-advertise-peer-urls=http://0.0.0.0:2380 >/tmp/etcd.log 2>&1 &
总结
开发技术折腾,有些时候环境的差异导致的问题是不好解决的。但归根结底哪些简化环境搭建的脚本也都是一点点积累起来的,拆解开同样能完成。在没有更好的方法解决时,用一些原始、笨的方法花点时间也是可以完成的。