From 96d6657b00495afa62d25e18300ab93da0a6745a Mon Sep 17 00:00:00 2001 From: Dan Cech Date: Fri, 20 Apr 2018 14:28:52 -0400 Subject: [PATCH] produce an image compatible with grafana-docker --- .dockerignore | 4 +++ Dockerfile | 73 ++++++++++++++++++++++++++++++++++++++++++--------- Makefile | 3 +++ docker/run.sh | 67 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 134 insertions(+), 13 deletions(-) create mode 100644 docker/run.sh diff --git a/.dockerignore b/.dockerignore index e50dfd86aa3..296b86db001 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,9 +3,12 @@ .git .gitignore .github +.vscode +bin data* dist docker +Dockerfile docs dump.rdb node_modules @@ -13,3 +16,4 @@ node_modules /tmp *.yml *.md +/tmp diff --git a/Dockerfile b/Dockerfile index 9a15b4974f5..39bc13f4c6f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,28 +1,75 @@ -FROM golang:1.9 -RUN go get -u github.com/golang/dep/cmd/dep -WORKDIR $GOPATH/src/github.com/grafana/grafana -COPY Gopkg.toml Gopkg.lock ./ -RUN dep ensure --vendor-only -COPY pkg pkg -RUN go install -ldflags="-s -w" ./pkg/cmd/grafana-server -RUN go install -ldflags="-s -w" ./pkg/cmd/grafana-cli +# Golang build container +FROM golang:1.10 +WORKDIR $GOPATH/src/github.com/grafana/grafana + +COPY Gopkg.toml Gopkg.lock ./ +COPY vendor vendor + +ARG DEP_ENSURE="" +RUN if [ ! -z "${DEP_ENSURE}" ]; then \ + go get -u github.com/golang/dep/cmd/dep && \ + dep ensure --vendor-only; \ + fi + +COPY pkg pkg +RUN go install -ldflags="-s -w" ./pkg/cmd/grafana-server && \ + go install -ldflags="-s -w" ./pkg/cmd/grafana-cli + +# Node build container FROM node:8 + WORKDIR /usr/src/app/ + COPY package.json yarn.lock ./ RUN yarn install --frozen-lockfile -ENV NODE_ENV production + COPY Gruntfile.js tsconfig.json tslint.json ./ COPY public public COPY scripts scripts COPY emails emails + +ENV NODE_ENV production RUN yarn run build +# Final container FROM debian:stretch-slim -WORKDIR /app -ENV PATH $PATH:/app/bin + +ARG GF_UID="472" +ARG GF_GID="472" + +ENV PATH=/usr/share/grafana/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \ + GF_PATHS_CONFIG="/etc/grafana/grafana.ini" \ + GF_PATHS_DATA="/var/lib/grafana" \ + GF_PATHS_HOME="/usr/share/grafana" \ + GF_PATHS_LOGS="/var/log/grafana" \ + GF_PATHS_PLUGINS="/var/lib/grafana/plugins" \ + GF_PATHS_PROVISIONING="/etc/grafana/provisioning" + +WORKDIR $GF_PATHS_HOME + +COPY conf ./conf + +RUN mkdir -p "$GF_PATHS_HOME/.aws" && \ + groupadd -r -g $GF_GID grafana && \ + useradd -r -u $GF_UID -g grafana grafana && \ + mkdir -p "$GF_PATHS_PROVISIONING/datasources" \ + "$GF_PATHS_PROVISIONING/dashboards" \ + "$GF_PATHS_LOGS" \ + "$GF_PATHS_PLUGINS" \ + "$GF_PATHS_DATA" && \ + cp "$GF_PATHS_HOME/conf/sample.ini" "$GF_PATHS_CONFIG" && \ + cp "$GF_PATHS_HOME/conf/ldap.toml" /etc/grafana/ldap.toml && \ + chown -R grafana:grafana "$GF_PATHS_DATA" "$GF_PATHS_HOME/.aws" "$GF_PATHS_LOGS" "$GF_PATHS_PLUGINS" && \ + chmod 777 "$GF_PATHS_DATA" "$GF_PATHS_HOME/.aws" "$GF_PATHS_LOGS" "$GF_PATHS_PLUGINS" + COPY --from=0 /go/bin/grafana-server /go/bin/grafana-cli ./bin/ COPY --from=1 /usr/src/app/public ./public COPY --from=1 /usr/src/app/tools ./tools -COPY conf ./conf -CMD ["grafana-server"] + +EXPOSE 3000 + +COPY ./docker/run.sh /run.sh + +USER grafana +ENTRYPOINT [ "/run.sh" ] diff --git a/Makefile b/Makefile index 9e136688eb7..c6915409ed7 100644 --- a/Makefile +++ b/Makefile @@ -30,6 +30,9 @@ build-docker-dev: cp dist/grafana-latest.linux-x64.tar.gz packaging/docker cd packaging/docker && docker build --tag grafana/grafana:dev . +build-docker-full: + docker build --tag grafana/grafana:dev . + test-go: go test -v ./pkg/... diff --git a/docker/run.sh b/docker/run.sh new file mode 100644 index 00000000000..df64ce3adf4 --- /dev/null +++ b/docker/run.sh @@ -0,0 +1,67 @@ +#!/bin/bash -e + +PERMISSIONS_OK=0 + +if [ ! -r "$GF_PATHS_CONFIG" ]; then + echo "GF_PATHS_CONFIG='$GF_PATHS_CONFIG' is not readable." + PERMISSIONS_OK=1 +fi + +if [ ! -w "$GF_PATHS_DATA" ]; then + echo "GF_PATHS_DATA='$GF_PATHS_DATA' is not writable." + PERMISSIONS_OK=1 +fi + +if [ ! -r "$GF_PATHS_HOME" ]; then + echo "GF_PATHS_HOME='$GF_PATHS_HOME' is not readable." + PERMISSIONS_OK=1 +fi + +if [ $PERMISSIONS_OK -eq 1 ]; then + echo "You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later" +fi + +if [ ! -d "$GF_PATHS_PLUGINS" ]; then + mkdir "$GF_PATHS_PLUGINS" +fi + + +if [ ! -z ${GF_AWS_PROFILES+x} ]; then + > "$GF_PATHS_HOME/.aws/credentials" + + for profile in ${GF_AWS_PROFILES}; do + access_key_varname="GF_AWS_${profile}_ACCESS_KEY_ID" + secret_key_varname="GF_AWS_${profile}_SECRET_ACCESS_KEY" + region_varname="GF_AWS_${profile}_REGION" + + if [ ! -z "${!access_key_varname}" -a ! -z "${!secret_key_varname}" ]; then + echo "[${profile}]" >> "$GF_PATHS_HOME/.aws/credentials" + echo "aws_access_key_id = ${!access_key_varname}" >> "$GF_PATHS_HOME/.aws/credentials" + echo "aws_secret_access_key = ${!secret_key_varname}" >> "$GF_PATHS_HOME/.aws/credentials" + if [ ! -z "${!region_varname}" ]; then + echo "region = ${!region_varname}" >> "$GF_PATHS_HOME/.aws/credentials" + fi + fi + done + + chmod 600 "$GF_PATHS_HOME/.aws/credentials" +fi + +if [ ! -z "${GF_INSTALL_PLUGINS}" ]; then + OLDIFS=$IFS + IFS=',' + for plugin in ${GF_INSTALL_PLUGINS}; do + IFS=$OLDIFS + grafana-cli --pluginsDir "${GF_PATHS_PLUGINS}" plugins install ${plugin} + done +fi + +exec grafana-server \ + --homepath="$GF_PATHS_HOME" \ + --config="$GF_PATHS_CONFIG" \ + "$@" \ + cfg:default.log.mode="console" \ + cfg:default.paths.data="$GF_PATHS_DATA" \ + cfg:default.paths.logs="$GF_PATHS_LOGS" \ + cfg:default.paths.plugins="$GF_PATHS_PLUGINS" \ + cfg:default.paths.provisioning="$GF_PATHS_PROVISIONING" \ No newline at end of file