From 60ebd0ed16e2b2564a48ea918d0b1f42f58a84ca Mon Sep 17 00:00:00 2001 From: boban Date: Sun, 26 Apr 2026 11:01:57 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20mailwolt:migrate-env-reverb=20Command=20?= =?UTF-8?q?+=20Update=20f=C3=BChrt=20Migration=20immer=20aus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- app/Console/Commands/MigrateEnvReverb.php | 76 +++++++++++++++++++++++ scripts/update.sh | 14 ++++- 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 app/Console/Commands/MigrateEnvReverb.php diff --git a/app/Console/Commands/MigrateEnvReverb.php b/app/Console/Commands/MigrateEnvReverb.php new file mode 100644 index 0000000..9997976 --- /dev/null +++ b/app/Console/Commands/MigrateEnvReverb.php @@ -0,0 +1,76 @@ +warn('.env nicht gefunden.'); + return self::SUCCESS; + } + + $content = file_get_contents($env); + + // APP_HOST ermitteln – Fallback auf APP_URL + $appHost = $this->extractVar($content, 'APP_HOST'); + if (!$appHost) { + $appUrl = $this->extractVar($content, 'APP_URL'); + $appHost = parse_url($appUrl ?: '', PHP_URL_HOST) ?: ''; + } + + if (!$appHost || preg_match('/^\d+\.\d+\.\d+\.\d+$/', $appHost)) { + $this->warn('Kein gültiger Hostname gefunden – Migration übersprungen.'); + return self::SUCCESS; + } + + $viteHost = $this->extractVar($content, 'VITE_REVERB_HOST'); + if ($viteHost === '${REVERB_HOST}' || $viteHost === $appHost) { + $this->info('REVERB-Werte bereits korrekt.'); + return self::SUCCESS; + } + + $scheme = file_exists("/etc/letsencrypt/live/{$appHost}/fullchain.pem") ? 'https' : 'http'; + $port = $scheme === 'https' ? '443' : '80'; + + $fixes = [ + 'REVERB_HOST' => '${APP_HOST}', + 'REVERB_PORT' => $port, + 'REVERB_SCHEME' => $scheme, + 'REVERB_PATH' => '/ws', + 'REVERB_SERVER_HOST' => '127.0.0.1', + 'REVERB_SERVER_PORT' => '8080', + 'REVERB_SERVER_SCHEME' => 'http', + 'REVERB_SERVER_PATH' => '', + 'VITE_REVERB_HOST' => '${REVERB_HOST}', + 'VITE_REVERB_PORT' => '${REVERB_PORT}', + 'VITE_REVERB_SCHEME' => '${REVERB_SCHEME}', + 'VITE_REVERB_PATH' => '${REVERB_PATH}', + ]; + + foreach ($fixes as $key => $val) { + if (preg_match("/^{$key}=/m", $content)) { + $content = preg_replace("/^{$key}=.*/m", "{$key}={$val}", $content); + } else { + $content .= "\n{$key}={$val}"; + } + } + + file_put_contents($env, $content); + $this->info("REVERB .env migriert für Host: {$appHost}"); + return self::SUCCESS; + } + + private function extractVar(string $content, string $key): string + { + preg_match("/^{$key}=(.*)$/m", $content, $m); + return trim($m[1] ?? '', " \t\"'"); + } +} diff --git a/scripts/update.sh b/scripts/update.sh index 01df89d..7db39c7 100644 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -284,12 +284,16 @@ echo " Sbin-Scripts : $([[ $NEED_SBIN_UPDATE -eq 1 ]] && echo JA || echo nein # System-Scripts aus scripts/ sofort nach dem Pull einspielen (kein Downtime nötig) # ensure_system() am Ende des Scripts übernimmt das vollständig. +# .env immer migrieren (unabhängig vom Update-Pfad) +as_app "cd ${APP_DIR} && php artisan mailwolt:migrate-env-reverb" 2>/dev/null || migrate_env_reverb + # Wenn gar nichts relevantes geändert wurde → sauber beenden if [[ $NEED_COMPOSER -eq 0 && $NEED_MIGRATIONS -eq 0 && $NEED_FRONTEND -eq 0 && $NEED_PHP_RESTART -eq 0 ]]; then echo "[✓] Code-Stand aktualisiert, aber keine Build/Runtime-Änderungen – keine Neustarts nötig." NEW_VER="$(get_version)" write_build_info "$NEW_VER" "$NEW_REV" echo "[i] Version: ${OLD_VER} → ${NEW_VER}" + ensure_system exit 0 fi @@ -356,10 +360,18 @@ migrate_env_reverb() { local env_file="${APP_DIR}/.env" [ -f "${env_file}" ] || return 0 - # APP_HOST auslesen (authoritative Domain) + # APP_HOST auslesen — Fallback auf APP_URL wenn nicht gesetzt local app_host app_host=$(grep '^APP_HOST=' "${env_file}" | head -1 | cut -d= -f2- | tr -d '"' | tr -d "'") + if [ -z "${app_host}" ]; then + local app_url + app_url=$(grep '^APP_URL=' "${env_file}" | head -1 | cut -d= -f2- | tr -d '"' | tr -d "'") + # https://domain.at → domain.at oder http://1.2.3.4 → 1.2.3.4 + app_host=$(echo "${app_url}" | sed 's|https\?://||' | cut -d/ -f1 | cut -d: -f1) + fi [ -z "${app_host}" ] && return 0 + # IP-Adresse → nichts tun (kein sinnvoller Hostname für TLS) + echo "${app_host}" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' && return 0 # Nur migrieren wenn VITE_REVERB_HOST nicht auf app_host zeigt local current_vite_host