# Installation auf Webhosting (Node.js)

So installieren Sie Plazello auf einem Webhosting-Paket mit Node.js-Unterstützung (z. B. Plesk oder cPanel) oder auf einem eigenen Server ohne Docker. Prüfen Sie vorher die [Voraussetzungen](doc:voraussetzungen).

## 1. Datenbank anlegen

Legen Sie im Hosting-Panel eine **leere Datenbank** und einen **Datenbank-Benutzer** mit vollen Rechten darauf an – mit UTF-8 als Zeichenkodierung. Notieren Sie sich:

- Host (oft `localhost` oder eine im Panel angezeigte interne Adresse),
- Port (MariaDB/MySQL meist `3306`, PostgreSQL `5432`),
- Name der Datenbank,
- Benutzer und Passwort.

## 2. Installationspaket hochladen und entpacken

Das Installationspaket enthält mehrere tausend Dateien. Laden Sie deshalb **das Archiv hoch, nicht den entpackten Ordner**, und entpacken Sie es auf dem Server.

- **Mit SSH:** Archiv per `scp` oder SFTP hochladen und mit `unzip` (bzw. `tar -xzf` beim `.tar.gz`-Archiv) entpacken. Benennen Sie den entstandenen Ordner zum Beispiel in `plazello` um.
- **Ohne SSH:** Archiv mit dem Dateimanager des Panels oder per SFTP hochladen und im Dateimanager über **Entpacken** auspacken.

:::warning
Der Anwendungsordner darf **nicht** im öffentlichen Webverzeichnis liegen (z. B. `httpdocs` oder `public_html`). Die Node.js-Funktion des Panels liefert den Shop aus – der Webserver selbst darf keine Dateien aus dem Anwendungsordner direkt ausliefern.
:::

## 3. Node.js-Anwendung im Panel einrichten

Die Bezeichnungen unterscheiden sich je nach Panel: Plesk nennt die Funktion *Node.js*, cPanel *Setup Node.js App*. Tragen Sie Folgendes ein:

| Feld | Wert |
|---|---|
| Node.js-Version | 22.x oder 24.x |
| Anwendungsstamm (Application root) | der Ordner, der die Datei `server.js` enthält |
| Dokumentenstamm (Document root) | der leere Ordner `public` **innerhalb** des Anwendungsordners – nie der Anwendungsordner selbst |
| Anwendungsstartdatei (Startup file) | `server.js` |
| Anwendungsmodus | `production` |
| Umgebungsvariablen | keine nötig – der Web-Installer fragt die Datenbank ab |

Speichern Sie und starten Sie die Anwendung (**App neu starten** / **Restart App**).

- Klicken Sie **nicht** auf *npm install* und führen Sie keine Skripte aus – alles ist bereits enthalten.
- Panels, die Node.js-Anwendungen über Phusion Passenger starten (z. B. Plesk und cPanel), erkennt der Shop automatisch.

:::info
**Warum der Dokumentenstamm wichtig ist:** Der Webserver liefert Dateien aus dem Dokumentenstamm direkt aus. Zeigt er auf den Anwendungsordner, könnten Konfigurationsdateien oder der Datenordner abrufbar sein. Deshalb liegt im Paket der leere Ordner `public`, der genau dafür gedacht ist.
:::

## 4. Web-Installer aufrufen

Öffnen Sie die Adresse Ihres Shops im Browser. Beim ersten Start erscheint der Web-Installer. Er benötigt den **Installations-Code**, den Sie in der Datei `data/setup-token.txt` im Anwendungsordner finden (Dateimanager des Panels) – er steht außerdem im Protokoll der Anwendung. Wie es weitergeht, lesen Sie unter [Der Web-Installer](doc:web-installer).

Klappt der Start nicht, zeigt die Seite direkt im Browser an, woran es liegt (etwa ein falsches Datenbank-Passwort oder eine zu alte Node.js-Version), samt der letzten Protokollzeilen. Beheben Sie die Ursache, starten Sie die App im Panel neu und laden Sie die Seite erneut. Weitere Hinweise finden Sie unter [Fehlerbehebung](doc:fehlerbehebung).

## Eigener Server ohne Panel

Auf einem eigenen Server starten Sie den Shop im Anwendungsordner mit:

```
node server.js
```

Der Shop lauscht standardmäßig auf Port 3000 (änderbar mit der Umgebungsvariable `PORT`). Richten Sie ihn als dauerhaft laufenden Dienst ein, zum Beispiel mit systemd:

```
[Unit]
Description=Plazello
After=network.target

[Service]
WorkingDirectory=/opt/plazello
ExecStart=/usr/bin/node server.js
Restart=always
User=plazello

[Install]
WantedBy=multi-user.target
```

Davor gehört ein Reverse Proxy mit HTTPS, der die Anfragen an den Port weiterleitet – mit Caddy genügt zum Beispiel:

```
shop.example.com {
  reverse_proxy localhost:3000
}
```

Bei nginx achten Sie darauf, den `Host`-Header sowie `X-Forwarded-Proto` weiterzugeben, damit der Shop seine eigene Adresse und HTTPS korrekt erkennt.

## Optional: Konfiguration über `.env`

Eine Konfigurationsdatei ist nicht nötig. Wer die Einstellungen lieber vorgibt (etwa bei automatisierten Installationen), kopiert die mitgelieferte Datei `.env.example` nach `.env` und setzt dort zum Beispiel `DATABASE_URL` (beginnend mit `mariadb://`, `mysql://` oder `postgres://`), `PUBLIC_URL` oder `PORT`. Werte aus `.env` und aus Umgebungsvariablen haben Vorrang vor den Einstellungen im Admin und werden dort schreibgeschützt angezeigt.
