Fix: mailwolt:migrate-env-reverb Command + Update führt Migration immer aus
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main v1.1.294
parent
093b5a9eea
commit
60ebd0ed16
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class MigrateEnvReverb extends Command
|
||||
{
|
||||
protected $signature = 'mailwolt:migrate-env-reverb';
|
||||
protected $description = 'Migriert veraltete REVERB_* .env-Werte auf Domain-Basis';
|
||||
|
||||
public function handle(): int
|
||||
{
|
||||
$env = base_path('.env');
|
||||
if (!file_exists($env)) {
|
||||
$this->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\"'");
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue