如何使用 Gitpod 搭建 Apache APISIX 开发环境?

背景

使用 Gitpod 作为 Apache APISIX 开发与启动环境,方便新手用户使用、研发、参与贡献。

名词简介

Apache APISIX

Apache 软件基金会下的新一代 API 网关,可观看视频 https://www.youtube.com/watch?v=hWRRdICvMNs 了解更多内容。

ETCD

Apache APISIX 的配置存储中心,可理解为数据库(但不完全等价)。

Gitpod

运行在浏览器中的开发者工具(内嵌 VS Code),无需在自己的设备中配置环境、部署代码,统一开发环境。

步骤

注册并登陆 GitHub.com

Fork 并克隆 apisix 项目

  1. 访问 https://github.com/apache/apisix 进入 apache/apisix 项目首页
  2. 点击右上角 Fork 按钮后进入如下页面 image
  3. 点击 Create fork 按钮并稍等片刻 image image
  4. 当左上角显示你的 GitHub 账户名称时,表示 Fork 成功
  5. 点击 Code -> HTTPS -> 复制(该链接会在下方使用) image

导入 apisix 项目到 Gitpod 中

  1. 访问 https://www.gitpod.io/ ,点击 Try now,然后使用 GitHub 登陆
  2. 选择默认选项 VS Code Browser 并点击 Continue image image
  3. 点击 New Workspace 并粘贴在第 2 步中复制的链接 image
  4. 点击该链接并进入如下页面 image
  5. 显示如下界面时表示准备就绪(左侧为目录、右上方为代码编辑框、右下方为命令行区域) image

安装 ETCD

# 进入 apisix 文件夹的父目录以安装 ETCD

cd ..

ETCD_VERSION='3.4.13'

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 &

cd ../apisix

构建、启动 apisix 项目

  1. 见命令行所示,当前默认为 master 分支,在本教程中我们使用 release/2.13 分支;
  2. 在命令行中输入如下命令并回车,命令行中将显示 gitpod /workspace/apisix (release/2.13) 表示切换成功;
git checkout --track origin/release/2.13
  1. 如果之前已 fork 过 apache/apisix 仓库,请执行如下命令同步最新代码;否则请直接进入下一步骤。
git pull upstream release/2.13
  1. 安装依赖、构建项目:在命令行中输入如下命令并回车
curl https://raw.githubusercontent.com/apache/apisix/master/utils/install-dependencies.sh -sL | bash -

make deps
  1. 启动 apisix
make run
  1. 执行如下命令以验证 apisix 安装并启动成功
curl localhost:9080

# 执行上述命令后,将显示如下内容,表示启动成功
# {"error_msg":"404 Route Not Found"}

关闭 apisix

make stop

编辑代码后需重新构建项目

make run

提交代码修改

使用 Gitpod 左侧文件目录面板,选择要提交的代码并提交。

进阶

如果希望通过 Admin API 操作 Apache APISIX 实例,并创建 Route、Upstream 等,可继续阅读下文。

Apache APISIX 实例暴露了 Admin API 供操作者调用,为了避免被恶意访问,在调用 API 时需要携带密钥,你可通过查看 /conf/config.yaml 文件找到 Apache APISIX 默认密钥。如下为调用示例:若需要查询已创建的 Route 列表,可访问:

curl -i -X GET http://127.0.0.1:9080/apisix/admin/routes -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1"

若密钥正确,它将返回如下内容:

HTTP/1.1 200 OK
Date: Thu, 19 May 2022 03:05:28 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Server: APISIX/2.13.1
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: *
Access-Control-Max-Age: 3600

# 上方为 HTTP 请求的响应头(HTTP Response Header),但请重点关注如下内容:nodes 为空表示目前没有创建任何 Route
{"action":"get","count":0,"node":{"nodes":[],"key":"\/apisix\/routes","dir":true}}