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.
Nach der Installation gibt es:
//login/chat/apiFür die Installation ist der Ordner release/ gedacht. Er enthält alle Dateien,
die ein Endanwender für den Webspace braucht:
release/public/: öffentlicher Webrootrelease/private/: Beispielconfig und privater Bereichrelease/sql/: Datenbankschemarelease/tools/: Skripte für Datenbankeinrichtung und spätere Updatesrelease/docs/: DokumentationBeim 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
Vor dem Upload prüfen oder im Webspace-Kundenbereich nachsehen:
pdo_mysql ist aktiv..htaccess und Rewrite-Regeln werden unterstützt.public/ zeigen.public/ zeigen kann, muss private/ sicher vor
Webzugriff geschützt sein.Optional, aber nützlich:
Projektordner prüfen.
Wichtige Ordner:
release/public/: öffentlich erreichbare Dateienrelease/private/: Konfiguration, Runtime-Dateien, Backupsrelease/sql/: Datenbankschemarelease/docs/: DokumentationTokens erzeugen.
Für die API:
openssl rand -hex 32
Für Backups nur dann, wenn Backups aktiviert werden:
openssl rand -hex 32
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.
Config-Datei erstellen.
release/private/config.example.php als release/private/config.php
kopieren und ausfüllen:
auth_token: API-Tokensite.username: Login-Namesite.password_hash: Passwort-Hashdb.host: Datenbankhostdb.name: Datenbanknamedb.user: Datenbankbenutzerdb.password: Datenbankpasswortbackup.enabled: erst nach erfolgreichem Grundtest aktivierenbackup.token: eigener Backup-Token, wenn Backups aktiviert werdenWichtig: private/config.php nicht committen.
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:
metadatakindimportancescopesourcesource_refobserved_atEmpfohlene Variante:
public/ im hochgeladenen
Release-Paket zeigen lassen.private/, sql/, tools/ und docs/ nicht öffentlich
erreichbar sind.Falls der Webroot nicht auf public/ zeigen kann:
public/index.php als Einstieg erreichbar
ist.private/ nicht abrufbar ist.private/.htaccess schützt zusätzlich, ersetzt aber keine
sorgfältige Prüfung.Nicht hochladen oder nicht öffentlich erreichbar machen:
Nach dem Upload:
//login/chat nach Login erreichbar ist.Wenn die Startseite funktioniert, aber Login nicht:
site.enabled prüfen.site.username prüfen.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:
Authorization: Bearer ... prüfen.Wenn der Health-Check 500 liefert:
private/config.php prüfen.pdo_mysql aktiv ist.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 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.token muss gesetzt sein.backup.token darf nicht dem normalen API-Token entsprechen.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"
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.
Vor produktiver Nutzung:
private/config.php ist nicht öffentlich abrufbar.private/backups/ ist nicht öffentlich abrufbar.private/config.php.backup.enabled bleibt aus, bis Backups wirklich gebraucht werden.404 bei /api/health:
.htaccess wird eventuell nicht ausgewertet.401 bei API-Requests:
500 bei API-Requests:
private/config.php fehlt oder enthält Platzhalter.memories wurde nicht angelegt.pdo_mysql fehlt.Login schlägt immer fehl:
site.enabled ist nicht aktiv.Wenn die Tests erfolgreich sind:
API_BASE_URL mit /api verwenden.