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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user