Skip to content

Commit

Permalink
feat: revert remove apisix-dashboard (#516) (#522)
Browse files Browse the repository at this point in the history
  • Loading branch information
Sn0rt authored Dec 7, 2023
1 parent aa6581d commit 0624a79
Show file tree
Hide file tree
Showing 12 changed files with 477 additions and 22 deletions.
8 changes: 5 additions & 3 deletions .github/workflows/apisix_dev_docker_local_test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,17 @@ jobs:
- name: Build image
run: |
cd apisix
tag="apache/apisix:$APISIX_IMAGE_TAG"
docker build -t $tag -f ../debian-dev/Dockerfile.local .
docker build -t $tag -f debian-dev/Dockerfile.local .
- name: use docker-compose
run: docker-compose -p docker-apisix -f example/docker-compose.yml up -d

- name: Test APISIX
run: |
sleep 2
docker logs docker-apisix_apisix_1
sleep 30
curl http://127.0.0.1:9180/apisix/admin/routes/1 \
Expand Down
27 changes: 27 additions & 0 deletions .github/workflows/dashboard_all_in_one_ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: apisix dashboard all in one docker

on:
push:
branches:
- master
pull_request:
branches:
- master

jobs:
build:
runs-on: ubuntu-latest

env:
APISIX_DASHBOARD_VERSION: "3.0.1" # in semver

steps:
- uses: actions/checkout@v2

- name: Build and Test
run: |
docker build -t apache/apisix-dashboard:whole --build-arg APISIX_DASHBOARD_TAG=v${APISIX_DASHBOARD_VERSION} -f ./all-in-one/apisix-dashboard/Dockerfile .
docker run -v `pwd`/all-in-one/apisix/config.yaml:/usr/local/apisix/conf/config.yaml -v `pwd`/all-in-one/apisix-dashboard/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml -p 9080:9080 -p 2379:2379 -p 9000:9000 -d apache/apisix-dashboard:whole
sleep 30
curl http://127.0.0.1:9080/apisix/admin/schema/service -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
curl http://127.0.0.1:9000
56 changes: 56 additions & 0 deletions .github/workflows/dashboard_push_docker_hub.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: Push apisix dashboard to Docker image
on:
push:
branches: ['release/apisix-dashboard**']
jobs:
build:
strategy:
fail-fast: false
matrix:
os:
- alpine

name: build dashboard & test on ${{ matrix.os }} && push to docker hub
runs-on: ubuntu-latest

env:
APISIX_DASHBOARD_VERSION: "3.0.1" # in semver

steps:
- name: Check out the repo
uses: actions/checkout@v2

- name: Build and run
run: |
make build-dashboard-${{ matrix.os }}
docker-compose -f ./compose/dashboard-compose.yaml up -d
sleep 30
docker logs compose_dashboard_1
- name: check
run: |
wget https://raw.githubusercontent.com/apache/apisix-dashboard/master/api/test/shell/manager_smoking.sh
chmod +x ./manager_smoking.sh
sh manager_smoking.sh -s true
- name: Tar Image
run: |
make save-dashboard-${{ matrix.os }}-tar
- name: Upload Image
uses: actions/upload-artifact@v2
with:
path: ./package

- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Set up QEMU
uses: docker/setup-qemu-action@v1

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

31 changes: 31 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ MAX_APISIX_VERSION ?= 3.7.0
IMAGE_NAME = apache/apisix
IMAGE_TAR_NAME = apache_apisix

APISIX_DASHBOARD_VERSION ?= $(shell echo ${APISIX_DASHBOARD_VERSION:=3.0.1})
APISIX_DASHBOARD_IMAGE_NAME = apache/apisix-dashboard
APISIX_DASHBOARD_IMAGE_TAR_NAME = apache_apisix_dashboard


# Makefile ENV
ENV_OS_NAME ?= $(shell uname -s | tr '[:upper:]' '[:lower:]')
Expand Down Expand Up @@ -136,6 +140,14 @@ build-all-in-one:
@$(call func_echo_success_status, "$@ -> [ Done ]")


### build-dashboard-all-in-one : Build All in one Docker container for Apache APISIX-dashboard
.PHONY: build-dashboard-all-in-one
build-dashboard-all-in-one:
@$(call func_echo_status, "$@ -> [ Start ]")
$(ENV_DOCKER) build -t $(APISIX_DASHBOARD_IMAGE_NAME):whole -f ./all-in-one/apisix-dashboard/Dockerfile .
@$(call func_echo_success_status, "$@ -> [ Done ]")


### save-debian-tar : tar apache/apisix:xx-debian image
.PHONY: save-debian-tar
save-debian-tar:
Expand All @@ -145,6 +157,25 @@ save-debian-tar:
@$(call func_echo_success_status, "$@ -> [ Done ]")


### build-dashboard-alpine : Build apache/dashboard:tag image on alpine
.PHONY: build-dashboard-alpine
build-dashboard-alpine:
@$(call func_echo_status, "$@ -> [ Start ]")
$(ENV_DOCKER) build -t $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION) \
--build-arg APISIX_DASHBOARD_TAG=v$(APISIX_DASHBOARD_VERSION) \
-f ./dashboard/Dockerfile.alpine .
@$(call func_echo_success_status, "$@ -> [ Done ]")


