Git-Deploy per Tag, Betriebsüberwachung und Release-Seeder für den Livegang
- dev/betrieb/deploy.sh: Deploy nur per Tag, mit --seed (Seeder im Wartungsmodus) und --initial (Vorschau/Live einmalig an Ort und Stelle auf Git umstellen) - dev/betrieb/vorschau-auffrischen.sh: Live-DB und Live-Medien in die Vorschau (Generalprobe) - InteriorReleaseSeeder: alle Inhaltsschritte des Relaunchs in einem Lauf, idempotent; Displays, Playlists und Mediathek bleiben unberührt - DisplayInteriorBrandingSeeder überschreibt keinen inzwischen gepflegten Claim mehr - Monitoring: GlitchTip (Server + Browser), /health mit Token, Scheduler-Herzschlag, Alarme per Mail und ntfy, Version in about und /health - public/build versioniert; .gitignore: macOS-Muster Icon traf resources/views/flux/icon/ - Runbook: dev/betrieb/README.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
fcb10be120
commit
b5ed756d67
98 changed files with 3947 additions and 82 deletions
|
|
@ -1,5 +1,8 @@
|
|||
<?php
|
||||
|
||||
use App\Console\Commands\MonitoringHeartbeat;
|
||||
use App\Support\OperationalAlert;
|
||||
use Illuminate\Console\Scheduling\Event;
|
||||
use Illuminate\Foundation\Inspiring;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\Schedule;
|
||||
|
|
@ -8,4 +11,25 @@ Artisan::command('inspire', function () {
|
|||
$this->comment(Inspiring::quote());
|
||||
})->purpose('Display an inspiring quote');
|
||||
|
||||
Schedule::command('cabinet:reset-overrides')->dailyAt('00:00');
|
||||
// Betriebs-Alert, wenn ein geplanter Task fehlschlägt – an JEDEN Task hängen
|
||||
$alertOnFailure = fn (string $task) => function (Event $event) use ($task): void {
|
||||
OperationalAlert::send("Geplanter Task fehlgeschlagen: {$task}", ['exit_code' => $event->exitCode]);
|
||||
};
|
||||
|
||||
Schedule::command('cabinet:reset-overrides')
|
||||
->dailyAt('00:00')
|
||||
->withoutOverlapping(10)
|
||||
->onFailure($alertOnFailure('cabinet:reset-overrides'));
|
||||
|
||||
// Herzschlag: fällt der Scheduler aus (Cron weg, Server hängt), greift kein
|
||||
// onFailure mehr – dann meldet /health den fehlenden Herzschlag
|
||||
Schedule::command(MonitoringHeartbeat::class)
|
||||
->everyMinute()
|
||||
->withoutOverlapping(2)
|
||||
->onFailure($alertOnFailure('monitoring:heartbeat'));
|
||||
|
||||
// Fehlgeschlagene Jobs nach 30 Tagen entfernen
|
||||
Schedule::command('queue:prune-failed', ['--hours=720'])
|
||||
->dailyAt('03:55')
|
||||
->withoutOverlapping(30)
|
||||
->onFailure($alertOnFailure('queue:prune-failed'));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue