From 8e10453210123ee5a6036d0d8264c1e22a372062 Mon Sep 17 00:00:00 2001 From: mboehmlaender Date: Mon, 26 Jan 2026 19:46:13 +0000 Subject: [PATCH] Update --- backend/Dockerfile | 16 ++++++++++++++ copy_from.sh | 51 +++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 30 ++++++++++++++++++++++++++ frontend/Dockerfile | 16 ++++++++++++++ frontend/nginx.conf | 20 ++++++++++++++++++ 5 files changed, 133 insertions(+) create mode 100644 backend/Dockerfile create mode 100755 copy_from.sh create mode 100644 docker-compose.yml create mode 100644 frontend/Dockerfile create mode 100644 frontend/nginx.conf diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..35532ac --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,16 @@ +FROM node:20-slim + +WORKDIR /app + +COPY package*.json ./ +RUN npm install --omit=dev + +COPY src ./src +COPY data ./data + +ENV NODE_ENV=production +ENV PORT=5001 + +EXPOSE 5001 + +CMD ["node", "src/server.js"] diff --git a/copy_from.sh b/copy_from.sh new file mode 100755 index 0000000..e71d62f --- /dev/null +++ b/copy_from.sh @@ -0,0 +1,51 @@ +#!/bin/bash +set -e + +docker_release() { + local ghcr_username="" + local repo_name="" + local version_tag + + while true; do + read -rp "Bitte Versionsnummer für das Docker-Image eingeben (z.B. v0.1): " version_tag + if [[ -n "$version_tag" ]]; then + break + fi + echo "Versionsnummer darf nicht leer sein." + done + + local origin_url + origin_url=$(git config --get remote.origin.url || true) + if [[ -n "$origin_url" ]]; then + local cleaned="${origin_url%.git}" + if [[ "$cleaned" =~ github.com[:/]+([^/]+)/([^/]+)$ ]]; then + ghcr_username="${BASH_REMATCH[1]}" + repo_name="${BASH_REMATCH[2]}" + fi + fi + + ghcr_username="$(echo "${ghcr_username:-mboehmlaender}" | tr '[:upper:]' '[:lower:]')" + repo_name="$(echo "${repo_name:-vault}" | tr '[:upper:]' '[:lower:]')" + + if [[ -z "$CR_PAT" ]]; then + echo "CR_PAT (GitHub Token) nicht gesetzt! Bitte export CR_PAT=" + return 1 + fi + + echo "$CR_PAT" | docker login ghcr.io -u "$ghcr_username" --password-stdin + + docker build -t "ghcr.io/$ghcr_username/${repo_name}-backend:$version_tag" -f backend/Dockerfile backend + docker tag "ghcr.io/$ghcr_username/${repo_name}-backend:$version_tag" "ghcr.io/$ghcr_username/${repo_name}-backend:latest" + + docker build -t "ghcr.io/$ghcr_username/${repo_name}-frontend:$version_tag" -f frontend/Dockerfile frontend + docker tag "ghcr.io/$ghcr_username/${repo_name}-frontend:$version_tag" "ghcr.io/$ghcr_username/${repo_name}-frontend:latest" + + docker push "ghcr.io/$ghcr_username/${repo_name}-backend:$version_tag" + docker push "ghcr.io/$ghcr_username/${repo_name}-backend:latest" + docker push "ghcr.io/$ghcr_username/${repo_name}-frontend:$version_tag" + docker push "ghcr.io/$ghcr_username/${repo_name}-frontend:latest" + + echo "Docker-Release $version_tag (backend/frontend) erfolgreich gebaut und zu GHCR gepusht!" +} + +docker_release diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..8c0f28a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,30 @@ +services: + backend: + image: ghcr.io/mboehmlaender/vault-backend:latest + container_name: vault-backend + restart: unless-stopped + ports: + - "5001:5001" + environment: + - PORT=5001 + volumes: + - ./backend/data:/app/data + networks: + - vault_net + + frontend: + image: ghcr.io/mboehmlaender/vault-frontend:latest + container_name: vault-frontend + restart: unless-stopped + depends_on: + - backend + networks: + vault_net: + dmz: + ipv4_address: 10.10.12.28 + +networks: + vault_net: + driver: bridge + dmz: + external: true diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..d7eb45d --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,16 @@ +FROM node:20-slim AS build + +WORKDIR /app +COPY package*.json ./ +RUN npm install + +COPY . . +RUN npm run build + +FROM nginx:alpine +COPY --from=build /app/dist /usr/share/nginx/html +COPY nginx.conf /etc/nginx/conf.d/default.conf + +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/frontend/nginx.conf b/frontend/nginx.conf new file mode 100644 index 0000000..70780c7 --- /dev/null +++ b/frontend/nginx.conf @@ -0,0 +1,20 @@ +server { + listen 80; + server_name _; + + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri /index.html; + } + + location /api/ { + proxy_pass http://backend:5001; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +}