-
-
Notifications
You must be signed in to change notification settings - Fork 101
Installation
This page covers the supported installation path for PigeonPod: Docker-based deployment.
Use this page when you want to:
- install PigeonPod on a server or home lab machine
- understand the required persistent storage
- choose a safe starting deployment pattern
- avoid common setup mistakes before first launch
This wiki does not cover direct JAR deployment.
Before you start, make sure you have:
- Docker
- Docker Compose
- a host with persistent disk space
- network access for pulling container images
You should also decide whether you want:
- a local-only instance on your LAN
- or a domain / reverse proxy setup for external access
For most users, start with:
- one PigeonPod container
- one persistent Docker volume mounted to
/data - built-in auth enabled
- local storage mode
This gives you the lowest-maintenance setup.
Create a docker-compose.yml like this:
version: '3.9'
services:
pigeon-pod:
image: ghcr.io/aizhimou/pigeon-pod:latest
container_name: pigeon-pod
restart: unless-stopped
ports:
- "8834:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:sqlite:/data/pigeon-pod.db
# Optional: disable built-in auth only behind another trusted auth layer
# - PIGEON_AUTH_ENABLED=false
volumes:
- data:/data
volumes:
data:Start it with:
docker compose up -dThen open:
http://localhost:8834
Default credentials:
- username:
root - password:
Root@123
Your persistent /data volume is important because it holds runtime state such as:
- the SQLite database
- downloaded media
- cover files
- managed yt-dlp runtime files
If /data is not persistent, you should expect data loss after container recreation.
After the container starts:
- log in
- change your credentials if needed
- set your YouTube API key if you use YouTube feeds
- review storage settings
- add one test feed
- verify one episode can download successfully
Related page:
Keep built-in auth enabled unless another trusted access layer already protects the instance.
Safe examples:
- an internal-only deployment on a trusted LAN
- VPN-only access
- an auth proxy in front of PigeonPod
Unsafe example:
- exposing an auth-disabled instance directly to the public Internet
For a first installation, prefer LOCAL storage unless you already know you need S3-compatible object storage.
Choose LOCAL when:
- you want the simplest setup
- you are running one instance on one host
- local disk is acceptable
Choose S3 when:
- you already use object storage
- you want storage outside the app host
- you understand the extra setup and migration implications
Important:
- switching storage modes later does not migrate old media automatically
Related page:
If you plan to use RSS from other devices or outside your LAN:
- set a correct Base URL
- make sure your reverse proxy forwards requests correctly
- do not break media and RSS routes during proxying
If you do not need external access yet, start without a reverse proxy and add it later.
After installation, verify:
- the container stays up
- the web UI opens
- login succeeds
- settings pages load
- one feed can be created
- one episode can reach
COMPLETED
Check:
- the image was pulled correctly
- the volume mount is valid
- the database path is writable
- the port is not already in use
Check:
- whether
/datais backed by a persistent volume or bind mount
Fix:
- re-enable built-in auth
- or put a trusted access layer in front of the app before exposing it
Repository · Releases · Issues · Discussions
Security note: Do not expose an auth-disabled PigeonPod instance directly to the public Internet.