From c131e6fcf0697e5ea6c114f7220e50a879f1cbd7 Mon Sep 17 00:00:00 2001 From: Gregor Riepl Date: Wed, 20 Nov 2019 11:19:19 +0100 Subject: [PATCH] docker: add container build files and instructions (#22) This adds: - a Dockerfile - a build script that injects some labels from git - an example nginx config for running the built webpack - instructions on how to run the container Signed-off-by: Rohit Yadav --- ui/Dockerfile | 41 +++++++++++++++++++++++++++++++++++++++++ ui/README.md | 15 +++++++++++++++ ui/build.sh | 31 +++++++++++++++++++++++++++++++ ui/nginx/default.conf | 30 ++++++++++++++++++++++++++++++ 4 files changed, 117 insertions(+) create mode 100644 ui/Dockerfile create mode 100755 ui/build.sh create mode 100644 ui/nginx/default.conf diff --git a/ui/Dockerfile b/ui/Dockerfile new file mode 100644 index 00000000000..ef4a646b767 --- /dev/null +++ b/ui/Dockerfile @@ -0,0 +1,41 @@ +# 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 node:10-buster AS build + +WORKDIR /build + +RUN apt-get -y update && \ + apt-get -y upgrade + +COPY . /build/ +RUN npm install +RUN npm run build + +FROM nginx:alpine AS runtime + +LABEL org.opencontainers.image.title="CloudStack Primate" \ + org.opencontainers.image.description="A modern role-based progressive CloudStack UI" \ + org.opencontainers.image.authors="Apache CloudStack Contributors" \ + org.opencontainers.image.url="https://github.com/apache/cloudstack-primate" \ + org.opencontainers.image.documentation="https://github.com/apache/cloudstack-primate/README.md" \ + org.opencontainers.image.source="https://github.com/apache/cloudstack-primate" \ + org.opencontainers.image.vendor="The Apache Software Foundation" \ + org.opencontainers.image.licenses="Apache-2.0" \ + org.opencontainers.image.ref.name="latest" + +COPY --from=build /build/dist/. /usr/share/nginx/html/ diff --git a/ui/README.md b/ui/README.md index d6e9e3ecf47..d688fe6dd4d 100644 --- a/ui/README.md +++ b/ui/README.md @@ -88,6 +88,21 @@ server { } ``` +### Docker + +A production-ready Docker container can also be built with the provided +Dockerfile and build script. + +Make sure Docker is installed, then run build.sh: + + ./build.sh + +Change the example configuration in `nginx/default.conf` according to your needs. + +Run Primate: + + docker run -ti --rm -p 8080:80 -v $(pwd)/nginx:/etc/nginx/conf.d:ro cloudstack-primate:latest + ## Documentation ### Learning Resources diff --git a/ui/build.sh b/ui/build.sh new file mode 100755 index 00000000000..059d3748239 --- /dev/null +++ b/ui/build.sh @@ -0,0 +1,31 @@ +#!/bin/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 -e +set -x + +GIT_TAG="$(git tag --points-at | head -n 1)" +if [ -n "${GIT_REV}" ]; then + LABEL_GIT_TAG="--label \"org.opencontainers.image.version=${GIT_TAG}\"" +fi +DATE="$(date --iso-8601=seconds)" +LABEL_DATE="--label \"org.opencontainers.image.created=${DATE}\"" +GIT_REV="$(git rev-parse HEAD)" +LABEL_GIT_REV="--label \"org.opencontainers.image.revision=${GIT_REV}\"" + +docker build -t cloudstack-primate ${LABEL_DATE} ${LABEL_GIT_REV} ${LABEL_GIT_TAG} . diff --git a/ui/nginx/default.conf b/ui/nginx/default.conf new file mode 100644 index 00000000000..9ba96cfbb20 --- /dev/null +++ b/ui/nginx/default.conf @@ -0,0 +1,30 @@ +# 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. + +server { + listen 80; + server_name localhost; + location / { + root /usr/share/nginx/html; + index index.html; + } + location /client/ { + # http://127.0.0.1:8080 should be replaced your CloudStack management + # Server's actual URI + proxy_pass http://127.0.0.1:8080; + } +}