# Einen Außenposten bereitstellen

Führen Sie den Außenposten auf Ihrem Server oder NAS aus, um Benachrichtigungen von ausgewählten E-Mail-Ordnern zu erhalten. Sie benötigen Docker und Docker Compose v2 für die empfohlene Compose-Installation.

**Verfügbarkeit des Container-Images**: Verfügbare Versionen sind in [GitHub-Veröffentlichungen](https://github.com/mingzaily/mailwake/releases) und [GHCR](https://github.com/mingzaily/mailwake/pkgs/container/mailwake) aufgeführt.

## 1. Wählen Sie eine Installationsmethode

**Docker Compose wird empfohlen**: Installation, Updates und Backups verwenden dieselbe Konfiguration. Das Container-Image ist `ghcr.io/mingzaily/mailwake:latest` für Linux amd64 / arm64. `latest` folgt der stabilen Version. Um eine Version anzuheften, ersetzen Sie `latest` durch ein veröffentlichtes Tag aus „Releases“.

In Ihrem Serverterminal:

```
mkdir -p ~/mailwake
cd ~/mailwake
```

Erstellen Sie in diesem Verzeichnis `compose.yaml` mit dieser vollständigen Konfiguration:

```
services:
  core:
    image: ghcr.io/mingzaily/mailwake:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:8080"
    environment:
      MAILWAKE_LISTEN: "0.0.0.0:8080"
      MAILWAKE_DATA_DIR: "/data"
      MAILWAKE_RELAY_URL: "${MAILWAKE_RELAY_URL:-}"
    volumes:
      - core-data:/data
    read_only: true
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    stop_grace_period: 30s
volumes:
  core-data:
```

Laden Sie das Image herunter und starten Sie den Außenposten:

```
docker compose pull core
docker compose up -d
docker compose ps
docker compose logs --tail=50 core
```

**Überprüfen Sie das Ergebnis**: `core` zeigt `Up` / `running` an und die Protokolle enthalten den Ersteinrichtungscode. Halten Sie das Terminal für den nächsten Schritt bereit. Führen Sie zukünftige Compose-Befehle von `~/mailwake` aus.

Das Docker-Volume `core-data` speichert `/data`. Bei diesem Verzeichnisnamen lautet der Standard-Docker-Name `mailwake_core-data`. Durch die Neuerstellung des Containers bleibt dieser erhalten; `docker compose down -v` löscht das Volume und seinen Inhalt.

### Docker-Run

Wählen Sie diese äquivalente Installation, wenn Sie einen einzelnen Befehl bevorzugen. Verwenden Sie eine Installationsmethode für Ihre Instanz.

```
docker volume create mailwake-data
docker run -d \
  --name mailwake \
  --restart unless-stopped \
  --stop-timeout 30 \
  --read-only \
  --security-opt no-new-privileges:true \
  --cap-drop ALL \
  -p 127.0.0.1:8080:8080 \
  -v mailwake-data:/data \
  ghcr.io/mingzaily/mailwake:latest
docker logs --tail=50 mailwake
```

Diese Installation verwendet das Volume `mailwake-data`. Die folgenden Verwaltungsbefehle verwenden Compose; Die Alternative finden Sie im [Anweisungen zur Sicherung von Docker Run](backup.md#sichern-sie-eine-docker-run-installation).

## 2. Öffnen Sie die Konsole

**Auf dem Docker-Host**: Öffnen Sie <http://127.0.0.1:8080> .

**Auf einem Remote-Server oder NAS**: Führen Sie diesen Befehl auf Ihrem eigenen Computer aus und ersetzen Sie dabei `user@server` durch den SSH-Benutzer und die SSH-Adresse Ihres Servers:

```
ssh -L 18080:127.0.0.1:8080 user@server
```

Halten Sie die Verbindung offen und rufen Sie <http://127.0.0.1:18080> auf Ihrem Computer auf. Dies reicht aus, um die Ersteinrichtung abzuschließen. Konfigurieren Sie unten HTTPS, wenn Sie dauerhaften Zugriff über eine Domäne wünschen.

**Überprüfen Sie das Ergebnis**: Der Setup-Bildschirm Mailwake wird geöffnet. Geben Sie den Setup-Code aus den Protokollen ein und erstellen Sie ein Administratorkennwort mit mindestens 12 Zeichen. Durch einen Neustart des Außenpostens vor dem Setup wird ein neuer Setup-Code generiert.

Fahren Sie mit [Ihre erste Benachrichtigung](first-notification.md) fort, um ein Postfach und einen Benachrichtigungskanal zu verbinden.

## 3. Konfigurieren Sie HTTPS

Richten Sie Ihre Domain auf den Server und konfigurieren Sie Ihren Reverse-Proxy für die Weiterleitung an `http://127.0.0.1:8080`. Wenn Caddy auf demselben Host installiert ist, fügen Sie Ihre Domäne zu `Caddyfile` hinzu:

```
mail.example.org {
    reverse_proxy 127.0.0.1:8080
}
```

Überprüfen Sie DNS und erlauben Sie die eingehenden Ports 80/443. Anschließend validieren und neu laden:

```
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
```

Öffnen Sie `https://mail.example.org`, bestätigen Sie, dass das Zertifikat gültig ist, und prüfen Sie, ob Sie sich anmelden und ein Postfach öffnen können. Informationen zur Installation von Caddy finden Sie im [offizielle Caddy-Installationsanleitung](https://caddyserver.com/docs/install). Geben Sie in einem Proxy-Panel wie Nginx Proxy Manager die Domäne und die Weiterleitungsadresse ein und fordern Sie im Panel ein Zertifikat an.

Für einen Proxy in einem anderen Container verbinden Sie ihn mit dem Docker-Netzwerk des Außenpostens und leiten Sie ihn an `http://core:8080` weiter; sein `127.0.0.1` bezieht sich auf sich selbst. Behalten Sie den ursprünglichen Host bei und stellen Sie `X-Forwarded-For` ein. Der Außenposten akzeptiert Proxy-Informationen von Loopback- und privaten Netzwerken; Stellen Sie Port 8080 nur dem Proxy und vertrauenswürdigen lokalen Clients zur Verfügung.

## 4. Aktualisieren Sie den Außenposten

Führen Sie einen [Sicherung](backup.md) aus und führen Sie ihn dann im Compose-Verzeichnis aus:

```
docker compose pull core
docker compose up -d
docker compose ps
docker compose logs --tail=50 core
```

Für eine angeheftete Version ändern Sie zunächst das Image-Tag in `compose.yaml`. Öffnen Sie die Konsole, überprüfen Sie die Postfachüberwachung und senden Sie eine neue E-Mail, um die Zustellung zu überprüfen. Bewahren Sie die Sicherung vor dem Update auf. Um ein Rollback durchzuführen, stellen Sie mithilfe des Wiederherstellungs-Tutorials sowohl die Daten als auch das entsprechende Image wieder her.

## 5. Fehlerbehebung

### Das Image lässt sich nicht herunterladen

Prüfen Sie, ob GHCR die angeforderte Version enthält. `manifest unknown` bedeutet normalerweise ein fehlendes Tag. Überprüfen Sie die Image-Adresse und die Paketsichtbarkeit auf `denied`-Fehler oder die Serververbindung zum GHCR auf Zeitüberschreitungen.

### Die Konsole lässt sich nicht öffnen

`127.0.0.1` bezieht sich auf den Computer, den Sie verwenden. Verwenden Sie für eine Remote-Installation den SSH-Tunnel oder eine HTTPS-Domäne. Überprüfen Sie zuerst `docker compose ps` und `docker compose logs --tail=50 core`. Wenn 8080 belegt ist, ändern Sie die Zuordnung auf `127.0.0.1:18080:8080` und verwenden Sie Host-Port 18080 im Browser und Reverse-Proxy.

### Setzen Sie ein Administratorkennwort zurück

Führen Sie im Compose-Verzeichnis aus und geben Sie das neue Passwort an der Terminal-Eingabeaufforderung ein:

```
docker compose stop core
docker compose run --rm -it core admin reset-password
docker compose start core
```

Der Wiederherstellungsbefehl erwirbt die Datenverzeichnissperre. Stoppen Sie daher zuerst den Außenposten. Durch das Zurücksetzen des Passworts werden Browsersitzungen widerrufen und API-Tokens, Postfächer und die Warteschlange bleiben erhalten.

### Verbinden Sie die offizielle App und Pro

Die Free-Webkonsole und die Bark-/Pushover-/Webhook-Bereitstellung funktionieren unabhängig voneinander. Für die offizielle App folgen Sie [App-Integration](connect-app.md) für HTTPS und Kopplung.

Quellcode-Builds und lokale Entwicklung werden im [Entwicklungsleitfaden](https://github.com/mingzaily/mailwake/blob/main/docs/development.md) behandelt.

## Quell-Builds und Prozesseinstellungen

Befolgen Sie für Entwicklungs-Builds die Anweisungen [Quell-Repository README](https://github.com/mingzaily/mailwake#run-from-source) und [Build-Anleitung für Mitwirkende](https://github.com/mingzaily/mailwake/blob/main/CONTRIBUTING.md).

`MAILWAKE_LISTEN` ist außerhalb von Docker standardmäßig `127.0.0.1:8080`. Der Container verwendet `0.0.0.0:8080` . `MAILWAKE_DATA_DIR` ist standardmäßig `data`; Der Container verwendet `/data` . `MAILWAKE_RELAY_URL` ist standardmäßig `https://notify.mailwake.oritx.com` . Behalten Sie das vollständige Datenverzeichnis, einschließlich `secret.key`, bei Neustarts und Upgrades.

## Ändern Sie die Push-Übermittlungsumgebung

Produktion und Sandbox verwenden separate Paarungsidentitäten. Um Umgebungen absichtlich zu ändern, stoppen Sie den Außenposten und führen Sie den Reset für sein vorhandenes Datenverzeichnis und die gespeicherte Adresse des vorherigen Push-Zustelldienstes durch:

```sh
docker compose stop core
docker compose run --rm -it core admin reset-native-push
```

Geben Sie `reset-native-push` ein, wenn Sie dazu aufgefordert werden. Der Befehl widerruft Kopplungen beim alten Push-Zustelldienst. Wenn dieser Dienst nicht erreichbar ist, behalten Sie die alte Konfiguration bei und versuchen Sie es erneut, wenn er erreichbar ist. Nachdem bestätigt wurde, dass es keine ungelösten Ziele gibt, legen Sie den neuen `MAILWAKE_RELAY_URL` fest und erstellen Sie den Außenposten mit `docker compose up -d` und [erneut koppeln](connect-app.md) neu. Der Befehl bewahrt die Signaturidentität des Außenpostens und den Verlauf des gewöhnlichen Kanals.
