Mit goPodder Podcasts synchronisieren

  Martin Brodbeck   Lesezeit: 5 Minuten  🗪 4 Kommentare Auf Mastodon ansehen

Mit dem gPodder API kompatiblen goPodder kann man recht einfach seinen eigenen Podcast Sync-Server hosten.

mit gopodder podcasts synchronisieren

Motivation

Wenn es öfter vorkommt, dass man einen Podcast mal am Smartphone (z.B. AntennaPod) und mal am PC (z.B. Kasts) hören will, ist es praktisch, wenn man einfach an der gleich Stelle weiterhören kann. Auch die Abos sollte man nicht immer separat einrichten bzw. abgleichen müssen.

Dafür kann man den kostenlosen Dienst gpodder.net verwenden. Weil der Dienst recht beliebt ist, ist er leider auch ziemlich ausgelastet. Wer kann, sollte also durchaus in Erwägung ziehen, einen gPodder-kompatiblen Synchronisationsdienst selber zu hosten. Bislang nutzte ich dafür die Nextcloud-App GPodder Sync. Weil sich bei dem Projekt derzeit aber recht wenig tut, und bei mir Nextcloud-Updates auf eine neue Hauptversion dadurch regelmäßig ausgebremst werden (die Apps müssen als mit der neuen Nextcloud-Version kompatibel ausgewiesen sein), habe ich mich nach eine Alternative umgesehen.

goPodder

Es gibt mehrere Kandidaten, die zum selber hosten infrage kommen. Da oPodSync PHP benötigt und podsync zwar mit Rust gebaut wird, aber arg minimalistisch ist, habe ich mich für goPodder entschieden. goPodder wird mit Go entwickelt und kommt somit als „single Binary“ daher. Außerdem bietet es eine eingebaute Web-Oberfläche und kann wahlweise mit SQLite oder PostgreSQL verwendet werden. Ein Dockerimage wird direkt vom Projekt angeboten.

Einrichten

Da wir HTTPS verwenden möchten, goPodder aber kein TLS terminiert, braucht es einen Reverse Proxy. Das bietet sich eh an, da wir das Ganze als rootless Podman Quadlet aufsetzen werden und keine privilegierten Ports (< 1024) verwenden. Die Docker-Variante ist übrigens auf der Github-Seite des Projektes gut beschrieben. Als Reverse Proxy ist Caddy eine gute Wahl, da es die Beschaffung des Zertifikats übernimmt und man sich nicht selbst um die Aktualisierung desselben kümmern muss. Außerdem bedarf es für die Proxyaufgabe nur weniger Zeilen:

# goPodder
podsync.mydomain.com {
        reverse_proxy 127.0.0.1:8080
}

Anfragen an https://podsync.mydomain.com werden also an den localhost Port 8080 weitergereicht, wo unser goPodder Quadlet sein Ohr haben wird.

Da auf meinem Server bereits eine PostgreSQL Datenbank läuft, habe ich mich für diese als Datenhalde entschieden. Man braucht dafür lediglich einen Datenbankuser (createuser -P gopodder) sowie eine Datenbank mit diesem Benutzer als Eigentümer (createdb -O gopodder gopodder) erstellen.

Nun brauchen wir nur noch die Containerdatei $HOME/.config/containers/systemd/gopodder.container des Quadlets erstellen (einfachere Variante ohne PostgreSQL folgt im Artikel weiter unten):

[Unit]
Description=gPodder compatible sync server
Requires=dbpg.service
After=dbpg.service

[Container]
Image=ghcr.io/cbrgm/gopodder:v1
ContainerName=gopodder
AutoUpdate=local
PublishPort=8080:8080
Network=netint.network
Timezone=Europe/Berlin
Environment=GOPODDER_DB_BACKEND=postgres
Environment=GOPODDER_DB_POSTGRES=postgres://gopodder@dbpg:5432/gopodder
Secret=gopodder_db_pass,type=env,target=GOPODDER_DB_POSTGRES_PASSWORD

[Service]
TimeoutStartSec=600
Restart=always

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

netint.network ist in meinem Fall das interne Podman-Netzwerk, in dem sich die PostgreSQL-Datenbank (dbpg) befindet. Beim Passwort verwenden wir ein Podman Secret. Das hat den Vorteil, dass man das Passwort selbst nicht in die Containerdatei schreiben muss. Um das Podman Secret gopodder_db_pass zu erstellen, geben wir in der Konsole ein:

printf "MeinSicheresPasswort" | podman secret create gopodder_db_pass -

