From ae2f292fd5a1e5049958f8331c0f0d614764fd0d Mon Sep 17 00:00:00 2001 From: jbeckmann Date: Sun, 16 Aug 2026 11:18:16 +0200 Subject: [PATCH] =?UTF-8?q?[jbe]=20deploy=20script=20&=20.env=20template?= =?UTF-8?q?=20mit=20Superuser-Cred=20f=C3=BCr=20automatische=20DB-Anlage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 4 ++++ deploy.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100755 deploy.sh diff --git a/.env b/.env index cd8cc8b..16a24dd 100644 --- a/.env +++ b/.env @@ -4,6 +4,10 @@ DB_USERNAME=immich DB_PASSWORD=Gv4f_Gqhro_QrnM8v4hevdsPISbGDuXF DB_PORT=5432 +# PostgreSQL Superuser (für automatische DB-Anlage im deploy.sh) +PG_SUPERUSER=postgres +PG_SUPERPASS=iEoQsgDS5hLYQcTmG + REDIS_HOSTNAME=redis REDIS_PORT=6379 REDIS_DATABASE=0 diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..97268e8 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,49 @@ +#!/bin/bash +set -euo pipefail + +# Lade DB-Verbindungswerte aus .env +source .env + +echo "[1/4] Sicherstellen, dass .env mit echten Werten existiert..." +test -f .env || { echo "Fehler: .env fehlt!"; exit 1; } + +PG_SU_USER="${PG_SUPERUSER:-postgres}" +PG_SU_PASS="${PG_SUPERPASS:-}" +DB_HOST="${DB_HOSTNAME}" +DB_PORT="${DB_PORT:-5432}" +APP_DB="${DB_DATABASE}" +APP_USER="${DB_USERNAME}" + +if [ -z "$PG_SU_PASS" ]; then + echo "Fehler: PG_SUPERUSER und/oder PG_SUPERPASS müssen in .env gesetzt sein." + exit 1 +fi + +echo "[2/4] PostgreSQL DB '${APP_DB}' prüfen/anlegen..." +export PGPASSWORD="${PG_SU_PASS}" +if ! psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${PG_SU_USER}" -d postgres -tAc "SELECT 1 FROM pg_database WHERE datname = '${APP_DB}'" | grep -q 1; then + echo " Database wird angelegt..." + # Alte Backends trennen + psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${PG_SU_USER}" -d postgres -c \ + "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '${APP_DB}';" || true + sleep 2 + psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${PG_SU_USER}" -d postgres -c \ + "DROP DATABASE IF EXISTS ${APP_DB};" || true + sleep 2 + psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${PG_SU_USER}" -d postgres -c \ + "CREATE DATABASE ${APP_DB} OWNER ${APP_USER};" +else + echo " Database existiert bereits." +fi + +echo "[3/4] Extensions sicherstellen..." +export PGPASSWORD="${DB_PASSWORD}" +psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${APP_USER}" -d "${APP_DB}" -c "CREATE EXTENSION IF NOT EXISTS vector;" +psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${APP_USER}" -d "${APP_DB}" -c "CREATE EXTENSION IF NOT EXISTS cube CASCADE;" + +echo "[4/4] Upload-Verzeichnis erstellen und Stack starten..." +mkdir -p /mnt/docker/immich/upload +docker compose up -d --remove-orphans + +echo "" +echo "Done. Logs prüfen mit: docker compose logs -f immich-server"