Are you ready to take full control of your podcast hosting? Whether you’re tired of limitations on commercial platforms or simply want to own your podcast data, Castopod is a powerful open-source option designed with modern podcasters in mind.
In this guide, we’ll walk you through how to install and set up Castopod using Docker or manual installation. We’ll also help you get your first episode published and ready to share with the world.
What is Castopod?
Castopod is a self-hosted podcasting platform designed to give podcasters freedom, flexibility, and modern features. It supports Podcasting 2.0 tags, ActivityPub (for decentralized social sharing), and gives you full control over your feed, episodes, analytics, and monetization.
Prerequisites
Before installing Castopod, make sure you have the following:
- A Linux-based server (Ubuntu 20.04+ recommended) or VPS
- Root or sudo access
- A domain name (optional, but recommended for HTTPS)
- Docker & Docker Compose installed (for Docker-based install)
- PHP 8.1+, Composer, MySQL/MariaDB (for manual install)
- Basic command-line knowledge
Installation Options
Castopod can be installed in two main ways:
Option 1: Docker (Recommended)
This is the easiest and most reliable way to deploy Castopod. Docker ensures all services are isolated and simplifies future updates.
Option 2: Manual (PHP + MySQL)
Ideal if you’re on shared hosting or need full control over every aspect of your environment.
Installing Castopod with Docker
Step 1: Clone the Repository
git clone https://code.castopod.org/adaures/castopod.git
cd castopod
Step 2: Set Up Your
.env
File
Copy the example .env.docker file:
cp .env.docker .env
Then edit the .env file and configure the following:
- APP_URL=https://yourdomain.com
- DB_USERNAME=castopod
- DB_PASSWORD=your_secure_password
- DB_DATABASE=castopod
Also, make sure to set your email address for SSL generation.
Step 3: Launch Castopod
docker compose up -d
After a few minutes, Castopod should be running on your server. Visit your server’s IP or domain in your browser.
Reference: Castopod Docs – Docker Install
Installing Castopod Manually (Non-Docker)
This method gives you full control and is suited for environments without Docker.
Step 1: Install Dependencies
Make sure your server has the following:
- PHP 8.1 or higher
- Composer
- MySQL or MariaDB
- Nginx or Apache
Step 2: Clone Castopod
git clone https://code.castopod.org/adaures/castopod.git
cd castopod
composer install --no-dev
Step 3: Create the
.env
File
Copy the example and configure it:
cp .env.example .env
Edit the file with your database and mail settings.
Step 4: Create the Database
Log into MySQL or MariaDB and run:
CREATE DATABASE castopod CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Step 5: Run Setup Commands
php castopod migrate
php castopod admin:create
You’ll be prompted to create an admin user for the web interface.
Step 6: Set Up Cron Jobs
To ensure feeds and background tasks run automatically, set up a cron job:
* * * * * php /path/to/castopod/artisan schedule:run >> /dev/null 2>&1
Reference: Castopod Docs – Manual Install
First-Time Setup via Web Interface
Once installed, visit your domain or IP address in a web browser.
- Log in using your admin credentials.
- Create your first podcast: name, description, cover art, and license.
- Adjust visibility and language settings.
- Set categories to help with podcast directories.
Publishing Your First Episode
With your podcast created, it’s time to upload your first episode.
- Click “Episodes” and then “Add New.”
- Upload your audio file (MP3 recommended).
- Fill out the episode title, description, and optional show notes.
- Add chapters, transcript files (e.g., .vtt or .json), or artwork if desired.
- Choose the publish date and status (draft, scheduled, or public).
Podcast Directory & Indexing
After publishing:
- Your feed is available at: https://yourdomain.com/@yourpodcast/feed
Submit your feed to major podcast platforms:
If you’ve enabled ActivityPub, Castopod can also act like a social account, letting users follow your podcast on Mastodon or other Fediverse platforms.
Tips and Best Practices
- Backup your database and uploaded media regularly.
- Use NGINX Proxy Manager for simplified HTTPS and domain routing.
- Enable Podcasting 2.0 tags for support of chapters, transcripts, and monetization.
- Integrate Lightning Wallets to receive Boosts and streaming sats (Value 4 Value).
- Check for updates regularly via Git or Docker rebuilds.
Wrapping Up
Installing Castopod gives you full control over your podcast, your data, and your future. Whether you’re focused on decentralization, monetization, or freedom from big platforms, Castopod has you covered.
Have questions? Share them in the comments.
Already using Castopod? We’d love to hear how it’s working for you.
Additonally there is this error:
docker compose up -d
no configuration file provided: not found
“no configuration file provided: not found” is means that docker does not have a configuration file to build the container. Are you sure that you created/generated one and placed it in the correct location?
Hi this seems clear, just wanted to clairfy these points:
these are what I see in the database section which differ from what you list:
database.default.hostname=”localhost”
database.default.database=”castopod”
database.default.username=”root”
database.default.password=”****”
database.default.DBPrefix=”cp_”
Looks like they want a root password in this one.
Also Also, make sure to set your email address for SSL generation.
Is this in the Email configuration?
eg:
# email.fromEmail=””
# email.SMTPHost=”your_smtp_host”
# email.SMTPUser=”your_smtp_user”
# email.SMTPPass=”your_smtp_password”
Thanks for any clarification, I’ve been trying to install this package every which way but the preresuquisites for manual config are thorny and hard to locate.
“root” as the username is what you would be setting as the username. It is not related to a username for the server you are installing this on.
As for the SSL certificate generation, the email address should be all that is needed since it uses Let’s Encrypt’s ACME service to obtain the certificate.