openpaw-memory-server

Installation auf dem Webspace

Diese Anleitung beschreibt, wie das fertige Projekt später auf einem klassischen PHP-Webspace installiert werden kann. Sie richtet sich an Anwender, die mit Webspace, FTP/SFTP, Datenbanken und PHP-Grundbegriffen vertraut sind, aber keine Serveradministration machen möchten.

Es wird nichts automatisch hochgeladen. Zugangsdaten, Tokens, Domains und konkrete Webspace-Pfade gehören nicht ins Repository.

Zielbild

Nach der Installation gibt es:

Release-Paket

Für die Installation ist der Ordner release/ gedacht. Er enthält alle Dateien, die ein Endanwender für den Webspace braucht:

Beim Upload sollte der Inhalt von release/ verwendet werden, nicht der ganze Entwicklungsordner.

Vor einem Upload sollte das Paket aus dem aktuellen Projektstand neu erstellt werden:

scripts/build-release.sh

Voraussetzungen

Vor dem Upload prüfen oder im Webspace-Kundenbereich nachsehen:

Optional, aber nützlich:

Lokale Vorbereitung

  1. Projektordner prüfen.

    Wichtige Ordner:

    • release/public/: öffentlich erreichbare Dateien
    • release/private/: Konfiguration, Runtime-Dateien, Backups
    • release/sql/: Datenbankschema
    • release/docs/: Dokumentation
  2. Tokens erzeugen.

    Für die API:

    openssl rand -hex 32
    

    Für Backups nur dann, wenn Backups aktiviert werden:

    openssl rand -hex 32
    
  3. Passwort-Hash für den Website-Login erzeugen.

    php -r 'echo password_hash("REPLACE_WITH_PASSWORD", PASSWORD_DEFAULT), PHP_EOL;'
    

    Das echte Passwort steht danach nicht in der Config. In die Config kommt nur der erzeugte Hash.

  4. Config-Datei erstellen.

    release/private/config.example.php als release/private/config.php kopieren und ausfüllen:

    • auth_token: API-Token
    • site.username: Login-Name
    • site.password_hash: Passwort-Hash
    • db.host: Datenbankhost
    • db.name: Datenbankname
    • db.user: Datenbankbenutzer
    • db.password: Datenbankpasswort
    • backup.enabled: erst nach erfolgreichem Grundtest aktivieren
    • backup.token: eigener Backup-Token, wenn Backups aktiviert werden

    Wichtig: private/config.php nicht committen.

Datenbank einrichten

  1. Im Webspace-Kundenbereich eine MariaDB-Datenbank anlegen.
  2. Datenbankname, Benutzer, Passwort und Host notieren.
  3. Entweder SQL-Datei release/sql/schema.mariadb.sql in die Datenbank importieren oder das Setup-Skript ausführen:

    php release/tools/init-db.php
    

Das Schema legt die Tabelle memories an. Diese enthält unter anderem:

Dateien hochladen

Empfohlene Variante:

  1. Den Inhalt des Projektordners auf den Webspace hochladen.
  2. Den Webroot der Website auf den Ordner public/ im hochgeladenen Release-Paket zeigen lassen.
  3. Prüfen, dass private/, sql/, tools/ und docs/ nicht öffentlich erreichbar sind.

Falls der Webroot nicht auf public/ zeigen kann:

  1. Release-Paket so hochladen, dass public/index.php als Einstieg erreichbar ist.
  2. Sicherstellen, dass private/ nicht abrufbar ist.
  3. Die vorhandene private/.htaccess schützt zusätzlich, ersetzt aber keine sorgfältige Prüfung.

Nicht hochladen oder nicht öffentlich erreichbar machen:

Erste Prüfung im Browser

Nach dem Upload:

  1. Startseite öffnen: /
  2. Login öffnen: /login
  3. Mit dem konfigurierten Benutzer anmelden.
  4. Prüfen, ob /chat nach Login erreichbar ist.
  5. Logout testen.

Wenn die Startseite funktioniert, aber Login nicht:

API testen

Die API liegt unter /api.

Health-Check:

export BASE_URL='<base-url>'
export API_BASE_URL="${BASE_URL}/api"
export OPENPAW_MEMORY_TOKEN='<token>'

curl -fsS \
  -H "Authorization: Bearer ${OPENPAW_MEMORY_TOKEN}" \
  "${API_BASE_URL}/health"

Erwartung:

{"ok":true,"service":"openpaw-memory","version":"0.2.0","database":"mariadb"}

Wenn der Health-Check 401 liefert:

Wenn der Health-Check 500 liefert:

Memory-Test

Eine Test-Erinnerung speichern:

curl -fsS \
  -H "Authorization: Bearer ${OPENPAW_MEMORY_TOKEN}" \
  -H 'Content-Type: application/json' \
  -d '{"text":"Installations-Test","tags":["test"],"kind":"note","scope":"system","source":"manual"}' \
  "${API_BASE_URL}/memories"

Danach auflisten:

curl -fsS \
  -H "Authorization: Bearer ${OPENPAW_MEMORY_TOKEN}" \
  "${API_BASE_URL}/memories?limit=5"

Backups aktivieren

Backups erst aktivieren, wenn Website und API funktionieren.

In private/config.php:

'backup' => [
    'enabled' => true,
    'token' => 'replace-with-separate-backup-token',
    'dir' => __DIR__ . '/backups',
],

Wichtig:

Backup manuell auslösen:

export OPENPAW_MEMORY_BACKUP_TOKEN='<backup-token>'

curl -fsS \
  -X POST \
  -H "Authorization: Bearer ${OPENPAW_MEMORY_TOKEN}" \
  -H "X-Backup-Token: ${OPENPAW_MEMORY_BACKUP_TOKEN}" \
  "${API_BASE_URL}/backups"

Backups auflisten:

curl -fsS \
  -H "Authorization: Bearer ${OPENPAW_MEMORY_TOKEN}" \
  -H "X-Backup-Token: ${OPENPAW_MEMORY_BACKUP_TOKEN}" \
  "${API_BASE_URL}/backups"

Spätere Datenbank-Updates

Wenn es später neue SQL-Updates gibt, liegen sie als .sql-Dateien in release/sql/migrations/. Danach dieses Skript ausführen:

php release/tools/update-db.php

Das Skript merkt sich angewendete Updates in der Tabelle schema_migrations.

Sicherheit prüfen

Vor produktiver Nutzung:

Typische Fehler

404 bei /api/health:

401 bei API-Requests:

500 bei API-Requests:

Login schlägt immer fehl:

Nach der Installation

Wenn die Tests erfolgreich sind:

  1. API-Token in OpenPaw/Paw eintragen.
  2. API_BASE_URL mit /api verwenden.
  3. Nur notwendige Clients freischalten.
  4. Backup-Strategie festlegen.
  5. Erst danach den späteren Chat ausbauen.