### save-dashboard-alpine-tar : tar apache/apisix-dashboard:tag image
.PHONY: save-dashboard-alpine-tar
save-dashboard-alpine-tar:
@$(call func_echo_status, "$@ -> [ Start ]")
mkdir -p package
$(ENV_DOCKER) save -o ./package/$(APISIX_DASHBOARD_IMAGE_TAR_NAME)_$(APISIX_DASHBOARD_VERSION)-alpine.tar $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION)
@$(call func_echo_success_status, "$@ -> [ Done ]")


### help : Show Makefile rules
.PHONY: help
help:
Expand Down
144 changes: 144 additions & 0 deletions all-in-one/apisix-dashboard/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
#
# 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.
#

ARG ENABLE_PROXY=false
ARG ETCD_VERSION=v3.4.14
ARG APISIX_VERSION=master
ARG APISIX_DASHBOARD_VERSION=master

# Build Apache APISIX
FROM openresty/openresty:1.21.4.2-alpine-fat AS production-stage

ARG APISIX_VERSION
ARG ENABLE_PROXY
LABEL apisix_version="${APISIX_VERSION}"

RUN set -x \
&& (test "${ENABLE_PROXY}" != "true" || /bin/sed -i 's,http://dl-cdn.alpinelinux.org,https://mirrors.aliyun.com,g' /etc/apk/repositories) \
&& apk add --no-cache --virtual .builddeps \
automake \
autoconf \
libtool \
pkgconfig \
cmake \
git \
openldap-dev \
sudo \
&& mkdir ~/.luarocks \
&& luarocks config variables.OPENSSL_LIBDIR /usr/local/openresty/openssl/lib \
&& luarocks config variables.OPENSSL_INCDIR /usr/local/openresty/openssl/include \
&& git config --global url.https://github.com/.insteadOf git://github.com/ \
&& curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sudo sh -s -- -y \
&& source "$HOME/.cargo/env" \
&& export CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse \
# next line is for rust cdylib compile on musl
&& export RUSTFLAGS="-C target-feature=-crt-static" \
&& luarocks install https://raw.githubusercontent.com/apache/apisix/master/apisix-master-0.rockspec --tree=/usr/local/apisix/deps PCRE_DIR=/usr/local/openresty/pcre \
&& cp -v /usr/local/apisix/deps/lib/luarocks/rocks-5.1/apisix/${APISIX_VERSION}-0/bin/apisix /usr/bin/ \
&& (if [ "$APISIX_VERSION" = "master" ] || [ "$APISIX_VERSION" \> "2.2" ]; then echo 'use shell ';else bin='#! /usr/local/openresty/luajit/bin/luajit\npackage.path = "/usr/local/apisix/?.lua;" .. package.path'; sed -i "1s@.*@$bin@" /usr/bin/apisix ; fi;) \
&& mv /usr/local/apisix/deps/share/lua/5.1/apisix /usr/local/apisix \
&& apk del .builddeps build-base make unzip

# Build etcd
FROM alpine:3.13 AS etcd-stage

ARG ETCD_VERSION
LABEL etcd_version="${ETCD_VERSION}"

WORKDIR /tmp
RUN wget https://github.com/etcd-io/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz \
&& tar -zxvf etcd-${ETCD_VERSION}-linux-amd64.tar.gz \
&& ln -s etcd-${ETCD_VERSION}-linux-amd64 etcd


# Build APISIX Dashboard - 1. download source code from github
FROM alpine:latest as pre-build

ARG APISIX_DASHBOARD_TAG

