diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f999275 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +node_modules / + dist +test.json +Dockerfile +npm - debug.log diff --git a/.env b/.env index 72292c1..2b7c036 100644 --- a/.env +++ b/.env @@ -1 +1,2 @@ +# Please provide the Url for dqApi VITE_BACKEND_URL=http://localhost:8099/api/v1 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8278ee2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,42 @@ +FROM --platform=$BUILDPLATFORM node:19-alpine AS base + +FROM base AS deps +RUN apk add --no-cache libc6-compat +WORKDIR /app + +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ +RUN \ + if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ + elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \ + elif [ -f package-lock.json ]; then npm ci; \ + else echo "Lockfile not found." && exit 1; \ + fi + +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +RUN npm run build + +FROM --platform=$BUILDPLATFORM nginx:1.22-alpine AS runtime +COPY --from=builder /app/dist/app /usr/share/nginx/html + +# Adding the env-File and the Shell-Script +WORKDIR /usr/share/nginx/html +COPY ./env.sh . +COPY .env . + +COPY entrypoint.sh /usr/bin/ + +# Adding nginx-config +COPY nginx.conf /etc/nginx/conf.d/default.conf + +RUN chmod +x /usr/bin/entrypoint.sh + +# Add bash +RUN apk add --no-cache bash + +RUN chmod +x env.sh + +# Executing the Shell-Skript +CMD ["entrypoint.sh"] \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..504eef6 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# Check if the VITE_BACKEND_URL environment variable is set +if [ -z "$VITE_BACKEND_URL" ]; then + echo "Error: + The environment variable VITE_BACKEND_URL is not set. + Please enter a valid URL, for example, '-e VITE_BACKEND_URL=http://localhost:8080' on 'docker run'." + exit 1 +fi + +# Run the env.sh script +source /usr/share/nginx/html/env.sh + +# Start nginx +nginx -g "daemon off;" -c "/data/conf/" \ No newline at end of file diff --git a/env.sh b/env.sh new file mode 100644 index 0000000..20874ff --- /dev/null +++ b/env.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Recreate config file +rm -rf ./env-config.js +touch ./env-config.js + +# Add assignment - window._env_ will contain all Environment-Variables, defined in .env +echo "window._env_ = {" >> ./env-config.js + +# Read each line in .env file +# Each line represents key=value pairs +while read -r line || [[ -n "$line" ]]; +do + # Split env variables by character `=` + if printf '%s\n' "$line" | grep -q -e '='; then + varname=$(printf '%s\n' "$line" | sed -e 's/=.*//') + varvalue=$(printf '%s\n' "$line" | sed -e 's/^[^=]*=//') + fi + + # Read value of current variable if exists as Environment variable + value=$(printf '%s\n' "${!varname}") + # Otherwise use value from .env file + [[ -z $value ]] && value=${varvalue} + + # Append configuration property to JS file + echo " $varname: \"$value\"," >> ./env-config.js +done < .env +echo "}" >> ./env-config.js \ No newline at end of file diff --git a/index.html b/index.html index 9298427..163197c 100644 --- a/index.html +++ b/index.html @@ -10,7 +10,7 @@
- +