feat(setup): Systemcheck und Upload-Paket fuer klassisches Webhosting

Auf Shared Hosting gibt es keine Kommandozeile - ohne Anzeige laesst
sich dort nicht feststellen, ob etwa gd fehlt, die PHP-Version zu alt
ist oder data/ nicht beschreibbar ist. Der Setup-Assistent prueft das
jetzt und listet es auf; im Dashboard meldet sich die Pruefung spaeter
nur noch, wenn etwas nicht stimmt. Fehlende Pflichtbausteine sind
Fehler, fehlende Kuer (intl, imagick, cURL) nur Hinweise mit Angabe,
was dadurch entfaellt.

build-release.sh erzeugt das Upload-Paket: Abhaengigkeiten ohne
Entwicklungspakete, ohne Tests und Docker-Dateien. Dabei faellt eine
16 MB grosse Schriftart aus endroid/qr-code weg, die ausschliesslich
fuer Beschriftungen unter dem QR-Code gebraucht wird - die erzeugt
diese Anwendung nicht. Das Paket schrumpft damit von 18 MB auf 1 MB.
Sollte spaeter doch eine Beschriftung dazukommen, erkennt das Skript
das und behaelt die Datei.

Die Variante ohne eigenen Webroot (alles liegt im Domainverzeichnis,
die .htaccess im Stammverzeichnis leitet nach public/ um) war bisher
gebaut, aber nie erprobt. Sie ist jetzt gegen eine Hoster-Simulation
getestet: Ersteinrichtung, Kurzlinks, Weiterleitung, QR-Codes,
Statistik und die Sperren fuer src/, vendor/, data/ und .env.
This commit is contained in:
2026-08-10 15:32:13 +02:00
parent fa92817a88
commit c65c02cda5
9 changed files with 462 additions and 8 deletions
+71 -5
View File
@@ -82,15 +82,41 @@ Benutzername und Passwort.
Es wird **keine Shell** benötigt. Der `vendor/`-Ordner ist im Release-Paket enthalten.
### Paket vorbereiten
Wenn du das Projekt aus dem Repository nutzt und Composer lokal (oder per Docker) hast:
### Upload-Paket erzeugen
```bash
composer install --no-dev --optimize-autoloader
sh build-release.sh
```
Danach enthält der Ordner alles, was hochgeladen werden muss.
Ohne lokales PHP über das Anwendungs-Image (der schlanke `composer:2` hat kein `gd`
und bricht an der Plattformprüfung ab):
```bash
docker compose build
docker run --rm -v "$PWD:/app" -w /app urlshort-qr-gen:latest sh build-release.sh
```
Ergebnis ist `build/urlshort-qr-gen-release/` – rund **1 MB, 217 Dateien**. Das Skript
installiert die Abhängigkeiten ohne Entwicklungspakete und entfernt eine 16 MB große
Schriftart aus `endroid/qr-code`, die nur für Beschriftungen *unter* dem QR-Code
gebraucht wird (die diese Anwendung nicht erzeugt). Sollte sich das einmal ändern,
merkt das Skript es und behält die Datei.
### Was hochgeladen wird
| | |
|---|---|
| `public/` | Webroot: `index.php`, `.htaccess`, `assets/` |
| `src/` | Anwendungscode |
| `templates/` | Seiten |
| `migrations/` | Datenbankschema |
| `vendor/` | Abhängigkeiten (ohne Entwicklungspakete) |
| `data/` | leer, muss **beschreibbar** sein – hier entstehen Datenbank und Logos |
| `.htaccess` | nur für Variante A2 nötig (siehe unten) |
| `.env` | selbst anlegen, Vorlage ist `.env.example` |
**Nicht** hochgeladen werden `tests/`, `docker/`, `Dockerfile`, `docker-compose.yml`,
`phpunit.xml`, `build-release.sh` und `.git/` – das Release-Paket enthält sie erst gar nicht.
### Variante A1 – Webroot kann auf `public/` gezeigt werden (empfohlen)
@@ -131,6 +157,46 @@ Zusätzlich liegt in `data/` eine eigene `.htaccess` als zweite Absicherung.
> liefern. Falls nicht, unterstützt der Hoster `AllowOverride` nicht ausreichend –
> dann bitte Variante A1 verwenden.
### Beispiel: Hetzner Webhosting (konsoleH)
Stellvertretend für Anbieter mit eigenem Panel – bei IONOS, Strato, All-Inkl oder Netcup
heißen die Menüpunkte anders, die Schritte sind dieselben.
1. **PHP-Version prüfen/setzen** – in konsoleH unter *Einstellungen → PHP-Version*
mindestens **PHP 8.2** wählen. Steht dort noch 7.x oder 8.0, läuft die Anwendung nicht.
2. **Verzeichnis wählen.** Der Webspace hat pro Domain ein Verzeichnis unterhalb von
`/public_html`. Lässt sich das Zielverzeichnis der Domain frei setzen, nimm
**Variante A1** und zeige damit auf `…/kurzlinks/public`. Geht das nicht, nimm
**Variante A2** und lade alles direkt in das Domainverzeichnis.
3. **Hochladen** per SFTP (Zugangsdaten stehen in konsoleH unter *Benutzer*). Den
**Inhalt** von `build/urlshort-qr-gen-release/` übertragen, nicht den Ordner selbst.
4. **Schreibrechte** für `data/` setzen – im FTP-Programm Rechte `755` (bei manchen
Tarifen `775`). Ohne das legt die Anwendung keine Datenbank an.
5. **`.env` anlegen:** `.env.example` in `.env` umbenennen und mindestens eintragen:
```dotenv
APP_BASE_URL=https://kurz.deine-domain.de
SESSION_SECURE=true
```
6. **HTTPS aktivieren** – Hetzner stellt kostenlose Let’s-Encrypt-Zertifikate aus
(*Einstellungen → SSL*). Vorher `APP_BASE_URL` auf `http://` lassen, sonst zeigen
Kurzlinks auf eine Adresse, die der Browser nicht öffnet.
7. **Domain aufrufen.** Der Setup-Assistent prüft zuerst die Systemvoraussetzungen und
zeigt an, falls etwas fehlt. Er verlangt außerdem das Einmal-Token aus
`data/setup-token.txt` – diese Datei per FTP öffnen, den 16-stelligen Wert eintragen.
Danach wird sie automatisch gelöscht.
**Datenbank:** SQLite genügt und ist voreingestellt – die bei Hetzner enthaltenen
MySQL-Datenbanken werden nicht gebraucht. Wer sie trotzdem nutzen will, trägt in der
`.env` `DB_DRIVER=mysql` samt Zugangsdaten aus konsoleH ein.
**Was bei Hetzner erfahrungsgemäß passt:** `mod_rewrite`, `gd`, `mbstring`, `fileinfo`
und `pdo_sqlite` sind vorhanden. `imagick` ist es meist nicht – dann erscheinen
SVG-Logos nur im SVG-Download, PNG-Logos funktionieren normal. Der Setup-Assistent
zeigt den tatsächlichen Stand deines Tarifs an; verlass dich darauf statt auf diese
Aufzählung.
### Wichtige Hinweise zu Shared Hosting
- **`mod_rewrite` muss aktiv sein.** Ohne Rewrites funktionieren die Kurzlinks nicht.