RUN set -x \
&& wget https://github.com/apache/apisix-dashboard/archive/${APISIX_DASHBOARD_TAG}.tar.gz -O /tmp/apisix-dashboard.tar.gz \
&& mkdir /usr/local/apisix-dashboard \
&& tar -xvf /tmp/apisix-dashboard.tar.gz -C /usr/local/apisix-dashboard --strip 1

# Build APISIX Dashboard - 2. build manager-api from source code
FROM golang:1.17 as api-builder

ARG APISIX_DASHBOARD_VERSION
ARG ENABLE_PROXY

WORKDIR /usr/local/apisix-dashboard

COPY --from=pre-build /usr/local/apisix-dashboard .

RUN if [ "$ENABLE_PROXY" = "true" ] ; then go env -w GOPROXY=https://goproxy.io,direct ; fi \
&& go env -w GO111MODULE=on \
&& CGO_ENABLED=0 ./api/build.sh

# Build APISIX Dashboard - 3. build dashboard web-UI from source code
FROM node:14-alpine as fe-builder

ARG ENABLE_PROXY

WORKDIR /usr/local/apisix-dashboard

COPY --from=pre-build /usr/local/apisix-dashboard .

WORKDIR /usr/local/apisix-dashboard/web

RUN if [ "$ENABLE_PROXY" = "true" ] ; then yarn config set registry https://registry.npmmirror.com/ ; fi \
&& yarn install \
&& yarn build

# Finally combine all the resources into one image
FROM alpine:3.13 AS last-stage

ARG ENABLE_PROXY

# add runtime for Apache APISIX
RUN set -x \
&& (test "${ENABLE_PROXY}" != "true" || /bin/sed -i 's,http://dl-cdn.alpinelinux.org,https://mirrors.aliyun.com,g' /etc/apk/repositories) \
&& apk add --no-cache bash libstdc++ curl

WORKDIR /usr/local/apisix

COPY --from=production-stage /usr/local/openresty/ /usr/local/openresty/
COPY --from=production-stage /usr/local/apisix/ /usr/local/apisix/
COPY --from=production-stage /usr/bin/apisix /usr/bin/apisix

COPY --from=etcd-stage /tmp/etcd/etcd /usr/bin/etcd
COPY --from=etcd-stage /tmp/etcd/etcdctl /usr/bin/etcdctl

ENV PATH=$PATH:/usr/local/openresty/luajit/bin:/usr/local/openresty/nginx/sbin:/usr/local/openresty/bin

# dashboard

RUN if [ "$ENABLE_PROXY" = "true" ] ; then sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories ; fi \
&& apk add lua5.1

WORKDIR /usr/local/apisix-dashboard

COPY --from=api-builder /usr/local/apisix-dashboard/output/ ./
COPY --from=fe-builder /usr/local/apisix-dashboard/output/ ./

RUN mkdir logs

EXPOSE 9080 9443 2379 2380 9000

CMD ["sh", "-c", "(nohup etcd >/tmp/etcd.log 2>&1 &) && sleep 10 && (/usr/local/apisix-dashboard/manager-api &) && cd /usr/local/apisix && /usr/bin/apisix init && /usr/bin/apisix init_etcd && /usr/local/openresty/bin/openresty -p /usr/local/apisix -g 'daemon off;'"]

STOPSIGNAL SIGQUIT
51 changes: 51 additions & 0 deletions all-in-one/apisix-dashboard/conf.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#
# 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.
#

conf:
listen:
host: 0.0.0.0 # `manager api` listening ip or host name
port: 9000 # `manager api` listening port
etcd:
endpoints: # supports defining multiple etcd host addresses for an etcd cluster
- 127.0.0.1:2379

# etcd basic auth info
# username: "root" # ignore etcd username if not enable etcd auth
# password: "123456" # ignore etcd password if not enable etcd auth
log:
error_log:
level: warn # supports levels, lower to higher: debug, info, warn, error, panic, fatal
file_path:
logs/error.log # supports relative path, absolute path, standard output
# such as: logs/error.log, /tmp/logs/error.log, /dev/stdout, /dev/stderr
authentication:
secret:
secret # secret for jwt token generation.
# NOTE: Highly recommended to modify this value to protect `manager api`.
# if it's default value, when `manager api` start, it will generate a random string to replace it.
expire_time: 3600 # jwt token expire time, in second
users:
- username: admin # username and password for login `manager api`
password: admin
- username: user
password: user

plugin_attr:
prometheus:
export_addr:
ip: "0.0.0.0"
port: 9091
Loading

0 comments on commit 0624a79

Please sign in to comment.