Es sind natürlich noch weitere Setups denkbar. Möchte man nicht ein internes Podman-Netzwerk erstellen und die Datenbank exklusiv für goPodder verwenden, kann man die beiden Container auch als einen Pod aufsetzen. Dadurch können sich die Container automatisch über localhost „sehen“ und der Datenbankzugriff gestaltet sich einfacher.

Für ein noch einfacheres Setup kann auch auf die PostgreSQL Datenbank verzichtet und einfach SQLite verwendet werden. In dem Fall muss man dann eben noch ein Volume einbinden, das die SQLite-Datei beherbergt. Auf entsprechende Dateizugriffsrechte ist zu achten. Die goPodder Containerdatei könnte dann in etwa so aussehen:

[Unit]
Description=gPodder compatible sync server

[Container]
Image=ghcr.io/cbrgm/gopodder:v1
ContainerName=gopodder
AutoUpdate=local
PublishPort=8080:8080
Timezone=Europe/Berlin
Environment=GOPODDER_DB_PATH=/data/gopodder.db
Volume=/srv/podvols/gpodder:/data

[Service]
TimeoutStartSec=600
Restart=always

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

Verwenden

Ist alles so weit gemacht, erstellt man den gopodder systemd Service mit systemctl --user daemon-reload und startet dann den Quadlet Container mit systemctl --user start gopodder.service. Mit dem Browser besucht man dann die Seite https://podsync.mydomain.com und wird mit einem Willkommensdialog begrüßt:

Die Seite fordert dazu auf, einen initialen Adminuser zu erstellen. Dieser kann dann den eigentlichen goPodder User erstellen, den man in AntennaPod & Co. zur Synchronisation angeben kann. Dazu wählt man in AntennaPod in den Einstellungen unter Synchronisation als Anbieter „Gpodder.net“ aus, hinterlegt dann aber natürlich die Serveradresse der gerade erstellten goPodder Instanz. Die erste Synchronisierung spiegelt sich dann auch gleich in der Weboberfläche von goPodder wider:

Dem Benutzer martin ist nun ein Gerät zugewiesen und man sieht, dass der Benutzer 42 Podcast-Abos hat. Ein Klick auf Details listet die Geräte und Subskriptionen dann auch auf. Auszugsweise:

Ähnlich verfährt man mit den anderen Podcast-Clients wie etwa Kasts. Im Ergebnis werden alle Abonnements sowie der Wiedergabefortschritt über alle Geräte hinweg synchronisiert.


AntennaPod (links) und Kasts (rechts) mit synchronisierten Inhalten

Fazit

Der Artikel hat hoffentlich gezeigt, dass man recht einfach einen eigenen gPodder API kompatiblen Synchronisationsserver für Podcasts aufsetzen kann. Mir kommt diese Lösung jedenfalls entgegen, da ich damit erstens den allgemein verfügbaren gpodder.net Server nicht belaste und zweitens meine Nextcloud-Updates nicht mehr von der Nextcloud-gPodder-Sync-App abhängig sind.

Quellen:

Tags

AntennaPod, GPodder

Wurzelsepp
Geschrieben von Wurzelsepp am 23. Juni 2026 um 09:49

Danke, das hat mir gerade viel Arbeit erspart!

kthxbai
Geschrieben von kthxbai am 23. Juni 2026 um 12:37

Super Beitrag, vielen Dank!

Andreas G.
Geschrieben von Andreas G. am 23. Juni 2026 um 15:59

Danke für den Tip. Hab ich mir gleich mal eingerichtet. Statt Podman zu verwenden habe ich den Container direkt auf Incus eingerichtet mit einer SQLite Datenbank als Backend.

Wolfgang
Geschrieben von Wolfgang am 23. Juni 2026 um 17:08

Vielen Dank für die ausführliche Beschreibung der Vorgehensweise. Ich bemühe mich ebenfalls hauptsächlich Open Source und freie Software einzusetzen. Bin seit ca. 3/4 Jahr mit Linux Mint unterwegs und sehr zufrieden damit. Da ich jedoch "computertechnisch" nicht so bewandert bin, sehe ich mich persönlich nicht in der Lage den obigen Workaround umzusetzen. Für alle denen es genauso geht - ein kleiner Hinweis. Die App Pocket Casts (läuft auf Android & Apple) ist ebenfalls freie (Open Source?) Software und bietet die Möglichkeit der Synchronisierung der Wiedergabeliste auf mehreren Geräten. Das funktioniert prima, man muss jedoch ein Konto anlegen. Macht weiter so mit eurem Blog. Er bietet sehr oft interessante Anregungen :).