4 Installation
Ralf Warmuth edited this page 2026-01-09 22:36:30 +01:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Installation & Setup

Voraussetzungen

System-Anforderungen

  • Node.js: Version 18+ (für Build-System)
  • PHP: Version 8.0+ (mit strict types Support)
  • SQLite: PHP-Extension
  • sendmail/postfix: Für E-Mail-Versand (optional, für Produktion)

Entwicklungsumgebung

  • Git
  • Code-Editor (VS Code empfohlen)
  • Terminal/Shell

Lokale Installation

1. Repository klonen

git clone ssh://forgejo@home.schumbi.de/ralf/zgb_www.git
cd zgb_www

2. Dependencies installieren

npm install

Installiert:

  • markdown-it: Markdown-Parser
  • cross-env: Cross-Platform Environment-Variablen

3. Build ausführen

npm run build

Erstellt:

  • public/ Verzeichnis mit generierten HTML-Dateien
  • public/backend/ mit Backend-Code
  • public/data/ für SQLite-Datenbank

4. Lokaler PHP-Server (für Entwicklung)

cd public
php -S localhost:8000

Oder mit XAMPP/WAMP:

  • public/ als Document Root konfigurieren

Konfiguration

Content-Konfiguration

Bearbeite content/globals.json:

{
  "event": {
    "date": "2025-11-08",
    "venue": "Sporthalle Buchenberg",
    "time": "1013 Uhr"
  },
  "site": {
    "title": "Doberaner Zwergen-Börse",
    "navigation": [...]
  }
}

Backend-Konfiguration

Die Backend-Konfiguration erfolgt über den Admin-Bereich:

  1. Auf /backend/web/admin_login.php gehen
  2. Einloggen (Admin-Passwort ist in der DB-Config als Hash unter adminPasswordHash gespeichert)
  3. Falls das Passwort (noch) nicht bekannt ist: Passwort-Reset im Login nutzen (sendet ein neues Passwort an operatorEmail)
  4. Konfiguration anpassen:
    • Anmeldezeitraum
    • Nummernbereich
    • Event-Datum
    • Organisator-E-Mail

Wichtig: Passwort nach erstem Zugriff ändern und operatorEmail korrekt setzen (sonst gehen Reset-Mails ggf. ins Leere).

Datenbank

Die SQLite-Datenbank wird automatisch erstellt beim ersten Zugriff:

  • Pfad: public/data/zwergenboerse.db
  • Verzeichnis muss beschreibbar sein (chmod 755/775)

Entwicklung

Content bearbeiten

  1. Markdown/HTML-Dateien in content/ bearbeiten
  2. npm run build ausführen
  3. Änderungen in public/ prüfen

Backend entwickeln

  1. Code in zgb-backend/ bearbeiten
  2. npm run build ausführen (kopiert nach public/backend/)
  3. PHP-Dateien direkt in public/backend/web/ testen

Build-Prozess verstehen

Siehe scripts/build.mjs:

  • Markdown → HTML Konvertierung
  • Layout-Generierung
  • Asset-Kopierung
  • Backend-Kopierung

Troubleshooting

Build-Fehler

Problem: npm run build schlägt fehl

  • Lösung: Node.js-Version prüfen (18+)
  • Dependencies neu installieren: rm -rf node_modules && npm install

PHP-Fehler

Problem: SQLite-Fehler

  • Lösung: PHP SQLite-Extension prüfen: php -m | grep sqlite

Problem: Datenbank-Verzeichnis nicht beschreibbar

  • Lösung: Berechtigungen setzen: chmod 755 public/data

E-Mail-Versand

Problem: E-Mails werden nicht versendet

  • Lösung:
    • sendmail/postfix auf Server installieren
    • PHP mail() Funktion testen
    • Error-Logs prüfen

Pfad-Probleme

Problem: Backend findet Dateien nicht

  • Lösung:
    • Relative Pfade prüfen (von public/backend/web/ aus)
    • __DIR__ verwenden statt relative Pfade

Produktions-Setup

Server-Anforderungen

  • PHP 8.0+
  • SQLite-Extension
  • sendmail/postfix
  • Web-Server (Apache/Nginx)
  • Schreibrechte für public/data/

Deployment-Schritte

  1. Repository auf Server klonen
  2. npm install ausführen
  3. npm run build ausführen
  4. public/ als Document Root konfigurieren
  5. Berechtigungen setzen:
    chmod 755 public/data
    chown www-data:www-data public/data
    
  6. Admin-Passwort ändern
  7. Konfiguration im Admin-Bereich anpassen

.htaccess (Apache)

Optional für zusätzliche Sicherheit:

# Backend-Verzeichnis schützen
<Directory "backend">
    Options -Indexes
    AllowOverride None
</Directory>

# Datenbank-Dateien schützen
<FilesMatch "\.(db|sqlite3?)$">
    Require all denied
</FilesMatch>

Siehe auch: Deployment