From 8a6160817b8971bca844c4d3aa2fe73952ed5409 Mon Sep 17 00:00:00 2001 From: DonVoo Date: Sun, 5 Jul 2026 20:07:00 +0200 Subject: [PATCH] Add GoldPi Email-Forwarder test container deploy --- .../01-install-Email-Forwarder-Pod.sh | 51 +++++++++++++++++++ .../02-reconf-Email-Forwarder-Pod.sh | 4 ++ .../03-import-Email-Forwarder-Pod.sh | 15 ++++++ .../04-export-Email-Forwarder-Pod.sh | 26 ++++++++++ .../05-uninstall-Email-Forwarder-Pod.sh | 10 ++++ .../email-forwarder-pod/Containerfile | 12 +++++ .../email-forwarder-pod/config.env | 10 ++++ .../email-forwarder-pod/config.json.example | 15 ++++++ 8 files changed, 143 insertions(+) create mode 100644 deploy/goldpi-test-container/email-forwarder-pod/01-install-Email-Forwarder-Pod.sh create mode 100644 deploy/goldpi-test-container/email-forwarder-pod/02-reconf-Email-Forwarder-Pod.sh create mode 100644 deploy/goldpi-test-container/email-forwarder-pod/03-import-Email-Forwarder-Pod.sh create mode 100644 deploy/goldpi-test-container/email-forwarder-pod/04-export-Email-Forwarder-Pod.sh create mode 100644 deploy/goldpi-test-container/email-forwarder-pod/05-uninstall-Email-Forwarder-Pod.sh create mode 100644 deploy/goldpi-test-container/email-forwarder-pod/Containerfile create mode 100644 deploy/goldpi-test-container/email-forwarder-pod/config.env create mode 100644 deploy/goldpi-test-container/email-forwarder-pod/config.json.example diff --git a/deploy/goldpi-test-container/email-forwarder-pod/01-install-Email-Forwarder-Pod.sh b/deploy/goldpi-test-container/email-forwarder-pod/01-install-Email-Forwarder-Pod.sh new file mode 100644 index 0000000..61fa959 --- /dev/null +++ b/deploy/goldpi-test-container/email-forwarder-pod/01-install-Email-Forwarder-Pod.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "$0")" +set -a +source ./config.env +set +a + +mkdir -p "$APP_DIR/data" "$APP_DIR/backup" "$APP_DIR/build" "$APP_DIR/export" + +if [ ! -d "$BUILD_SRC" ]; then + echo "BUILD_SRC missing: $BUILD_SRC" >&2 + exit 2 +fi + +podman exec -w /work/Email-Forwarder "$DEVOP_CONTAINER" bash -lc ' +set -euo pipefail +mkdir -p frontend-js/dist +if [ ! -f frontend-js/dist/htmx.min.js ]; then + curl -fsSL https://unpkg.com/htmx.org@1.9.12/dist/htmx.min.js -o frontend-js/dist/htmx.min.js +fi +go mod tidy +CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags "-s -w" -o emailforwarder . +' + +install -m0755 "$BUILD_SRC/emailforwarder" "$APP_DIR/build/emailforwarder" +if [ ! -f "$APP_DIR/config.json" ]; then + install -m0644 "$APP_DIR/config.json.example" "$APP_DIR/config.json" +fi +install -m0644 "$APP_DIR/config.json" "$APP_DIR/build/config.json" +install -m0644 "$APP_DIR/Containerfile" "$APP_DIR/build/Containerfile" + +podman build -t "$IMAGE_NAME" -f "$APP_DIR/build/Containerfile" "$APP_DIR/build" + +podman rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true +podman pod rm -f "$POD_NAME" >/dev/null 2>&1 || true +podman pod create --name "$POD_NAME" --network "$NETWORK" -p "$HOST_BIND:$APP_PORT:$APP_PORT" >/dev/null +podman run -d --name "$CONTAINER_NAME" --pod "$POD_NAME" \ + --restart=unless-stopped \ + -v "$APP_DIR/data:/app/data:Z" \ + -v "$APP_DIR/backup:/app/backup:Z" \ + "$IMAGE_NAME" >/dev/null + +for _ in {1..20}; do + if curl -fsS "http://$HOST_BIND:$APP_PORT/" >/dev/null 2>&1; then + echo "Email-Forwarder reachable at http://$HOST_BIND:$APP_PORT/" + exit 0 + fi + sleep 1 +done + +curl -fsS "http://$HOST_BIND:$APP_PORT/" >/dev/null diff --git a/deploy/goldpi-test-container/email-forwarder-pod/02-reconf-Email-Forwarder-Pod.sh b/deploy/goldpi-test-container/email-forwarder-pod/02-reconf-Email-Forwarder-Pod.sh new file mode 100644 index 0000000..272705f --- /dev/null +++ b/deploy/goldpi-test-container/email-forwarder-pod/02-reconf-Email-Forwarder-Pod.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "$0")" +./01-install-Email-Forwarder-Pod.sh diff --git a/deploy/goldpi-test-container/email-forwarder-pod/03-import-Email-Forwarder-Pod.sh b/deploy/goldpi-test-container/email-forwarder-pod/03-import-Email-Forwarder-Pod.sh new file mode 100644 index 0000000..f24c442 --- /dev/null +++ b/deploy/goldpi-test-container/email-forwarder-pod/03-import-Email-Forwarder-Pod.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "$0")" +set -a +source ./config.env +set +a + +BUNDLE="${1:-}" +if [ -z "$BUNDLE" ] || [ ! -f "$BUNDLE" ]; then + echo "Usage: $0 " >&2 + exit 2 +fi + +tar -xzf "$BUNDLE" -C "$APP_DIR" +echo "Imported $BUNDLE into $APP_DIR" diff --git a/deploy/goldpi-test-container/email-forwarder-pod/04-export-Email-Forwarder-Pod.sh b/deploy/goldpi-test-container/email-forwarder-pod/04-export-Email-Forwarder-Pod.sh new file mode 100644 index 0000000..98d3e00 --- /dev/null +++ b/deploy/goldpi-test-container/email-forwarder-pod/04-export-Email-Forwarder-Pod.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "$0")" +set -a +source ./config.env +set +a + +mkdir -p "$APP_DIR/export" +TS="$(date +%Y%m%d-%H%M%S)" +OUT="$APP_DIR/export/email-forwarder-pod-$TS.tar.gz" + +tar -czf "$OUT" \ + config.env \ + config.json \ + Containerfile \ + 01-install-Email-Forwarder-Pod.sh \ + 02-reconf-Email-Forwarder-Pod.sh \ + 03-import-Email-Forwarder-Pod.sh \ + 04-export-Email-Forwarder-Pod.sh \ + 05-uninstall-Email-Forwarder-Pod.sh \ + data \ + backup + +sha256sum "$OUT" > "$OUT.sha256" +echo "$OUT" +cat "$OUT.sha256" diff --git a/deploy/goldpi-test-container/email-forwarder-pod/05-uninstall-Email-Forwarder-Pod.sh b/deploy/goldpi-test-container/email-forwarder-pod/05-uninstall-Email-Forwarder-Pod.sh new file mode 100644 index 0000000..58d7b8c --- /dev/null +++ b/deploy/goldpi-test-container/email-forwarder-pod/05-uninstall-Email-Forwarder-Pod.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "$0")" +set -a +source ./config.env +set +a + +podman rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true +podman pod rm -f "$POD_NAME" >/dev/null 2>&1 || true +echo "Runtime removed. Persistent data kept at $APP_DIR/data and $APP_DIR/backup" diff --git a/deploy/goldpi-test-container/email-forwarder-pod/Containerfile b/deploy/goldpi-test-container/email-forwarder-pod/Containerfile new file mode 100644 index 0000000..742063e --- /dev/null +++ b/deploy/goldpi-test-container/email-forwarder-pod/Containerfile @@ -0,0 +1,12 @@ +FROM docker.io/library/debian:stable-slim +RUN apt-get update \ + && apt-get install -y --no-install-recommends ca-certificates \ + && rm -rf /var/lib/apt/lists/* +WORKDIR /app +COPY emailforwarder /app/emailforwarder +COPY config.json /app/config.json +RUN chmod 0755 /app/emailforwarder \ + && mkdir -p /app/data /app/backup +EXPOSE 8087 +VOLUME ["/app/data", "/app/backup"] +ENTRYPOINT ["/app/emailforwarder"] diff --git a/deploy/goldpi-test-container/email-forwarder-pod/config.env b/deploy/goldpi-test-container/email-forwarder-pod/config.env new file mode 100644 index 0000000..165aca7 --- /dev/null +++ b/deploy/goldpi-test-container/email-forwarder-pod/config.env @@ -0,0 +1,10 @@ +SERVICE_NAME=Email-Forwarder +POD_NAME=email-forwarder-pod +CONTAINER_NAME=email-forwarder +IMAGE_NAME=localhost/email-forwarder:test +NETWORK=base-net +HOST_BIND=127.0.0.1 +APP_PORT=8087 +BUILD_SRC=/mnt/DATA/Build/Email-Forwarder +DEVOP_CONTAINER=DevOp-Pod-build +APP_DIR=/mnt/DATA/Containers/Test-Container/Email-Forwarder-Pod diff --git a/deploy/goldpi-test-container/email-forwarder-pod/config.json.example b/deploy/goldpi-test-container/email-forwarder-pod/config.json.example new file mode 100644 index 0000000..cf4b382 --- /dev/null +++ b/deploy/goldpi-test-container/email-forwarder-pod/config.json.example @@ -0,0 +1,15 @@ +{ + "bind": "0.0.0.0", + "port": "8087", + "admin_user": "vAdmin@golddata.eu", + "admin_pass": "CHANGE-ME-lokal", + "db_path": "/app/data/emailforwarder.db", + "mbox_root": "/app/backup", + "forward_smtp": { + "host": "", + "port": 587, + "user": "", + "pass": "", + "from": "" + } +}