Files
Homelab--Bratonein-Kontroll…/Kapitel 17/Free Rohtext.md

895 lines
33 KiB
Markdown
Raw Blame History

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.

# Kapitel 17 Postiz (Social Media Verwaltung & Automatisierung)
## Einleitung
Im UCC spielt **Social-Media-Management** eine immer größere Rolle besonders für Streamer:innen, Creator und kleine Teams, die Inhalte regelmäßig veröffentlichen, ohne auf kommerzielle Plattform-Tools angewiesen zu sein.
**Postiz** ist dabei die zentrale Schaltstelle: ein selbstgehostetes System, das Beiträge für Plattformen wie **Discord, YouTube, Instagram, TikTok** und viele andere planen, automatisieren und koordinieren kann mit vollständiger Datenhoheit.
In diesem Kapitel baust du eine eigene **Postiz-Instanz** auf Basis eines **Debian-12-LXC** auf.
Du lernst, wie du sie installierst, konfigurierst und über den **Nginx Proxy Manager** sicher in dein UCC integrierst.
Anschließend verbindest du Postiz mit deinen ersten Plattformen in der Free-Variante mit **Discord** und **YouTube**, da diese ohne komplexe API-Freigaben direkt nutzbar sind.
👉 **Screenshot geeignet:** UCC-Übersicht mit markiertem Postiz-Container zwischen n8n und Netdata
> [!NOTE]
> Die Anbindung externer Plattformen ist unterschiedlich stark reglementiert.
> Während **Discord** und **YouTube** relativ offen integriert werden können,
> gelten bei **TikTok**, **Instagram** und allen **Meta-Diensten (Facebook, Threads, WhatsApp)** deutlich strengere Auflagen.
>
> In unserer Praxis mussten wir diesen Prozess vollständig durchlaufen,
> um Postiz mit Meta-Diensten produktiv einsetzen zu können.
> Dazu gehörte unter anderem der **Nachweis einer gewerblichen Tätigkeit**,
> die Einrichtung einer eigenen **Meta-App**, mehrere **manuelle Prüfungen**
> und teils lange Wartezeiten, bis bestimmte API-Bereiche freigegeben wurden.
>
> Auch **TikTok** hat die Entwicklerregistrierung verschärft:
> einfache Konten erhalten keinen direkten Zugriff mehr auf Post- oder Medien-APIs.
>
> Dieses Kapitel konzentriert sich daher bewusst auf Plattformen,
> die **ohne eigene App-Zulassung** sofort funktionieren **Discord** und **YouTube**.
> Erweiterte Integrationen (TikTok, Meta, LinkedIn etc.) werden später im Premium-Bereich behandelt.
Postiz kombiniert eine übersichtliche Weboberfläche mit leistungsstarken Hintergrunddiensten für **Planung, API-Anbindung und Automatisierung**.
So kannst du Beiträge zentral erfassen, zeitlich steuern und später mit Tools wie **n8n** erweitern bis hin zu vollständig automatisierten Veröffentlichungsketten.
👉 **Screenshot geeignet:** Browseransicht mit Postiz-Dashboard (Kalenderansicht, geplanter Discord-Post und YouTube-Upload sichtbar)
---
## Voraussetzungen & Ressourcen
Postiz ist ressourcenschonend, benötigt aber eine stabile Umgebung, um API-Abfragen, Authentifizierungen und Uploads zuverlässig zu verarbeiten.
Da im Hintergrund mehrere Prozesse (Backend, Scheduler, API-Connectoren) laufen, sollte der Container klar definiert dimensioniert werden.
### Container-Ressourcen
* **CPU:** 2 vCPU
Erforderlich, um parallele Aufgaben (z. B. API-Abfragen an Discord und YouTube) ohne Verzögerungen abzuarbeiten.
* **RAM:** 4 GB
Stellt sicher, dass Node.js, Datenbank und Hintergrundprozesse stabil laufen, auch bei mehreren aktiven Konten.
* **Speicherplatz:** 15 GB
Deckt System, Logs, Medien-Cache und temporäre Upload-Dateien ab.
Reicht für den kontinuierlichen Betrieb im Free-Umfang vollständig aus.
* **Netzwerk:** Statische IP-Adresse oder DHCP-Reservierung
Notwendig für stabile Proxy-Integration und zuverlässige API-Callbacks (z. B. YouTube-Webhooks).
* **Betriebssystem:** Ubuntu 24.04 LTS
Stabil, langfristig supportet und optimal für Node.js-basierte Dienste geeignet.
👉 **Screenshot geeignet:** Ressourcenübersicht beim Erstellen des Postiz-LXC (vCPU 2 | RAM 4 GB | Storage 15 GB | Ubuntu 24.04 LTS)
### Technische Voraussetzungen
Vor der Installation sollte das UCC folgende Bedingungen erfüllen:
* **Proxmox VE** ist eingerichtet und aktiv.
Der Container wird wie gewohnt direkt über die Proxmox-Oberfläche erstellt und verwaltet.
* **Nginx Proxy Manager (NPM)** ist funktionsfähig.
Er stellt später die Weboberfläche von Postiz über HTTPS bereit.
* **DNS- oder DynDNS-Eintrag** für `postiz.deinedomain.tld` existiert.
Dieser ist notwendig, um ein gültiges SSL-Zertifikat ausstellen zu können.
* **Internetverbindung** im Container ist aktiv.
Postiz lädt seine Pakete über die offiziellen Node.js- und Postiz-Repositories.
* **SSH-Zugriff** auf den Container ist möglich, zum Beispiel:
```bash
ssh root@<IP-des-Containers>
```
Ersetze `<IP-des-Containers>` durch die tatsächliche Adresse deines Postiz-LXC.
> [!IMPORTANT]
> Der Container sollte auf einem Host mit stabiler Netzwerkanbindung liegen.
> Unterbrechungen während API-Aufrufen können zu fehlerhaften Token-Validierungen oder abgebrochenen Uploads führen.
👉 **Screenshot geeignet:** Proxmox-Interface mit markiertem Postiz-LXC in der Containerliste
---
## Schritt-für-Schritt-Anleitung
### Schritt 1 System vorbereiten und aktualisieren
Starte den frisch erstellten Container und öffne die Konsole direkt in Proxmox oder per SSH.
Führe anschließend ein vollständiges System-Update durch, um alle Pakete auf den neuesten Stand zu bringen:
```bash
apt update && apt upgrade -y
```
Nach Abschluss des Updates den Container neu starten:
```bash
reboot
```
Melde dich nach dem Neustart erneut an:
```bash
ssh root@<IP-des-Containers>
```
> [!NOTE]
> Ein aktuelles System ist Pflicht.
> Postiz benötigt moderne Node.js-Pakete und aktuelle SSL-Bibliotheken.
> Veraltete Basis-Images können zu Installations- oder Zertifikatsfehlern führen.
👉 **Screenshot geeignet:** Proxmox-Konsole mit erfolgreichem Abschluss von `apt upgrade` (keine ausstehenden Pakete)
### Schritt 2 Basis-Pakete installieren
Postiz wird über Docker Compose betrieben.
Damit das System später stabil läuft, installierst du jetzt die notwendigen Pakete für Container-Management und HTTPS-Kommunikation.
```bash
apt install -y ca-certificates curl gnupg lsb-release
```
Im Anschluss fügst du das offizielle Docker-Repository hinzu und installierst die aktuelle Engine + Compose-Komponenten:
```bash
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
Prüfe anschließend, ob Docker korrekt arbeitet:
```bash
docker --version
docker compose version
```
Die Ausgaben sollten etwa so aussehen:
```
Docker version 26.1.x
Docker Compose version v2.29.x
```
> [!NOTE]
> Postiz nutzt offiziell **Docker Compose** als bevorzugte Installationsmethode.
> Manuelle Installationen über `npm` oder System-Pakete werden vom Projekt derzeit nicht mehr gepflegt.
> Diese Vorgehensweise entspricht den aktuellen Empfehlungen aus der offiziellen Dokumentation.
👉 **Screenshot geeignet:** Terminalausgabe mit sichtbarer Docker- und Compose-Version nach erfolgreicher Installation
### Schritt 3 Verzeichnisstruktur und Konfigurationsbasis anlegen
Postiz wird sauber in einem eigenen Systemverzeichnis betrieben.
Dort liegen später sowohl die Docker-Compose-Datei als auch die zugehörige Konfiguration und Daten.
Lege zunächst das Hauptverzeichnis an und wechsle hinein:
```bash
mkdir -p /opt/postiz
cd /opt/postiz
```
Erstelle anschließend die Standardverzeichnisse:
```bash
mkdir -p data redis db
```
Damit sind drei Hauptpfade vorbereitet:
- **data** → App-Daten und Upload-Medien
- **redis** → Cache-Daten für Hintergrundprozesse
- **db** → PostgreSQL-Datenbank
👉 **Screenshot geeignet:** Terminal mit ausgeführtem `ls -l /opt/postiz` (alle drei Unterordner sichtbar)
Jetzt folgt die grundlegende **Konfigurationsdatei `.env`**.
Sie steuert die Ports, Datenbankverbindung und Sicherheitseinstellungen.
Öffne den Editor:
```bash
nano /opt/postiz/.env
```
Füge folgenden Basisinhalt ein:
```
# Basis-Konfiguration
TZ=Europe/Berlin
POSTIZ_PORT=8080
POSTIZ_SECRET=$(openssl rand -hex 32)
# Admin-Benutzer
POSTIZ_ADMIN_EMAIL=admin@localhost
POSTIZ_ADMIN_PASSWORD=changeMe123!
# Datenbank
POSTGRES_DB=postiz
POSTGRES_USER=postiz
POSTGRES_PASSWORD=$(openssl rand -hex 16)
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
# Persistente Pfade
DATA_PATH=/opt/postiz/data
DB_PATH=/opt/postiz/db
REDIS_PATH=/opt/postiz/redis
```
Speichern (STRG + O, Enter) und schließen (STRG + X).
> [!NOTE]
> Diese Datei enthält alle wichtigen Umgebungsvariablen.
> Sie wird von Docker Compose automatisch eingelesen, sobald die Container gestartet werden.
> Achte darauf, dass die Datei nur root- oder Admin-Benutzern zugänglich ist,
> da sie Passwörter und geheime Schlüssel enthält.
👉 **Screenshot geeignet:** geöffnete `.env`-Datei mit markierten Variablen (Ports, Datenbank, Admin-Login)
Im nächsten Schritt wird die eigentliche **`docker-compose.yml`** erstellt.
Sie definiert die drei benötigten Dienste (Postiz, PostgreSQL und Redis) und verbindet sie über ein internes Netzwerk.
Öffne den Editor:
```bash
nano /opt/postiz/docker-compose.yml
```
Füge folgenden Inhalt ein:
```yaml
version: "3.9"
services:
postiz:
image: ghcr.io/postiz/postiz:latest
container_name: postiz
restart: unless-stopped
env_file:
- .env
ports:
- "8080:8080"
volumes:
- ./data:/app/data
depends_on:
- db
- redis
db:
image: postgres:16
container_name: postiz_db
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- ./db:/var/lib/postgresql/data
redis:
image: redis:7
container_name: postiz_redis
restart: unless-stopped
volumes:
- ./redis:/data
```
Speichern (STRG + O, Enter) und schließen (STRG + X).
> [!TIP]
> Diese Struktur folgt den aktuellen Empfehlungen der offiziellen Postiz-Dokumentation.
> Alle Dienste sind voneinander getrennt, nutzen lokale Volumes und starten automatisch neu,
> falls der Container oder der Host neu gestartet wird.
👉 **Screenshot geeignet:** Terminalansicht mit geöffneter `docker-compose.yml` und markierten Diensten (postiz, db, redis)
### Schritt 4 Container starten und Erstinitialisierung prüfen
Mit der vorbereiteten `.env`- und `docker-compose.yml`-Datei kannst du Postiz jetzt starten.
Alle benötigten Dienste (Postiz, PostgreSQL, Redis) werden automatisch im Hintergrund erzeugt.
Starte den Stack mit folgendem Befehl:
```bash
docker compose up -d
```
Der Vorgang lädt zunächst die Images von GitHub Container Registry (Postiz) und Docker Hub (PostgreSQL, Redis)
und startet anschließend alle Container im Hintergrund.
Du kannst den Startvorgang überwachen mit:
```bash
docker compose ps
```
Die Ausgabe sollte alle drei Dienste als **„running“** anzeigen:
```
NAME IMAGE STATUS PORTS
postiz ghcr.io/postiz/postiz:latest Up 2 minutes 0.0.0.0:8080->8080/tcp
postiz_db postgres:16 Up 2 minutes
postiz_redis redis:7 Up 2 minutes
```
👉 **Screenshot geeignet:** Terminalausgabe von `docker compose ps` mit allen drei Containern im Status *Up*
Öffne im Browser anschließend:
```
http://<IP-des-Containers>:8080
```
Wenn die Einrichtung erfolgreich war, sollte die **Postiz-Loginseite** erscheinen.
Hier kannst du dich mit den in der `.env`-Datei definierten Zugangsdaten anmelden:
- Benutzername (E-Mail): `admin@localhost`
- Passwort: `changeMe123!`
Nach dem Login öffnet sich das Dashboard mit einer leeren Kalenderansicht.
Damit ist die Installation abgeschlossen und die Instanz funktionsfähig.
> [!NOTE]
> Wenn die Seite nicht lädt oder der Container sofort stoppt, prüfe mit
> ```bash
> docker compose logs postiz
> ```
> auf Fehlermeldungen. Häufige Ursachen sind Tippfehler in der `.env`-Datei oder
> fehlender Arbeitsspeicher während des ersten Starts.
👉 **Screenshot geeignet:** Browseransicht mit Postiz-Login unter `http://<IP-des-Containers>:8080`
### Schritt 5 Dienst dauerhaft aktivieren und Neustart-Verhalten prüfen
Damit Postiz nach einem Neustart des Containers oder Hosts automatisch wieder zur Verfügung steht,
wird das Verhalten von Docker Compose dauerhaft aktiviert und getestet.
Zuerst prüfen, ob die Container korrekt mit dem Flag **`restart: unless-stopped`** laufen.
Das sollte bereits in der `docker-compose.yml` gesetzt sein.
Zur Kontrolle:
```bash
grep restart /opt/postiz/docker-compose.yml
```
Die Ausgabe sollte dreimal `restart: unless-stopped` enthalten für **postiz**, **db** und **redis**.
Führe jetzt einen kontrollierten Neustart des Containers durch:
```bash
reboot
```
Nach dem Reboot erneut einloggen und prüfen, ob die Dienste automatisch gestartet wurden:
```bash
docker compose ps
```
Alle Container sollten wieder im Status **Up** erscheinen.
Damit ist das automatische Startverhalten bestätigt.
> [!NOTE]
> Docker Compose verwaltet den Neustart unabhängig von systemd.
> Ein zusätzlicher systemd-Service ist nicht erforderlich.
> Das vereinfacht die Wartung und reduziert potenzielle Konflikte zwischen Containern und Hostprozessen.
👉 **Screenshot geeignet:** Terminalausgabe nach `docker compose ps` (alle Container aktiv nach Neustart)
Wenn du Postiz zu einem späteren Zeitpunkt manuell neu starten möchtest, genügt:
```bash
docker compose restart
```
oder bei einem vollständigen Neuaufbau nach Updates
```bash
docker compose down
docker compose pull
docker compose up -d
```
> [!TIP]
> Dieser Ansatz stellt sicher, dass alle Dienste aktualisiert und mit den neuesten Images gestartet werden,
> ohne dass Daten oder Einstellungen im `/opt/postiz`-Verzeichnis verloren gehen.
👉 **Screenshot geeignet:** Terminalausgabe mit erfolgreichem Neustart der Postiz-Container nach `docker compose up -d`
### Schritt 6 Integration in Nginx Proxy Manager (NPM)
Damit Postiz sicher und bequem erreichbar ist, wird der interne Port **8080** jetzt über den **Nginx Proxy Manager** veröffentlicht.
So erhältst du eine HTTPS-Verbindung mit gültigem SSL-Zertifikat und kannst die Oberfläche direkt über eine Subdomain wie
`https://postiz.deinedomain.tld` öffnen.
#### Proxy-Host anlegen
1. Öffne das Dashboard des **Nginx Proxy Manager**.
2. Klicke auf **Add Proxy Host**.
3. Trage folgende Werte ein:
| Feld | Wert |
|------|------|
| **Domain Names** | `postiz.deinedomain.tld` |
| **Scheme** | `http` |
| **Forward Hostname / IP** | `<IP-des-Postiz-Containers>` |
| **Forward Port** | `8080` |
| **Block Common Exploits** | aktivieren |
| **Websockets Support** | aktivieren |
Wechsle danach in den Reiter **SSL** und aktiviere:
- **Request a new SSL Certificate**
- **Force SSL**
- **HTTP/2 Support**
- **HSTS Enabled**
Klicke anschließend auf **Save**.
> [!NOTE]
> Der Proxy Manager erstellt automatisch ein gültiges Lets-Encrypt-Zertifikat.
> Ab sofort ist Postiz verschlüsselt über HTTPS erreichbar.
> Bei der ersten Zertifikatsanforderung muss die Domain auf deinen Server zeigen,
> sonst schlägt die Validierung fehl.
👉 **Screenshot geeignet:** NPM-Dashboard mit geöffnetem Proxy-Host `postiz.deinedomain.tld`
#### Verbindung testen
Öffne im Browser:
```
https://postiz.deinedomain.tld
```
Wenn die Anmeldemaske erscheint und der Browser ein **Schloss-Symbol** anzeigt, funktioniert die Integration.
Melde dich anschließend mit den zuvor definierten Zugangsdaten an:
- Benutzername (E-Mail): `admin@localhost`
- Passwort: `changeMe123!`
> [!TIP]
> Sollte die Seite nicht laden, überprüfe im NPM-Dashboard IP-Adresse und Port (8080).
> In vielen Fällen hilft ein einfacher Neustart des Dienstes:
> ```bash
> docker compose restart
> ```
👉 **Screenshot geeignet:** Browserfenster mit Postiz-Login unter `https://postiz.deinedomain.tld` (Schloss-Symbol sichtbar)
### Schritt 7 Oberfläche verstehen und erste Einrichtung durchführen
Nach erfolgreicher Anmeldung öffnet sich das **Postiz-Dashboard**.
Die Weboberfläche ist übersichtlich, modern und vollständig webbasiert.
Sie lässt sich über Desktop, Tablet oder Smartphone gleichermaßen bedienen und dient als zentrale Schaltstelle für alle angebundenen Social-Media-Konten.
Im linken Bereich befindet sich das Hauptmenü, oben die Kalenderansicht mit geplanten Beiträgen und rechts der Schnellzugriff für neue Posts.
Beim ersten Start ist das Dashboard leer noch keine Plattformen, keine Beiträge, keine Medien.
👉 **Screenshot geeignet:** Browseransicht mit leerem Postiz-Dashboard (Menü links, Kalenderansicht sichtbar)
#### Hauptbereiche der Oberfläche
| Bereich | Beschreibung |
|----------|--------------|
| **Dashboard** | Kalenderansicht aller geplanten und vergangenen Beiträge. |
| **Channels** | Verwaltung der verbundenen Social-Media-Konten. |
| **Posts** | Übersicht aller erstellten, geplanten oder veröffentlichten Beiträge. |
| **Media** | Upload-Bereich für Bilder, Videos und Thumbnails. |
| **Settings** | Globale Einstellungen wie Zeitzone, Sprache und API-Zugänge. |
> [!NOTE]
> Postiz läuft vollständig lokal und speichert alle Medien, Tokens und Beiträge im eigenen Container.
> Es werden keine Daten an Dritte übertragen jede API-Verbindung erfolgt direkt zwischen deinem Server und der jeweiligen Plattform.
👉 **Screenshot geeignet:** geöffnete „Channels“-Seite mit leerer Liste und sichtbarem Button *Add Channel*
#### Discord-Kanal verbinden
Discord ist die einfachste Plattform, um Postiz zu testen.
Die Integration funktioniert vollständig über OAuth2, ohne dass du eine eigene App erstellen musst.
1. Klicke in Postiz auf **Channels → Add Channel → Discord**.
2. Ein neues Fenster öffnet den Discord-OAuth-Dialog.
3. Melde dich mit deinem Discord-Account an und wähle den Server aus, auf dem Postiz posten darf.
4. Bestätige mit **Authorize**.
5. Nach der Weiterleitung erscheint dein Discord-Server in der Channel-Liste.
👉 **Screenshot geeignet:** Discord-OAuth2-Dialog mit Serverauswahl und aktivierter Berechtigung *Send Messages*
> [!TIP]
> Wenn du Postiz auf mehreren Discord-Servern nutzen möchtest,
> wiederhole den Vorgang pro Server.
> Jeder Server wird als eigener Channel geführt und kann unabhängig geplant werden.
#### YouTube-Kanal verbinden (YouTube Data API v3, OAuth)
Im Gegensatz zu Discord benötigt YouTube eine eigene OAuth-App.
Dieser Prozess ist kostenlos, aber notwendig, um Postiz Zugriff auf dein YouTube-Konto zu gewähren.
Du richtest diese App einmalig in der **Google Cloud Console** ein.
##### Schritt 1 Google Cloud-Projekt und API aktivieren
1. Öffne die **Google Cloud Console** und lege ein neues Projekt an (oder wähle ein bestehendes).
2. Gehe zu **APIs & Services → Bibliothek** und aktiviere die **YouTube Data API v3**.
3. Wechsle zu **APIs & Services → OAuth-Zustimmungsbildschirm**
- Wähle **User Type: External**
- Trage App-Namen, Support-Mail und Entwickler-Kontakt ein
- Unter **Test Users** deine Google-Adresse hinzufügen
- Speichern
👉 **Screenshot geeignet:** Google Cloud Console mit aktivierter YouTube Data API v3
> [!NOTE]
> Für den privaten Betrieb reicht der Testmodus völlig aus.
> Eine Verifizierung der App ist nicht erforderlich, solange nur freigegebene Testnutzer sie verwenden.
##### Schritt 2 OAuth-Client-ID erstellen
1. Gehe zu **APIs & Services → Anmeldedaten → Anmeldedaten erstellen → OAuth-Client-ID**.
2. Wähle **Anwendungstyp: Webanwendung**.
3. Trage als **autorisierte Weiterleitungs-URI** ein:
```
https://<deine-postiz-domain>/integrations/social/youtube
```
4. Erstelle die App und notiere **Client-ID** und **Client-Secret**.
👉 **Screenshot geeignet:** Dialog „OAuth-Client-ID erstellen“ mit eingetragener Redirect-URI
##### Schritt 3 Zugangsdaten in Postiz eintragen
Öffne deine Postiz-Konfiguration:
```bash
nano /opt/postiz/.env
```
Ergänze:
```
YOUTUBE_CLIENT_ID="<deine-client-id>"
YOUTUBE_CLIENT_SECRET="<dein-client-secret>"
```
Speichern und Postiz neu starten:
```bash
cd /opt/postiz
docker compose down
docker compose up -d
```
👉 **Screenshot geeignet:** Terminalausgabe `docker compose up -d` (Container erfolgreich neu gestartet)
> [!NOTE]
> Änderungen an Umgebungsvariablen werden erst nach einem vollständigen Compose-Neustart übernommen.
##### Schritt 4 YouTube-Kanal in Postiz hinzufügen
1. In Postiz **Channels → Add Channel → YouTube** öffnen.
2. Der Browser öffnet Googles OAuth-Dialog.
3. Melde dich mit deinem Account an (der unter Test Users eingetragen wurde).
4. Zugriff erlauben und bestätigen.
5. Nach erfolgreicher Rückleitung erscheint dein YouTube-Kanal in der Channel-Liste.
👉 **Screenshot geeignet:** Postiz-Channels-Ansicht mit verbundenem YouTube-Kanal
##### Schritt 5 Funktionstest
1. Öffne in Postiz **Posts → New Post**.
2. Wähle als Channel **YouTube** und gib einen Testtitel ein.
3. Füge ein Thumbnail hinzu und speichere als **Draft**.
4. Optional plane die Veröffentlichung zu einem bestimmten Zeitpunkt.
5. Überprüfe den Status unter **Posts → Scheduled / Posted**.
👉 **Screenshot geeignet:** Postiz-Post-Detailansicht mit aktivem Channel „YouTube“ und Status *Scheduled*
##### Häufige Fehler und Lösungen
- **redirect_uri_mismatch**
Die eingetragene URI stimmt nicht exakt mit der Weiterleitungsadresse überein.
Sie muss exakt lauten:
```
https://<deine-postiz-domain>/integrations/social/youtube
```
- **App blockiert oder Warnmeldung**
Stelle sicher, dass dein Account als **Test User** hinterlegt ist.
Andernfalls blockiert Google den Login.
- **Änderungen ohne Wirkung**
Compose-Neustart vergessen.
Immer mit:
```bash
docker compose down && docker compose up -d
```
👉 **Screenshot geeignet:** Google OAuth-Fehlerseite mit markiertem Feld `redirect_uri_mismatch`
### Schritt 8 Ersten Beitrag planen und veröffentlichen
Nach der erfolgreichen Einrichtung von Discord und YouTube kannst du jetzt deinen ersten Beitrag erstellen und die Veröffentlichung testen.
Dieser Schritt dient nicht nur der Funktionsprüfung, sondern auch dem Verständnis, wie Postiz Beiträge verwaltet und mit mehreren Plattformen gleichzeitig arbeitet.
Öffne im Menü **Posts → New Post**.
Es öffnet sich der Editor mit Feldern für Text, Medien, Zielkanäle und Veröffentlichungszeitpunkt.
👉 **Screenshot geeignet:** Postiz-Editor mit leeren Feldern für Text, Media und Channel-Auswahl
#### Beitrag erstellen
1. Gib im Feld **Content** einen kurzen Testtext ein, z. B.
```
Testpost aus dem UCC automatisiert über Postiz 🦉
```
2. Wähle unter **Channels** mindestens einen aktiven Kanal aus:
- **Discord** (Textnachricht im ausgewählten Channel)
- **YouTube** (Post oder Community-Eintrag, je nach Kontoart)
3. Optional: Lade ein Bild oder Thumbnail hoch.
Klicke dazu auf **Add Media** und wähle eine Datei aus dem lokalen Speicher.
4. Wähle im Feld **Schedule date & time** einen Zeitpunkt in der Zukunft.
Die Zeitzone richtet sich nach deiner Einstellung unter *Settings → General* (z. B. `Europe/Berlin`).
> [!TIP]
> Wenn du keinen Zeitpunkt angibst, kannst du den Beitrag sofort mit **Publish now** veröffentlichen.
> Geplante Posts erscheinen automatisch im Kalender und wechseln nach Ablauf der Zeit auf den Status *Posted*.
👉 **Screenshot geeignet:** ausgefülltes Postiz-Formular mit gewähltem Discord-Channel, Datum und Textinhalt
#### Veröffentlichung prüfen
1. Öffne den Reiter **Posts → Scheduled**.
Dein geplanter Beitrag sollte dort mit Status *Waiting* angezeigt werden.
2. Nach Ablauf des Zeitpunkts wird der Status automatisch auf *Posted* gesetzt.
3. Prüfe anschließend die Zielplattform:
- In **Discord** sollte der Post als Bot-Nachricht erscheinen.
- In **YouTube** findest du den Eintrag im Community-Tab (sofern aktiviert).
👉 **Screenshot geeignet:** Discord-Channel mit sichtbarer Bot-Nachricht „Testpost aus dem UCC automatisiert über Postiz 🦉“
> [!NOTE]
> Der YouTube-Post erscheint nur, wenn dein Kanal Community-Posts erlaubt.
> Bei neueren oder kleineren Kanälen kann diese Funktion von Google noch deaktiviert sein.
#### Veröffentlichung manuell auslösen
Wenn du Beiträge sofort testen möchtest, ohne zu warten, kannst du sie direkt manuell veröffentlichen:
1. Öffne den Beitrag unter **Posts → Drafts**.
2. Klicke auf **Publish now**.
3. Der Beitrag wird sofort an alle ausgewählten Plattformen gesendet.
👉 **Screenshot geeignet:** Postiz-Postansicht mit markiertem Button *Publish now*
> [!TIP]
> Die manuelle Veröffentlichung eignet sich für spontane Ankündigungen oder Posts außerhalb des normalen Zeitplans.
> Im späteren Workflow kann sie auch durch n8n-Trigger oder automatisierte Events ausgelöst werden.
---
## Troubleshooting & Tipps
Auch wenn Postiz im Alltag zuverlässig läuft, können während der Einrichtung oder im Betrieb gelegentlich Fehler auftreten.
Dieser Abschnitt hilft dir, typische Probleme schnell zu erkennen und gezielt zu beheben.
👉 **Screenshot geeignet:** Übersicht im UCC-Dashboard mit markiertem Postiz-Container
### Problem: Weboberfläche nicht erreichbar
**Symptome:**
Beim Aufruf von `https://postiz.deinedomain.tld` erscheint eine Fehlermeldung oder der Browser kann keine Verbindung herstellen.
**Lösungen:**
1. Container-Status prüfen
```bash
docker compose ps
```
Wenn einer der Container gestoppt ist:
```bash
docker compose up -d
```
2. Port und Proxy-Eintrag kontrollieren
Im Nginx Proxy Manager sicherstellen, dass **Forward Hostname/IP** und **Port 8080** korrekt eingetragen sind.
3. SSL-Zertifikat prüfen
Falls Lets Encrypt-Validierung fehlschlug, Domain-Eintrag und DNS-Ziel überprüfen.
> [!TIP]
> Wenn der Browser einen 502-Fehler meldet, läuft meist der Backend-Container nicht.
> In diesem Fall helfen die Logs weiter:
> ```bash
> docker compose logs postiz
> ```
👉 **Screenshot geeignet:** NPM-Dashboard mit markiertem Proxy-Host `postiz.deinedomain.tld`
### Problem: Discord-Posts werden nicht gesendet
**Symptome:**
Der Beitrag erscheint im Postiz-Kalender, aber nicht im Discord-Channel.
**Lösungen:**
1. Prüfe die Bot-Berechtigungen auf dem Discord-Server.
Der Bot benötigt mindestens **Send Messages** und **Embed Links**.
2. Token ungültig?
Trenne den Channel in Postiz (**Remove Channel**) und füge ihn erneut hinzu.
3. Rate-Limit?
Discord blockiert bei zu vielen Nachrichten in kurzer Zeit.
Warte einige Minuten und teste erneut.
> [!NOTE]
> Discord erlaubt maximal einen automatisierten Post pro Sekunde pro Kanal.
> Höhere Frequenzen werden verworfen.
👉 **Screenshot geeignet:** Discord-Serverrollen mit aktivierten Berechtigungen *Send Messages* und *Embed Links*
### Problem: YouTube-Verbindung bricht ab
**Symptome:**
Postiz zeigt „Token expired“ oder keine neuen YouTube-Posts werden ausgeführt.
**Lösungen:**
1. Überprüfe, ob der Google-OAuth-Zugang abgelaufen ist.
In der Google Cloud Console unter **OAuth 2.0 Client IDs** kannst du die Token-Gültigkeit prüfen.
2. Trenne in Postiz den YouTube-Channel und verbinde ihn erneut.
3. Wenn die Fehlermeldung „invalid grant“ erscheint, ist der Refresh-Token ungültig erneute Anmeldung behebt das Problem.
> [!TIP]
> Google-Tokens laufen regelmäßig ab.
> Postiz verlängert sie automatisch, sofern der Container dauerhaft läuft und Zugriff auf die Datenbank hat.
👉 **Screenshot geeignet:** Postiz-Channels-Ansicht mit Warnsymbol bei YouTube-Channel
### Problem: Container startet nicht oder beendet sich sofort
**Symptome:**
Nach `docker compose up -d` stoppt der Postiz-Container direkt wieder.
**Lösungen:**
1. Logs prüfen
```bash
docker compose logs postiz
```
Häufige Ursachen:
- Tippfehler in `.env`
- ungültiger `POSTIZ_PORT`
- fehlerhafte DB-Verbindung
2. Datenbankstatus prüfen
```bash
docker compose logs db
```
Wenn PostgreSQL fehlerhaft initialisiert wurde:
```bash
docker compose down
rm -rf db/*
docker compose up -d
```
(nur im Testbetrieb, Daten gehen dabei verloren)
> [!NOTE]
> Stoppt der Container unmittelbar nach dem Start, ist fast immer ein Variablen- oder Portfehler die Ursache.
👉 **Screenshot geeignet:** Terminalausgabe von `docker compose logs postiz` mit markierter Fehlermeldung
### Problem: Speicherplatz läuft voll
**Symptome:**
Uploads oder Medienverarbeitung schlagen fehl, Logs zeigen I/O-Fehler.
**Lösungen:**
1. Speicherbelegung prüfen
```bash
df -h /opt/postiz
```
2. Alte Logs und temporäre Daten löschen
```bash
rm -rf /opt/postiz/data/logs/*
```
3. Storage erweitern
```bash
pct resize <CTID> rootfs +10G
```
> [!TIP]
> Der Medien-Cache wächst mit jedem Upload.
> Plane regelmäßige Bereinigung oder Auslagerung auf ein separates Volume.
👉 **Screenshot geeignet:** Terminalausgabe von `df -h` mit markiertem Postiz-Container
### Backups
Postiz nutzt lokale Volumes für Datenbank, Medien und Konfiguration.
Diese können direkt gesichert werden, idealerweise über Kopia oder dein zentrales UCC-Backup-System.
| Pfad | Inhalt | Sicherung notwendig |
|------|---------|--------------------|
| `/opt/postiz/data/` | App- und Metadaten | ✅ |
| `/opt/postiz/db/` | PostgreSQL-Datenbank | ✅ |
| `/opt/postiz/redis/` | Cache-Daten (optional) | optional |
| `/opt/postiz/.env` | Umgebungsvariablen | ✅ |
Beispiel für ein manuelles Backup:
```bash
tar -czf /srv/backup/postiz-$(date +%F).tar.gz /opt/postiz/data /opt/postiz/db /opt/postiz/.env
```
👉 **Screenshot geeignet:** Terminalausgabe nach erfolgreicher Archiv-Erstellung (`postiz-YYYY-MM-DD.tar.gz` sichtbar)
> [!NOTE]
> Redis-Daten müssen nicht zwingend gesichert werden sie werden beim Neustart automatisch neu aufgebaut.
### Updates und Wartung
Postiz wird aktiv weiterentwickelt.
Neue Versionen erscheinen regelmäßig als Container-Image in der GitHub Container Registry.
Aktualisierung durchführen:
```bash
cd /opt/postiz
docker compose pull
docker compose down
docker compose up -d
```
Nach dem Neustart die Versionsnummer prüfen:
```bash
docker compose logs postiz | grep "version"
```
> [!TIP]
> Vor größeren Updates empfiehlt sich ein vollständiges Backup der Verzeichnisse `/opt/postiz/data` und `/opt/postiz/db`.
> So kannst du bei Problemen jederzeit zur vorherigen Version zurückkehren.
👉 **Screenshot geeignet:** Terminalausgabe `docker compose pull` mit sichtbarem Update-Download
---
## Ergebnis
Nach Abschluss dieses Kapitels läuft Postiz als zentraler Bestandteil deines UCC-Ökosystems.
Du hast eine vollständig selbst gehostete Social-Media-Management-Lösung eingerichtet,
die mehrere Plattformen gleichzeitig ansteuern kann ohne Cloud-Abhängigkeiten oder Fremdzugriffe.
Dein aktuelles Setup umfasst:
- **Postiz-Container** Verwaltung von Beiträgen, Kanälen und Zeitplänen
- **PostgreSQL-Datenbank** Speicherung von Post-Metadaten, Tokens und Zeitstempeln
- **Redis-Cache** Optimierung von API-Abfragen und Queue-Prozessen
- **Nginx Proxy Manager** sichere HTTPS-Bereitstellung unter `https://postiz.deinedomain.tld`
- **Verbundenen Discord- und YouTube-Channel** für unmittelbare Tests und Veröffentlichung
- **Automatische Startlogik** alle Dienste starten selbständig nach einem Reboot
👉 **Screenshot geeignet:** Postiz-Dashboard mit verbundenen Channels (Discord, YouTube) und sichtbaren geplanten Beiträgen
Damit bietet dein UCC nun eine vollwertige Social-Automation-Schicht.
Postiz kann Posts planen, zeitgesteuert veröffentlichen und künftig mit **n8n-Workflows** verknüpft werden,
um Trigger-gesteuerte Posts, Stream-Ankündigungen oder automatische Upload-Benachrichtigungen zu erzeugen.
> [!TIP]
> Im **Premium-Kapitel** lernst du, wie Postiz mit **n8n** gekoppelt wird,
> um Beiträge automatisch aus Streaming-Ereignissen, Nextcloud-Uploads oder Kalender-Terminen zu erstellen.
> Außerdem erfährst du dort, wie du erweiterte Plattformen (TikTok, Meta, LinkedIn)
> über eigene App-Integrationen sicher und dauerhaft einbindest.
Postiz erweitert dein Homelab damit um einen entscheidenden Bereich
**kommunikative Automatisierung**.
Was bisher manuell über einzelne Plattformen lief, wird jetzt zentral gesteuert, dokumentiert und planbar
direkt aus deiner eigenen Infrastruktur, sicher, kontrolliert und unabhängig.