Apache APISIX 从源码构建指南
apisix The Cloud-Native API Gateway 项目地址: https://gitcode.com/gh_mirrors/ap/apisix
前言
Apache APISIX 是一个高性能、可扩展的云原生 API 网关。对于开发者而言,从源码构建 APISIX 是深入了解其工作原理、进行二次开发或贡献代码的必要步骤。本文将详细介绍从源码构建 APISIX 的完整流程,包括环境准备、依赖安装、构建步骤以及常见问题的解决方案。
环境准备
1. 获取源码
首先需要获取 APISIX 的源代码,有两种主要方式:
- 使用 Git 克隆指定版本:
APISIX_VERSION='3.9.0'
git clone --depth 1 --branch ${APISIX_VERSION} https://github.com/apache/apisix.git apisix-${APISIX_VERSION}
- 下载源代码压缩包(不包含测试用例)
2. 系统依赖
确保系统已安装以下基础工具:
- Git
- GNU Make
- GCC 或 Clang 编译器
- OpenSSL 开发库
- PCRE 开发库
构建步骤
1. 安装依赖
进入源码目录后,执行以下命令安装 Lua 依赖:
cd apisix-${APISIX_VERSION}
make deps
这个命令会通过 LuaRocks 安装所有必要的 Lua 模块。
2. 构建 APISIX
安装运行时依赖和 CLI 工具:
make install
3. 常见依赖问题解决
在 macOS 上可能会遇到 OpenLDAP 头文件缺失的问题,解决方案:
- 安装 OpenLDAP:
brew install openldap
- 配置 LuaRocks 变量:
luarocks config variables.LDAP_DIR $(brew --prefix openldap)
对于其他操作系统,类似地需要安装对应的开发包并配置正确的路径。
安装 etcd
APISIX 使用 etcd 作为配置存储,需要单独安装:
Linux 系统
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 &
macOS 系统
brew install etcd
brew services start etcd
运行 APISIX
1. 初始化配置
apisix init
2. 测试配置
apisix test
3. 启动服务
apisix start
4. 停止服务
优雅停止(完成现有请求):
apisix quit
强制停止(立即终止):
apisix stop
构建自定义运行时
某些 APISIX 功能需要额外的 Nginx 模块支持,此时需要构建自定义的 OpenResty 运行时(apisix-runtime)。这需要使用专门的构建工具链完成。
测试框架
运行全部测试
make test
运行单个测试用例
prove -Itest-nginx/lib -r t/plugin/openid-connect.t
测试环境准备
- 安装 Perl 包管理器 cpanminus
- 安装测试依赖:
sudo cpanm --notest Test::Nginx IPC::Run
- 克隆 test-nginx 框架:
git clone https://github.com/openresty/test-nginx.git
- 设置 Perl 模块路径:
export PERL5LIB=.:$PERL5LIB
卸载 APISIX
完全移除 APISIX 运行时:
make uninstall
make undeps
结语
通过本文的指导,您应该已经成功从源码构建并运行了 Apache APISIX。对于开发者而言,理解构建过程有助于更深入地掌握 APISIX 的架构和工作原理。如果在构建过程中遇到问题,可以参考官方文档或社区资源寻求帮助。
apisix The Cloud-Native API Gateway 项目地址: https://gitcode.com/gh_mirrors/ap/apisix
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考