Files
mareike/docker/endeavour/deploy.sh
T
th.guentherandClaude Opus 5.5 c4ca101594 endeavour: .env-Rechte, Socket-Prüfung und HTTPS-Proxy korrigiert
- deploy.sh setzt die .env auf root:mareike-docker 0640 und prüft DB_SOCKET/Socket vor dem Build
- optionale shared/deploy.conf für server-spezifische Einstellungen (z. B. MAREIKE_DB_SOCKET_DIR)
- nginx: absolute_redirect off, damit keine http://-Redirects entstehen
- Anleitung: Proxy per mod_rewrite nur unter HTTPS, keine KeyHelp-Weiterleitung, lv auf der Hauptdomain

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-26 14:30:42 +02:00

117 lines
3.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
#
# Deployment von mareike auf endeavour (KeyHelp-Server), siehe docs/implement-endeavour.md.
#
# Liegt auf dem Server als KOPIE unter /opt/mareike/bin/deploy.sh – nicht direkt aus src/ ausführen,
# weil der git-Checkout sonst das laufende Skript austauscht.
#
# Aufruf (als root):
# deploy.sh [REF] Tag, Branch oder Commit ausrollen (Default: main)
# deploy.sh artisan … php artisan im laufenden app-Container
# deploy.sh compose … docker compose mit der endeavour-Konfiguration (z. B. "compose logs -f")
set -euo pipefail
MAREIKE_BASE="${MAREIKE_BASE:-/opt/mareike}"
# Server-spezifische Einstellungen, z. B. MAREIKE_DB_SOCKET_DIR=/var/lib/mysql
if [[ -f "$MAREIKE_BASE/shared/deploy.conf" ]]; then
# shellcheck source=/dev/null
source "$MAREIKE_BASE/shared/deploy.conf"
fi
MAREIKE_USER="${MAREIKE_USER:-mareike-docker}"
SRC="$MAREIKE_BASE/src"
export MAREIKE_ENV_FILE="$MAREIKE_BASE/shared/.env"
export MAREIKE_STORAGE="$MAREIKE_BASE/storage"
export MAREIKE_HTTP_PORT="${MAREIKE_HTTP_PORT:-8080}"
export MAREIKE_DB_SOCKET_DIR="${MAREIKE_DB_SOCKET_DIR:-/run/mysqld}"
MAREIKE_UID="$(id -u "$MAREIKE_USER")"
MAREIKE_GID="$(id -g "$MAREIKE_USER")"
export MAREIKE_UID MAREIKE_GID
compose() {
docker compose -f "$SRC/docker/endeavour/compose.yaml" "$@"
}
case "${1:-}" in
artisan)
shift
compose exec app php artisan "$@"
exit
;;
compose)
shift
compose "$@"
exit
;;
esac
REF="${1:-main}"
if [[ ! -f "$MAREIKE_ENV_FILE" ]]; then
echo "Fehlt: $MAREIKE_ENV_FILE (Vorlage: docker/endeavour/env.production.example)" >&2
exit 1
fi
# Der Container läuft als $MAREIKE_USER und muss die eingebundene .env lesen können.
# Ist sie unlesbar, ignoriert Laravel sie still und fällt z. B. auf SQLite zurück.
chown "root:$MAREIKE_GID" "$MAREIKE_ENV_FILE"
chmod 0640 "$MAREIKE_ENV_FILE"
# Der Container erreicht die KeyHelp-MariaDB nur über den Socket im eingebundenen Verzeichnis /run/mysqld.
DB_SOCKET="$( (grep -E '^DB_SOCKET=' "$MAREIKE_ENV_FILE" || true) | tail -n 1 | cut -d= -f2- | tr -d "\"' \r")"
if [[ -z "$DB_SOCKET" ]]; then
echo "DB_SOCKET fehlt in $MAREIKE_ENV_FILE (erwartet: DB_SOCKET=/run/mysqld/mysqld.sock)." >&2
exit 1
fi
if [[ "$(dirname "$DB_SOCKET")" != "/run/mysqld" ]]; then
echo "DB_SOCKET muss in /run/mysqld/ liegen (Mount-Punkt im Container), ist aber: $DB_SOCKET" >&2
exit 1
fi
if [[ ! -S "$MAREIKE_DB_SOCKET_DIR/$(basename "$DB_SOCKET")" ]]; then
echo "Kein MariaDB-Socket unter $MAREIKE_DB_SOCKET_DIR/$(basename "$DB_SOCKET")." >&2
echo "Pfad prüfen mit: mysql -NBe 'SELECT @@socket;'" >&2
echo "Liegt er woanders, MAREIKE_DB_SOCKET_DIR in $MAREIKE_BASE/shared/deploy.conf setzen." >&2
exit 1
fi
echo "==> Quellcode auf '$REF' bringen"
git -C "$SRC" fetch --tags --prune --force origin
if git -C "$SRC" show-ref --verify --quiet "refs/remotes/origin/$REF"; then
git -C "$SRC" checkout --force -B "$REF" "origin/$REF"
else
git -C "$SRC" checkout --force --detach "$REF"
fi
git -C "$SRC" clean -fd
echo "==> storage/ vorbereiten"
for dir in \
"" \
app app/private app/public \
framework framework/cache framework/cache/data framework/sessions framework/views \
logs temp
do
install -d -m 0775 -o "$MAREIKE_USER" -g "$MAREIKE_GID" "$MAREIKE_STORAGE/$dir"
done
echo "==> Images bauen"
compose build --pull
if ! compose run --rm --no-deps app php -r 'exit(is_readable(".env") ? 0 : 1);'; then
echo ".env ist im Container nicht lesbar – Besitzer/Rechte von $MAREIKE_ENV_FILE prüfen." >&2
exit 1
fi
echo "==> Datenbank migrieren"
compose run --rm --no-deps app php artisan migrate --force
echo "==> Container starten"
compose up -d --remove-orphans
compose exec -T app php artisan view:clear
docker image prune -f > /dev/null
echo "==> mareike $(cat "$SRC/version") ($(git -C "$SRC" rev-parse --short HEAD)) läuft."