Erste Schritte
Aktualisieren
Entpacke ein Archiv nie über eine laufende Installation. Drei Dinge gehen dabei schief, und keines meldet sich:
| Falle | Was passiert |
|---|---|
| Entfernte Dateien bleiben liegen | Entpacken fügt hinzu und überschreibt, es löscht nicht. Klassen und Templates, die es nicht mehr gibt, bleiben stehen — und entfallene config/-Dateien werden weiterhin geladen |
storage/ und bootstrap/cache/ werden angefasst |
Beide liegen im Archiv, weil eine NEUE Installation sie braucht. Über eine bestehende gelegt, setzen sie deren Zugriffsrechte zurück — als root entpackt auch den Eigentümer |
| Gecachte Konfiguration überlebt | bootstrap/cache/config.php stammt von der alten Fassung und ignoriert alles Geänderte |
Der kürzeste Weg
Derselbe Aufruf wie bei der Installation — das Skript erkennt den Zustand des Ziels selbst:
curl -fLO https://gitlab.com/mankeldor/fileshare/-/raw/main/fileshare-setup.sh
sh fileshare-setup.sh /pfad/zu/deiner/installation --dry-run
sh fileshare-setup.sh /pfad/zu/deiner/installation
Es holt das neueste Release, prüft die Prüfsumme und übergibt an das update.sh aus dem
neu geladenen Paket — nicht an eine ältere Fassung, die auf dem Server herumliegt.
Aus einem bereits entpackten Paket
tar -xzf fileshare-v3.3.1.tar.gz
cd fileshare-v3.3.1
sh update.sh /pfad/zu/deiner/installation --dry-run
sh update.sh /pfad/zu/deiner/installation
Was es tut, in dieser Reihenfolge:
- Prüft, dass das Ziel wirklich eine Fileshare-Installation ist (
artisan,composer.json,app/Support/Installer.php,.env). Gleich wird mit--deleteabgeglichen; ein vertippter Pfad würde sonst ein fremdes Verzeichnis ausräumen. - Sichert Datenbank,
.envund Programmstand nach../fileshare-backup-<zeitstempel>/. Scheitert die Sicherung, bricht es ab, bevor etwas angefasst wurde.--skip-backupüberstimmt das. - Schaltet den Wartungsmodus ein — noch mit der alten Fassung, deren
vendor/vollständig ist. - Ersetzt die Dateien und entfernt die, die es nicht mehr gibt. Unangetastet bleiben
.env,storage/,public/storage,bootstrap/cache/undvendor/. composer install,fileshare:check,migrate --force, Caches,queue:restart, Wartungsmodus aus.
Scheitert etwas nach Schritt 4, bleibt die Installation im Wartungsmodus — ein halb ausgetauschter Stand darf nicht ausgeliefert werden. Das Skript schreibt hin, wie du zurückkommst.
Zwischen Schritt 4 und composer install steht neuer Code auf altem vendor/. Jeder
Artisan-Aufruf in diesem Fenster kann mit „class not found" abbrechen — deshalb die feste
Reihenfolge.
Von Hand
mysqldump --single-transaction --quick -u <user> -p <db> | gzip > db-$(date +%F).sql.gz
cp .env ~/env-$(date +%F).bak
cd /pfad/zu/deiner/installation
php artisan down --retry=60
rsync --archive --delete \
--exclude='/.env' --exclude='/storage/' \
--exclude='/public/storage' --exclude='/bootstrap/cache/' --exclude='/vendor/' \
~/fileshare-v3.3.1/ ./
composer install --no-dev --optimize-autoloader
php artisan fileshare:check
php artisan migrate --force
php artisan config:cache && php artisan route:cache && php artisan view:cache
php artisan queue:restart
php artisan up
Migrationen laufen vorwärts. Es gibt keinen Weg zurück außer der Sicherung aus der ersten Zeile.
Aus der Oberfläche heraus
Einstellungen → Systemdaten zeigt oben die Fassung dieser Installation und, sofern die
Prüfung eingeschaltet ist, ob es eine neuere gibt. Dann erscheint ein Knopf Paket
bereitstellen: Er lädt das Release-Archiv, hält es gegen die veröffentlichte
SHA256-Prüfsumme und entpackt es nach storage/app/private/updates/.
Eingespielt wird dabei nichts. Danach zeigt die Seite den einen Befehl, der noch fehlt — mit dem Pfad dieser Installation schon eingesetzt:
sh storage/app/private/updates/3.3.1/update.sh /pfad/zu/dieser/installation
Mit --dry-run angehängt zeigt er vorher, was sich ändern würde.
Damit der Webserver den Programmcode überschreiben könnte, den er selbst ausführt, müssten
app/, config/ und vendor/ für ihn beschreibbar sein. Jede Schreiblücke im System wäre
damit ein Weg, eigenen Code auszuführen. Der Code bleibt deshalb unbeschreibbar; die
Oberfläche nimmt den mühsamen Teil ab, der riskante bleibt ein Befehl im Terminal.
Bereitgestellte Pakete räumt fileshare:cleanup ab, sobald sie eingespielt sind — Maßstab
ist die Fassung, nicht das Alter.
Danach
Die .env bleibt unangetastet. Die mitgelieferte .env.example lohnt einen Blick — dort
stehen neue Schlüssel, bevor du sie vermisst:
diff <(grep -oE '^[A-Z0-9_]+' .env | sort -u) \
<(grep -oE '^[A-Z0-9_]+' .env.example | sort -u)
Fehlt ein Schlüssel, gilt der Vorgabewert aus config/.
Quelle dieser Seite:
docs/aktualisieren.md
im Repository. Sie wird beim Bauen daraus erzeugt — Änderungen gehören in die
Markdown-Datei, nicht in diese Seite.