feat: add apisix-dashboard dockerfile & CI (#152)
diff --git a/.github/workflows/dashboard-docker-test.yaml b/.github/workflows/dashboard-docker-test.yaml
new file mode 100644
index 0000000..96f93d0
--- /dev/null
+++ b/.github/workflows/dashboard-docker-test.yaml
@@ -0,0 +1,41 @@
+name: dashboard docker test
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
+
+jobs:
+ dashboard-docker-test:
+ name: build dashboard & test
+ runs-on: ubuntu-latest
+ env:
+ APISIX_DASHBOARD_TAG: 2.4
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Build and run
+ run: |
+ make build-dashboard
+ 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-tar
+
+ - name: Upload Image
+ uses: actions/upload-artifact@v2
+ with:
+ path: ./package
diff --git a/Makefile b/Makefile
index 4671949..1488a5a 100644
--- a/Makefile
+++ b/Makefile
@@ -20,6 +20,10 @@
IMAGE_NAME = apache/apisix
IMAGE_TAR_NAME = apache_apisix
+APISIX_DASHBOARD_VERSION ?= 2.4
+APISIX_DASHBOARD_IMAGE_NAME = apache/apisix-dashboard
+APISIX_DASHBOARD_IMAGE_TAR_NAME = apache_apisix_dashboard
+
### build-on-centos: Build apache/apisix:xx-centos image
build-on-centos:
docker build -t $(IMAGE_NAME):$(APISIX_VERSION)-centos -f ./centos/Dockerfile .
@@ -32,7 +36,7 @@
# Actually it is not build on certain version but on local code
# Use this name (in the same patterns with others) for convenient CI
build-on-alpine-local:
- docker build -t $(IMAGE_NAME):$(APISIX_VERSION)-alpine-local --build-arg APISIX_PATH=${APISIX_PATH} -f ./alpine-local/Dockerfile .
+ docker build -t $(IMAGE_NAME):$(APISIX_VERSION)-alpine-local --build-arg APISIX_PATH=${APISIX_PATH} -f ./alpine-local/Dockerfile .
### save-centos-tar: tar apache/apisix:xx-centos image
save-centos-tar:
@@ -44,6 +48,15 @@
mkdir -p package
docker save -o ./package/$(IMAGE_TAR_NAME)_$(APISIX_VERSION)-alpine.tar $(IMAGE_NAME):$(APISIX_VERSION)-alpine
+### build-dashboard: Build apache/dashboard:tag image
+build-dashboard:
+ docker build -t $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION) -f ./dashboard/Dockerfile .
+
+### save-dashboard-tar: tar apaceh/apisix-dashboard:tag image
+save-dashboard-tar:
+ mkdir -p package
+ docker save -o ./package/$(APISIX_DASHBOARD_IMAGE_TAR_NAME)_$(APISIX_DASHBOARD_VERSION).tar $(APISIX_DASHBOARD_IMAGE_NAME):$(APISIX_DASHBOARD_VERSION)
+
### help: Show Makefile rules
help:
@echo Makefile rules:
diff --git a/compose/dashboard-compose.yaml b/compose/dashboard-compose.yaml
new file mode 100644
index 0000000..8e3cf76
--- /dev/null
+++ b/compose/dashboard-compose.yaml
@@ -0,0 +1,35 @@
+version: "3"
+
+services:
+ dashboard:
+ image: "apache/apisix-dashboard:${APISIX_DASHBOARD_TAG}"
+ restart: always
+ volumes:
+ - ../example/dashboard_conf/conf.yaml:/usr/local/apisix-dashboard/conf/conf.yaml:ro
+ depends_on:
+ - etcd
+ ports:
+ - "9000:9000/tcp"
+ networks:
+ - apisix
+
+ etcd:
+ image: bitnami/etcd:3.4.9
+ user: root
+ restart: always
+ volumes:
+ - ../example/etcd_data:/etcd_data
+ environment:
+ ETCD_DATA_DIR: /etcd_data
+ ETCD_ENABLE_V2: "true"
+ ALLOW_NONE_AUTHENTICATION: "yes"
+ ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2379"
+ ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
+ ports:
+ - "2379:2379/tcp"
+ networks:
+ - apisix
+
+networks:
+ apisix:
+ driver: bridge
diff --git a/dashboard/Dockerfile b/dashboard/Dockerfile
new file mode 100644
index 0000000..296678e
--- /dev/null
+++ b/dashboard/Dockerfile
@@ -0,0 +1,69 @@
+#
+# 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.
+#
+FROM alpine:latest as pre-build
+
+ARG APISIX_DASHBOARD_VERSION=v2.4
+
+RUN set -x \
+ && apk add --no-cache --virtual .builddeps git \
+ && git clone https://github.com/apache/apisix-dashboard.git -b ${APISIX_DASHBOARD_VERSION} /usr/local/apisix-dashboard \
+ && cd /usr/local/apisix-dashboard && git clean -Xdf \
+ && rm -f ./.githash && git log --pretty=format:"%h" -1 > ./.githash
+
+FROM golang:1.14 as api-builder
+
+ARG ENABLE_PROXY=false
+
+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
+
+FROM node:14-alpine as fe-builder
+
+ARG ENABLE_PROXY=false
+
+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.npm.taobao.org/ ; fi \
+ && yarn install \
+ && yarn build
+
+FROM alpine:latest as prod
+
+ARG ENABLE_PROXY=false
+
+RUN if [ "$ENABLE_PROXY" = "true" ] ; then sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories ; fi
+
+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 9000
+
+CMD [ "/usr/local/apisix-dashboard/manager-api" ]
diff --git a/dashboard/README.md b/dashboard/README.md
new file mode 100644
index 0000000..ff0b81f
--- /dev/null
+++ b/dashboard/README.md
@@ -0,0 +1,7 @@
+### build command
+
+```shell
+$ docker build --build-arg APISIX_DASHBOARD_VERSION=$APISIX_DASHBOARD_VERSION -t $IMAGE_NAME .
+```
+
+Note: The minimum version of docker that supports building image is `docker 17.05.0-ce`.