You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by me...@apache.org on 2019/11/02 01:05:47 UTC

[incubator-apisix] branch master updated: travis: supported to run APISIX with Tengine. (#683)

This is an automated email from the ASF dual-hosted git repository.

membphis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new 4ee1180  travis: supported to run APISIX with Tengine. (#683)
4ee1180 is described below

commit 4ee11806de142011fa3e51147826775dc79a2af6
Author: YuanSheng Wang <me...@gmail.com>
AuthorDate: Sat Nov 2 09:05:38 2019 +0800

    travis: supported to run APISIX with Tengine. (#683)
---
 .travis.yml                                        |  16 +-
 .travis/ASF-Release.cfg                            |   2 +
 .../{linux_runner.sh => linux_openresty_runner.sh} |   2 +-
 .travis/linux_tengine_runner.sh                    | 222 +++++++++++++++++++++
 .travis/{osx_runner.sh => osx_openresty_runner.sh} |   0
 README.md                                          |  18 +-
 README_CN.md                                       |  12 +-
 bin/apisix                                         |  17 +-
 conf/nginx.conf                                    |   2 +-
 t/APISIX.pm                                        |   2 +-
 t/config-center-yaml/route-upstream.t              |   2 +-
 t/node/not-exist-upstream.t                        |   4 +-
 t/router/radixtree-sni.t                           |   6 +-
 13 files changed, 280 insertions(+), 25 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 4ac7320..287fbb6 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,12 +10,18 @@ matrix:
     - os: linux
       services:
         - redis-server
+      env: OSNAME=linux_openresty
     - os: osx
+      env: OSNAME=osx_openresty
       if: type IN (push)
       cache:
         directories:
           - $HOME/Library/Caches/Homebrew
           - /usr/local/Homebrew
+    - os: linux
+      services:
+        - redis-server
+      env: OSNAME=linux_tengine
 
 language: c
 
@@ -42,14 +48,14 @@ before_cache:
   - brew cleanup
 
 before_install:
-  - echo $TRAVIS_OS_NAME
-  - $PWD/.travis/${TRAVIS_OS_NAME}_runner.sh before_install
+  - echo $OSNAME
+  - $PWD/.travis/${OSNAME}_runner.sh before_install
 
 install:
-  - $PWD/.travis/${TRAVIS_OS_NAME}_runner.sh do_install
+  - $PWD/.travis/${OSNAME}_runner.sh do_install
 
 script:
-  - $PWD/.travis/${TRAVIS_OS_NAME}_runner.sh script
+  - $PWD/.travis/${OSNAME}_runner.sh script
 
 after_success:
-  - $PWD/.travis/${TRAVIS_OS_NAME}_runner.sh after_success
+  - $PWD/.travis/${OSNAME}_runner.sh after_success
diff --git a/.travis/ASF-Release.cfg b/.travis/ASF-Release.cfg
index 9338f55..e967bdc 100644
--- a/.travis/ASF-Release.cfg
+++ b/.travis/ASF-Release.cfg
@@ -86,6 +86,8 @@ test-nginx
 grpc_server_example
 .travis.yml
 grpcurl
+t/servroot
+grpcurl
 
 conf
 .travis/openwhisk-utilities
diff --git a/.travis/linux_runner.sh b/.travis/linux_openresty_runner.sh
similarity index 99%
rename from .travis/linux_runner.sh
rename to .travis/linux_openresty_runner.sh
index 2a7136e..872a744 100755
--- a/.travis/linux_runner.sh
+++ b/.travis/linux_openresty_runner.sh
@@ -66,7 +66,7 @@ do_install() {
 
     git clone https://github.com/iresty/test-nginx.git test-nginx
     wget -P utils https://raw.githubusercontent.com/iresty/openresty-devel-utils/iresty/lj-releng
-	chmod a+x utils/lj-releng
+    chmod a+x utils/lj-releng
 
     git clone https://github.com/apache/openwhisk-utilities.git .travis/openwhisk-utilities
     cp .travis/ASF* .travis/openwhisk-utilities/scancode/
diff --git a/.travis/linux_tengine_runner.sh b/.travis/linux_tengine_runner.sh
new file mode 100755
index 0000000..874c4e3
--- /dev/null
+++ b/.travis/linux_tengine_runner.sh
@@ -0,0 +1,222 @@
+#!/usr/bin/env bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+set -ex
+
+export_or_prefix() {
+    export OPENRESTY_PREFIX="/usr/local/openresty-debug"
+}
+
+create_lua_deps() {
+    sudo luarocks make --lua-dir=${OPENRESTY_PREFIX}/luajit rockspec/apisix-master-0.rockspec --tree=deps --only-deps --local
+    sudo luarocks install --lua-dir=${OPENRESTY_PREFIX}/luajit lua-resty-libr3 --tree=deps --local
+    echo "Create lua deps cache"
+    sudo rm -rf build-cache/deps
+    sudo cp -r deps build-cache/
+    sudo cp rockspec/apisix-master-0.rockspec build-cache/
+}
+
+before_install() {
+    sudo cpanm --notest Test::Nginx >build.log 2>&1 || (cat build.log && exit 1)
+}
+
+tengine_install() {
+    if [ -d "build-cache${OPENRESTY_PREFIX}" ]; then
+        # sudo rm -rf build-cache${OPENRESTY_PREFIX}
+        sudo mkdir -p ${OPENRESTY_PREFIX}
+        sudo cp -r build-cache${OPENRESTY_PREFIX}/* ${OPENRESTY_PREFIX}/
+        ls -l ${OPENRESTY_PREFIX}/
+        ls -l ${OPENRESTY_PREFIX}/bin
+        return
+    fi
+
+    wget https://openresty.org/download/openresty-1.15.8.2.tar.gz
+    tar zxf openresty-1.15.8.2.tar.gz
+    wget https://codeload.github.com/alibaba/tengine/tar.gz/2.3.2
+    tar zxf 2.3.2
+    wget https://codeload.github.com/openresty/luajit2/tar.gz/v2.1-20190912
+    tar zxf v2.1-20190912
+    wget https://codeload.github.com/simplresty/ngx_devel_kit/tar.gz/v0.3.1
+    tar zxf v0.3.1
+
+    rm -rf openresty-1.15.8.2/bundle/nginx-1.15.8
+    mv tengine-2.3.2 openresty-1.15.8.2/bundle/
+
+    rm -rf openresty-1.15.8.2/bundle/LuaJIT-2.1-20190507
+    mv luajit2-2.1-20190912 openresty-1.15.8.2/bundle/
+
+    rm -rf openresty-1.15.8.2/bundle/ngx_devel_kit-0.3.1rc1
+    mv ngx_devel_kit-0.3.1 openresty-1.15.8.2/bundle/
+
+    sed -i "s/= auto_complete 'LuaJIT';/= auto_complete 'luajit2';/g" openresty-1.15.8.2/configure
+    sed -i 's/= auto_complete "nginx";/= auto_complete "tengine";/g' openresty-1.15.8.2/configure
+
+    cd openresty-1.15.8.2
+
+    ./configure --prefix=${OPENRESTY_PREFIX} --with-debug \
+        --with-compat \
+        --with-file-aio \
+        --with-threads \
+        --with-http_addition_module \
+        --with-http_auth_request_module \
+        --with-http_dav_module \
+        --with-http_degradation_module \
+        --with-http_flv_module \
+        --with-http_gunzip_module \
+        --with-http_gzip_static_module \
+        --with-http_mp4_module \
+        --with-http_random_index_module \
+        --with-http_realip_module \
+        --with-http_secure_link_module \
+        --with-http_ssl_module \
+        --with-http_stub_status_module \
+        --with-http_sub_module \
+        --with-http_v2_module \
+        --with-stream \
+        --with-stream_ssl_module \
+        --with-stream_realip_module \
+        --with-stream_ssl_preread_module \
+        --with-stream_sni \
+        --with-pcre \
+        --with-pcre-jit \
+        --without-mail_pop3_module \
+        --without-mail_imap_module \
+        --without-mail_smtp_module \
+        --add-module=bundle/tengine-2.3.2/modules/ngx_http_upstream_vnswrr_module/ \
+        --add-module=bundle/tengine-2.3.2/modules/mod_dubbo \
+        --add-module=bundle/tengine-2.3.2/modules/ngx_multi_upstream_module \
+        --add-module=bundle/tengine-2.3.2/modules/mod_config \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_concat_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_footer_filter_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_proxy_connect_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_reqstat_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_slice_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_sysguard_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_trim_filter_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_upstream_check_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_upstream_consistent_hash_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_upstream_dynamic_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_upstream_dyups_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_upstream_session_sticky_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_user_agent_module \
+        --add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_slab_stat \
+        > build.log 2>&1 || (cat build.log && exit 1)
+
+    make > build.log 2>&1 || (cat build.log && exit 1)
+
+    sudo PATH=$PATH make install > build.log 2>&1 || (cat build.log && exit 1)
+
+    cd ..
+
+    mkdir -p build-cache${OPENRESTY_PREFIX}
+    cp -r ${OPENRESTY_PREFIX}/* build-cache${OPENRESTY_PREFIX}
+    ls build-cache${OPENRESTY_PREFIX}
+}
+
+do_install() {
+    export_or_prefix
+
+    wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -
+    sudo apt-get -y update --fix-missing
+    sudo apt-get -y install software-properties-common
+    sudo add-apt-repository -y ppa:longsleep/golang-backports
+
+    sudo apt-get update
+
+    tengine_install
+
+    sudo luarocks install --lua-dir=${OPENRESTY_PREFIX}/luajit luacov-coveralls
+
+    export GO111MOUDULE=on
+
+    if [ ! -f "build-cache/apisix-master-0.rockspec" ]; then
+        create_lua_deps
+
+    else
+        src=`md5sum rockspec/apisix-master-0.rockspec | awk '{print $1}'`
+        src_cp=`md5sum build-cache/apisix-master-0.rockspec | awk '{print $1}'`
+        if [ "$src" = "$src_cp" ]; then
+            echo "Use lua deps cache"
+            sudo cp -r build-cache/deps ./
+        else
+            create_lua_deps
+        fi
+    fi
+
+    git clone https://github.com/iresty/test-nginx.git test-nginx
+    wget -P utils https://raw.githubusercontent.com/iresty/openresty-devel-utils/iresty/lj-releng
+	chmod a+x utils/lj-releng
+
+    git clone https://github.com/apache/openwhisk-utilities.git .travis/openwhisk-utilities
+    cp .travis/ASF* .travis/openwhisk-utilities/scancode/
+
+    ls -l ./
+    if [ ! -f "build-cache/grpc_server_example" ]; then
+        sudo apt-get install golang
+
+        git clone https://github.com/iresty/grpc_server_example.git grpc_server_example
+
+        cd grpc_server_example/
+        go build -o grpc_server_example main.go
+        mv grpc_server_example ../build-cache/
+        cd ..
+    fi
+}
+
+script() {
+    export_or_prefix
+    export PATH=$OPENRESTY_PREFIX/nginx/sbin:$OPENRESTY_PREFIX/luajit/bin:$OPENRESTY_PREFIX/bin:$PATH
+    openresty -V
+    sudo service etcd start
+
+    ./build-cache/grpc_server_example &
+
+    ./bin/apisix help
+    ./bin/apisix init
+    ./bin/apisix init_etcd
+    ./bin/apisix start
+    mkdir -p logs
+    sleep 1
+    ./bin/apisix stop
+    sleep 1
+    make check || exit 1
+    APISIX_ENABLE_LUACOV=1 prove -Itest-nginx/lib -r t
+}
+
+after_success() {
+    cat luacov.stats.out
+    luacov-coveralls
+}
+
+case_opt=$1
+shift
+
+case ${case_opt} in
+before_install)
+    before_install "$@"
+    ;;
+do_install)
+    do_install "$@"
+    ;;
+script)
+    script "$@"
+    ;;
+after_success)
+    after_success "$@"
+    ;;
+esac
diff --git a/.travis/osx_runner.sh b/.travis/osx_openresty_runner.sh
similarity index 100%
rename from .travis/osx_runner.sh
rename to .travis/osx_openresty_runner.sh
diff --git a/README.md b/README.md
index cbe1153..eacc881 100644
--- a/README.md
+++ b/README.md
@@ -30,7 +30,7 @@
 
 APISIX is a cloud-native microservices API gateway, delivering the ultimate performance, security, open source and scalable platform for all your APIs and microservices.
 
-APISIX is based on OpenResty and etcd. Compared with traditional API gateways, APISIX has dynamic routing and plug-in hot loading, which is especially suitable for API management under micro-service system.
+APISIX is based on Nginx and etcd. Compared with traditional API gateways, APISIX has dynamic routing and plug-in hot loading, which is especially suitable for API management under micro-service system.
 
 [Installation](#Installation) | [Documentation](doc/README.md) | [Development ENV](#development-manual-of-apisix) | [FAQ](FAQ.md)
 
@@ -48,6 +48,7 @@ For more detailed information, see the [White Paper](https://www.iresty.com/down
 
 ## Features
 
+- **Run Environment**: Both OpenResty and Tengine are supported.
 - **Cloud-Native**: Platform agnostic, No vendor lock-in, APISIX can run from bare-metal to Kubernetes.
 - **[Hot Updates And Hot Plugins](doc/plugins.md)**: Continuously updates its configurations and plugins without restarts!
 - **Dynamic Load Balancing**: Round-robin load balancing with weight.
@@ -91,7 +92,7 @@ We provide an online dashboard [demo version](http://apisix.iresty.com), make
 
 ## Installation
 
-APISIX Installed and tested in the following systems, and the version of OpenResty MUST >= 1.15.8.1:
+APISIX Installed and tested in the following systems(OpenResty MUST >= 1.15.8.1, or Tengine >= 2.3.2):
 
 - CentOS 7
 - Ubuntu 16.04
@@ -107,7 +108,16 @@ You now have four ways to install APISIX:
 - other systems please use [Luarocks](#install-from-luarocks-not-support-macos);
 - You can also install from [Docker image](https://github.com/iresty/docker-apisix).
 
-*NOTE*: APISIX currently only supports the v2 protocol storage to etcd, but the latest version of etcd (starting with 3.4) has turned off the v2 protocol by default. You need to add `--enable-v2=true` to the startup parameter to enable the v2 protocol. The development of the v3 protocol supporting etcd has begun and will soon be available.
+The main steps to install APISIX:
+
+1. Runtime dependency: OpenResty or Tengine.
+    * OpenResty: Reference [http://openresty.org/en/installation.html](http://openresty.org/en/installation.html).
+    * Tengine: Please take a look at this installation step script [Install Tengine at Ubuntu](.travis/linux_tengine_runner.sh).
+2. Configuration center: Reference [etcd](https://github.com/etcd-io/etcd).
+
+    *NOTE*: APISIX currently only supports the v2 protocol storage to etcd, but the latest version of etcd (starting with 3.4) has turned off the v2 protocol by default. You need to add `--enable-v2=true` to the startup parameter to enable the v2 protocol. The development of the v3 protocol supporting etcd has begun and will soon be available.
+
+3. Install APISIX service.
 
 ### Install from RPM for CentOS 7
 
@@ -126,7 +136,7 @@ You can try APISIX with the [**Quickstart**](#quickstart) now.
 
 ##### Dependencies
 
-APISIX is based on [OpenResty](https://openresty.org/), the configures data storage and distribution via [etcd](https://github.com/etcd-io/etcd).
+APISIX is based on [OpenResty](https://openresty.org/) or [Tengine](http://tengine.taobao.org/), the configures data storage and distribution via [etcd](https://github.com/etcd-io/etcd).
 
 We recommend that you use [luarocks](https://luarocks.org/) to install APISIX, and for different operating systems have different dependencies, see more: [Install Dependencies](doc/install-dependencies.md)
 
diff --git a/README_CN.md b/README_CN.md
index f730cb2..8fcdcd0 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -104,8 +104,16 @@ APISIX 在以下操作系统中可顺利安装并做过运行测试,需要注
 - 其它操作系统,我们推荐使用 [Luarocks 安装方式](#通过-luarocks-安装-不支持-macos);
 - 你也可以使用 [Docker 镜像](https://github.com/iresty/docker-apisix) 来安装。
 
-*NOTE*: APISIX 目前仅支持 etcd 的 v2 协议存储,但最新版的 etcd (3.4 开始)已经默认关闭 v2 协议。
-需要在启动参数中添加 `--enable-v2=true`,才能启用 v2 协议。支持 etcd 的 v3 协议开发工作已经开始,很快就能与大家见面。
+安装 APISIX 的主要步骤:
+
+1. 运行时依赖:OpenResty 或 Tengine。
+    * OpenResty: 参考 [http://openresty.org/en/installation.html](http://openresty.org/en/installation.html)。
+    * Tengine:参考该安装脚本 [Install Tengine at Ubuntu](.travis/linux_tengine_runner.sh)。
+2. 配置存储中心:参考 [etcd](https://github.com/etcd-io/etcd)。
+
+    *NOTE*:APISIX 目前仅支持 etcd 的 v2 协议存储,但最新版的 etcd (3.4 开始)已经默认关闭 v2 协议。 在启动参数中添加 `--enable-v2=true`,启用 v2 协议。支持 etcd 的 v3 协议开发工作已经开始,很快就能与大家见面。
+
+3. 安装 APISIX 服务。
 
 ### 通过 RPM 包安装(CentOS 7)
 
diff --git a/bin/apisix b/bin/apisix
index 3f69dd2..a1f7564 100755
--- a/bin/apisix
+++ b/bin/apisix
@@ -171,7 +171,7 @@ http {
 
     lua_socket_log_errors off;
 
-    resolver {% for _, dns_addr in ipairs(dns_resolver or {}) do %} {*dns_addr*} {% end %} ipv6=off local=on;
+    resolver {% for _, dns_addr in ipairs(dns_resolver or {}) do %} {*dns_addr*} {% end %} ipv6=off;
     resolver_timeout 5;
 
     lua_http10_buffering off;
@@ -422,11 +422,18 @@ local function get_openresty_version()
     local str = "nginx version: openresty/"
     local ret = excute_cmd("openresty -v 2>&1")
     local pos = string.find(ret,str)
-    if pos ~= 1 then
-        return nil
+    if pos then
+        return string.sub(ret, pos + string.len(str))
     end
 
-    return string.sub(ret,string.len(str)+1)
+    str = "nginx version: nginx/"
+    ret = excute_cmd("openresty -v 2>&1")
+    pos = string.find(ret, str)
+    if pos then
+        return string.sub(ret, pos + string.len(str))
+    end
+
+    return nil
 end
 
 local function split(self, sep)
@@ -523,7 +530,7 @@ local function init()
 
     local need_ver = "1.15.8"
     if not check_or_version(op_ver, need_ver) then
-        io.stderr:write("openresty version must >=", need_ver, "\n")
+        io.stderr:write("openresty version must >=", need_ver, " current ", op_ver, "\n")
         return
     end
 end
diff --git a/conf/nginx.conf b/conf/nginx.conf
index 9ff45fe..6c09ab2 100644
--- a/conf/nginx.conf
+++ b/conf/nginx.conf
@@ -55,7 +55,7 @@ http {
 
     lua_socket_log_errors off;
 
-    resolver 114.114.114.114 ipv6=off local=on;
+    resolver 8.8.8.8 114.114.114.114 ipv6=off;
     resolver_timeout 5;
 
     lua_http10_buffering off;
diff --git a/t/APISIX.pm b/t/APISIX.pm
index 148b3ef..94b8213 100644
--- a/t/APISIX.pm
+++ b/t/APISIX.pm
@@ -143,7 +143,7 @@ _EOC_
     lua_shared_dict upstream-healthcheck 32m;
     lua_shared_dict worker-events        10m;
 
-    resolver ipv6=off local=on;
+    resolver 8.8.8.8 114.114.114.114 ipv6=off;
     resolver_timeout 5;
 
     lua_socket_log_errors off;
diff --git a/t/config-center-yaml/route-upstream.t b/t/config-center-yaml/route-upstream.t
index b3a9cdb..e62d13c 100644
--- a/t/config-center-yaml/route-upstream.t
+++ b/t/config-center-yaml/route-upstream.t
@@ -79,7 +79,7 @@ upstreams:
 #END
 --- request
 GET /hello
---- error_code: 502
+--- error_code_like: ^(?:50\d)$
 --- error_log
 failed to find upstream by id: 1111
 
diff --git a/t/node/not-exist-upstream.t b/t/node/not-exist-upstream.t
index b926896..c12aa10 100644
--- a/t/node/not-exist-upstream.t
+++ b/t/node/not-exist-upstream.t
@@ -77,9 +77,9 @@ qr/404 Not Found/
 === TEST 3: hit routes
 --- request
 GET /hello
---- error_code: 502
+--- error_code_like: ^(?:50\d)$
 --- response_body eval
-qr/502 Bad Gateway/
+qr/502 Bad Gateway|500 Internal Server Error/
 --- grep_error_log eval
 qr/\[error\].*/
 --- grep_error_log_out eval
diff --git a/t/router/radixtree-sni.t b/t/router/radixtree-sni.t
index fbea924..927e6d2 100644
--- a/t/router/radixtree-sni.t
+++ b/t/router/radixtree-sni.t
@@ -158,7 +158,7 @@ sent http request: 62 bytes.
 received: HTTP/1.1 200 OK
 received: Content-Type: text/plain
 received: Connection: close
-received: Server: openresty
+received: Server: \w+
 received: \nreceived: hello world
 close: 1 nil}
 --- error_log
@@ -307,7 +307,7 @@ sent http request: 62 bytes.
 received: HTTP/1.1 200 OK
 received: Content-Type: text/plain
 received: Connection: close
-received: Server: openresty
+received: Server: \w+
 received: \nreceived: hello world
 close: 1 nil}
 --- error_log
@@ -418,7 +418,7 @@ sent http request: 58 bytes.
 received: HTTP/1.1 200 OK
 received: Content-Type: text/plain
 received: Connection: close
-received: Server: openresty
+received: Server: \w+
 received: \nreceived: hello world
 close: 1 nil}
 --- error_log