From 4abc199869ecbebd75e5b14efc7bf9bc90af7cfe Mon Sep 17 00:00:00 2001 From: root Date: Sun, 24 May 2026 13:48:56 +0200 Subject: [PATCH 1/5] Add Dockerfile + CI/CD pipeline --- .gitea/workflows/docker-build.yml | 27 ++++++++++++++ Dockerfile | 62 ++++++++++++++++--------------- 2 files changed, 59 insertions(+), 30 deletions(-) create mode 100644 .gitea/workflows/docker-build.yml diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml new file mode 100644 index 0000000..36bbc80 --- /dev/null +++ b/.gitea/workflows/docker-build.yml @@ -0,0 +1,27 @@ +name: Docker Build & Push +on: + push: + branches: [main] + tags: + - 'v*' + +jobs: + build: + runs-on: linux + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Docker Login + run: | + echo "${{ secrets.GITEATOKEN }}" | docker login git.kgessner.de --username keviin --password-stdin + + - name: Build Image + run: | + docker build -t git.kgessner.de/keviin/logmaster:latest . + docker tag git.kgessner.de/keviin/logmaster:latest git.kgessner.de/keviin/logmaster:${GITHUB_SHA::8} + + - name: Push Image + run: | + docker push git.kgessner.de/keviin/logmaster:latest + docker push git.kgessner.de/keviin/logmaster:${GITHUB_SHA::8} diff --git a/Dockerfile b/Dockerfile index 4524fc2..5164151 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,38 +1,40 @@ -FROM node:20-alpine - +# ── Build-Stage: TypeScript kompilieren ─────────────────────────── +FROM node:20-alpine AS builder WORKDIR /app - -# Install compression tools for bz2, xz, zstd support -RUN apk add --no-cache bzip2 xz zstd - -# Copy package files and install deps -COPY package.json package-lock.json* ./ -RUN npm ci --omit=dev 2>/dev/null || npm install --omit=dev - -# Copy TypeScript config and source +COPY package*.json ./ +RUN npm ci --omit=dev && npm ci COPY tsconfig.server.json ./ COPY src/server/ ./src/server/ +RUN npx tsc -p tsconfig.server.json + +# ── Production-Stage: Nur das Nötigste ───────────────────────────── +FROM node:20-alpine +WORKDIR /app + +# Runtime-User (nicht root) +RUN addgroup -S logviewer && adduser -S logviewer -G logviewer + +# Nur production dependencies +COPY package*.json ./ +RUN npm ci --omit=dev && npm cache clean --force + +# Kompilierte Server-Dateien +COPY --from=builder /app/dist-server/ ./dist-server/ + +# Web-UI (statische Assets) COPY src/web/ ./src/web/ -# Install typescript for build, compile, then remove -RUN npm install typescript@5.7.2 && \ - npx tsc -p tsconfig.server.json && \ - npm uninstall typescript - -# Copy sample logs -COPY sample-logs/ ./sample-logs/ - -# Generate sample logs -RUN node sample-logs/generate-logs.js - -# Environment defaults -ENV LOG_SOURCES=/app/sample-logs/app.log,/app/sample-logs/nginx-access.log,/app/sample-logs/syslog,/app/sample-logs/archived.log.gz -ENV LOG_THEME=dark -ENV LOG_REFRESH_INTERVAL=3000 -ENV LOG_TAIL_MODE=true -ENV PORT=8080 -ENV HOST=0.0.0.0 +# Persistenz-Volume +RUN mkdir -p /app/collector-data /app/monitor-data && \ + chown -R logviewer:logviewer /app +# Default-CMD (beide Modi aktiv) EXPOSE 8080 - +ENV HOST=0.0.0.0 PORT=8080 LOG_MODE=both +USER logviewer CMD ["node", "dist-server/server.js"] + +# Mögliche Overrides: +# Collector: -e LOG_MODE=collector -e COLLECTOR_UDP_PORT=5140 +# Viewer: -e LOG_MODE=viewer -p 9090:9090 +# Monitor: -e LOG_MODE=monitor -e MONITOR_RULES='[...]' \ No newline at end of file From 74c28004ef3ef1279d9771c4b53946291c6bcaee Mon Sep 17 00:00:00 2001 From: root Date: Sun, 24 May 2026 13:49:40 +0200 Subject: [PATCH 2/5] Trigger CI with secret available --- .trigger | 1 + 1 file changed, 1 insertion(+) create mode 100644 .trigger diff --git a/.trigger b/.trigger new file mode 100644 index 0000000..0d7ae64 --- /dev/null +++ b/.trigger @@ -0,0 +1 @@ +Sun May 24 13:49:40 CEST 2026 From 42c7548f9972a5e8c1e4c2936e9dbd532c9018ce Mon Sep 17 00:00:00 2001 From: root Date: Sun, 24 May 2026 13:54:58 +0200 Subject: [PATCH 3/5] Optimized Dockerfile: remove Electron, fix registry login --- .gitea/workflows/docker-build.yml | 4 +--- Dockerfile | 19 ++++--------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml index 36bbc80..01bc138 100644 --- a/.gitea/workflows/docker-build.yml +++ b/.gitea/workflows/docker-build.yml @@ -14,14 +14,12 @@ jobs: - name: Docker Login run: | - echo "${{ secrets.GITEATOKEN }}" | docker login git.kgessner.de --username keviin --password-stdin + echo "${{ secrets.GITEATOKEN }}" | docker login git.kgessner.de --username LuiiCode --password-stdin - name: Build Image run: | docker build -t git.kgessner.de/keviin/logmaster:latest . - docker tag git.kgessner.de/keviin/logmaster:latest git.kgessner.de/keviin/logmaster:${GITHUB_SHA::8} - name: Push Image run: | docker push git.kgessner.de/keviin/logmaster:latest - docker push git.kgessner.de/keviin/logmaster:${GITHUB_SHA::8} diff --git a/Dockerfile b/Dockerfile index 5164151..65b27bc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,39 +2,28 @@ FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ -RUN npm ci --omit=dev && npm ci +RUN npm ci COPY tsconfig.server.json ./ COPY src/server/ ./src/server/ RUN npx tsc -p tsconfig.server.json -# ── Production-Stage: Nur das Nötigste ───────────────────────────── +# ── Production-Stage: Minimal, kein Electron ────────────────────── FROM node:20-alpine WORKDIR /app -# Runtime-User (nicht root) RUN addgroup -S logviewer && adduser -S logviewer -G logviewer -# Nur production dependencies COPY package*.json ./ -RUN npm ci --omit=dev && npm cache clean --force +# Installiere OHNE Electron (wird für Server-Mode nicht gebraucht) +RUN npm ci --omit=dev && npm uninstall electron && npm cache clean --force -# Kompilierte Server-Dateien COPY --from=builder /app/dist-server/ ./dist-server/ - -# Web-UI (statische Assets) COPY src/web/ ./src/web/ -# Persistenz-Volume RUN mkdir -p /app/collector-data /app/monitor-data && \ chown -R logviewer:logviewer /app -# Default-CMD (beide Modi aktiv) EXPOSE 8080 ENV HOST=0.0.0.0 PORT=8080 LOG_MODE=both USER logviewer CMD ["node", "dist-server/server.js"] - -# Mögliche Overrides: -# Collector: -e LOG_MODE=collector -e COLLECTOR_UDP_PORT=5140 -# Viewer: -e LOG_MODE=viewer -p 9090:9090 -# Monitor: -e LOG_MODE=monitor -e MONITOR_RULES='[...]' \ No newline at end of file From 9fbb0df99dcf3bb33ca11dcb9b1368664364b39f Mon Sep 17 00:00:00 2001 From: LuiiCode Date: Mon, 25 May 2026 08:56:44 +0000 Subject: [PATCH 4/5] Add CI/CD pipeline for Docker build & push --- .gitea/workflows/docker-build.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml index 01bc138..21017a6 100644 --- a/.gitea/workflows/docker-build.yml +++ b/.gitea/workflows/docker-build.yml @@ -2,8 +2,6 @@ name: Docker Build & Push on: push: branches: [main] - tags: - - 'v*' jobs: build: @@ -12,14 +10,8 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Docker Login + - name: Build & Push to Gitea Registry run: | echo "${{ secrets.GITEATOKEN }}" | docker login git.kgessner.de --username LuiiCode --password-stdin - - - name: Build Image - run: | - docker build -t git.kgessner.de/keviin/logmaster:latest . - - - name: Push Image - run: | - docker push git.kgessner.de/keviin/logmaster:latest + docker build -t git.kgessner.de/Keviin/logmaster:latest . + docker push git.kgessner.de/Keviin/logmaster:latest From 6df1dedbe8ca9558f5643432b61d49cd826e0ed5 Mon Sep 17 00:00:00 2001 From: LuiiCode Date: Mon, 25 May 2026 09:09:34 +0000 Subject: [PATCH 5/5] Fix: lowercase registry names --- .gitea/workflows/docker-build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml index 21017a6..22fb5d2 100644 --- a/.gitea/workflows/docker-build.yml +++ b/.gitea/workflows/docker-build.yml @@ -12,6 +12,6 @@ jobs: - name: Build & Push to Gitea Registry run: | - echo "${{ secrets.GITEATOKEN }}" | docker login git.kgessner.de --username LuiiCode --password-stdin - docker build -t git.kgessner.de/Keviin/logmaster:latest . - docker push git.kgessner.de/Keviin/logmaster:latest + echo "${{ secrets.GITEATOKEN }}" | docker login git.kgessner.de --username luiiCode --password-stdin + docker build -t git.kgessner.de/keviin/logmaster:latest . + docker push git.kgessner.de/keviin/logmaster:latest