Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

travis: supported to run apisix with tengine. #683

Merged
merged 7 commits into from
Nov 2, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
2 changes: 2 additions & 0 deletions .travis/ASF-Release.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ test-nginx
grpc_server_example
.travis.yml
grpcurl
t/servroot
grpcurl

conf
.travis/openwhisk-utilities
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
222 changes: 222 additions & 0 deletions .travis/linux_tengine_runner.sh
Original file line number Diff line number Diff line change
@@ -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/

membphis marked this conversation as resolved.
Show resolved Hide resolved
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 \
membphis marked this conversation as resolved.
Show resolved Hide resolved
--add-dynamic-module=bundle/tengine-2.3.2/modules/ngx_http_upstream_dyups_module \
membphis marked this conversation as resolved.
Show resolved Hide resolved
--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
File renamed without changes.
18 changes: 14 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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.
Expand Down Expand Up @@ -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
Expand All @@ -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

Expand All @@ -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)

Expand Down
12 changes: 10 additions & 2 deletions README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
17 changes: 12 additions & 5 deletions bin/apisix
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
Loading