写点什么

APISIX 是怎么跑起来的

作者:geange
  • 2022 年 9 月 30 日
    广东
  • 本文字数:1316 字

    阅读完需:约 4 分钟

APISIX是怎么跑起来的

下载 apisix 的源码

git clone https://github.com/apache/apisix.gitcd apisix
复制代码


根据文档可知启动的入口位于 bin/apisix


代码首行表示源码的位置


找到apisix/cli/apisix.lua入口文件的位置,将变量APISIX_LUA设置为apisix.lua的路径

# bin/apisix
## 找到apisix.lua,并执行if [ -s './apisix/cli/apisix.lua' ]; then # install via source APISIX_LUA=./apisix/cli/apisix.luaelif [ -s '/usr/local/share/lua/5.1/apisix/cli/apisix.lua' ]; then # install via luarock APISIX_LUA=/usr/local/share/lua/5.1/apisix/cli/apisix.luaelse # install via official rpm or docker APISIX_LUA=/usr/local/apisix/apisix/cli/apisix.luafi
复制代码


找到luajit的位置,使用luajit来执行apisix/cli/apisix.lua

LuaJIT 是 Lua 编程语言的即时编译器(JIT)。

# bin/apisix
# 找到luajit的绝对路径LUAJIT_BIN=$(${OR_EXEC} -V 2>&1 | grep prefix | grep -Eo 'prefix=(.*)/nginx\s+--' | grep -Eo '/.*/')luajit/bin/luajit
# use the luajit of openresty# 执行 apisix/cli/apisix.luaexec $LUAJIT_BIN $APISIX_LUA $*
复制代码


执行apisix/cli/apisix.lua,计算依赖的位置信息,获取env对象,并使用它执行ops.execute(env, arg)

-- apisix/cli/apisix.lua
-- apisix_home, pkg_cpath_org, pkg_path_org 为代码/动态链接库目录-- 这里是检测+计算所需要的环境变量(主要是apisix依赖信息等)local env = require("apisix.cli.env")(apisix_home, pkg_cpath_org, pkg_path_org)
-- 执行 execute 函数local ops = require("apisix.cli.ops")ops.execute(env, arg)
复制代码


处理环境变量

-- apisix/cli/env.lua
-- require("apisix.cli.env")(apisix_home, pkg_cpath_org, pkg_path_org)-- 这里返回一个键值对对象信息,值为计算的配置信息return { apisix_home = apisix_home, is_root_path = is_root_path, openresty_args = openresty_args, pkg_cpath_org = pkg_cpath_org, pkg_path_org = pkg_path_org, min_etcd_version = min_etcd_version, ulimit = ulimit,}
复制代码


模板构建,生成 nginx.conf 模板

-- apisix/cli/ops.lua
-- local function init(env)-- sys_conf 用于渲染模板的数据-- ngx_tpl: apisix/cli/ngx_tpl.lua,这里是一个 nginx.conf 的模板,渲染后获取供nginx执行的配置文件。nginx根据 nginx.conf 的配置信息来加载lua插件sys_conf["extra_lua_path"] = get_lua_path(yaml_conf.apisix.extra_lua_path)sys_conf["extra_lua_cpath"] = get_lua_path(yaml_conf.apisix.extra_lua_cpath)
-- 渲染模板local conf_render = template.compile(ngx_tpl)local ngxconf = conf_render(sys_conf)
-- 写入到文件中local ok, err = util.write_file(env.apisix_home .. "/conf/nginx.conf", ngxconf)
复制代码


初始化 etcd

-- apisix/cli/ops.lua
-- 根据需要初始化etcdif env.deployment_role ~= "data_plane" then init_etcd(env, args)end
复制代码


启动 openresty

-- apisix/cli/ops.lua-- openresty -p /usr/local/apisix -c /usr/local/apisix/conf/nginx.confutil.execute_cmd(env.openresty_args)
复制代码


到此 apisix 启动完成。

发布于: 1 小时前阅读数: 9
用户头像

geange

关注

还未添加个人签名 2018.05.26 加入

还未添加个人简介

评论

发布
暂无评论
APISIX是怎么跑起来的_lua_geange_InfoQ写作社区