Podcast management system with multi-user support. Pinepods utilizes a central database so aspects like listen time and themes follow from device to device.
License: GPL-3.0. Built with: Rust, Dart, Python, Go, CSS, Shell, Java, JavaScript, Objective-C, HCL, Ruby, HTML, Smarty, Swift, Batchfile, PowerShell. Website: https://www.pinepods.online/. Source: https://github.com/madeofpendletonwool/PinePods.
Failed to deploy a stack: compose up operation failed: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "<POSTGRESQL_PATH>" to rootfs at "/var/lib/postgresql/data": change mount propagation through procfd: open o_path procfd: open /<DOCKER ROOT>/overlay2/17561d31d0730b3fd3071752d82cf8fe60b2ea0ed84521c6ee8b06427ca8f064/merged/var/lib/postgresql/data: no such file or directory: unknown` ``` > Please change your postgres tag in your compose to '17'. See [this issue](https://github.com/docker-library/postgres/issues/1363) for more details. #### User Permissions Pinepods can run with specific user permissions to ensure downloaded files are accessible on the host system. This is controlled through two environment variables: - `PUID`: Process User ID (defaults to 1000 if not set) - `PGID`: Process Group ID (defaults to 1000 if not set) To find your user's UID and GID, run: ```bash id -u # Your UID id -g # Your GID ``` #### Compose File - PostgreSQL (Recommended) ```yaml services: db: container_name: db image: postgres:17 environment: POSTGRES_DB: pinepods_database POSTGRES_USER: postgres POSTGRES_PASSWORD: myS3curepass PGDATA: /var/lib/postgresql/data/pgdata volumes: - /home/user/pinepods/pgdata:/var/lib/postgresql/data restart: always valkey: image: valkey/valkey:8-alpine restart: always pinepods: image: madeofpendletonwool/pinepods:latest ports: - "8040:8040" environment: # Basic Server Info SEARCH_API_URL: 'https://search.pinepods.online/api/search' PEOPLE_API_URL: 'https://people.pinepods.online' HOSTNAME: 'http://localhost:8040' # Database Vars DB_TYPE: postgresql DB_HOST: db DB_PORT: 5432 DB_USER: postgres DB_PASSWORD: myS3curepass DB_NAME: pinepods_database # Valkey Settings VALKEY_HOST: valkey VALKEY_PORT: 6379 # Enable or Disable Debug Mode for additional Printing DEBUG_MODE: false PUID: ${UID:-911} PGID: ${GID:-911} # Add timezone configuration TZ: "America/New_York" volumes: # Mount the download and backup locations on the server - /home/user/pinepods/downloads:/opt/pinepods/downloads - /home/user/pinepods/backups:/opt/pinepods/backups # Timezone volumes, HIGHLY optional. Read the timezone notes below - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro restart: always depends_on: - db - valkey
Self-hosting gives you three things SaaS can’t: data ownership (the files live on disks you control), cost predictability (a one-time setup vs. recurring per-seat fees that grow with your household or team), and longevity (open-source means the app keeps working even if the maintainers move on, since you can pin a working version). The trade-off is that you take on the operational work of running a server, applying updates, and handling backups.
Most self-hosted apps run comfortably on modest hardware — a Raspberry Pi 4, a mini PC, a NAS with Docker support, or a small VPS is usually enough for personal or family use. CPU and RAM requirements scale with how many simultaneous users or how much data you push through Pinepods. Storage requirements depend on the kind of data you keep; check the README for guidance on data retention.
Last verified: 2026-05-22