Installing Castopod 1.6.5 w/ MySQL and behind Caddy

I recently set up the self-hosted podcasting solution Castopod. Here's a quick rundown. It's closely based on official instructions though.


I already had the necessary dependencies installed, but it should be these commands:

# Caddy (see
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf '' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf '' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
# MySQL (see
sudo apt install mysql-server mysql-client php-mysql
systemctl start mysql.service
service mysql-server start
service mysql-server restart
mysql -u root -p
sudo apt install php-fpm php-curl php-mbstring php-xml php-mysql

Also, add a DNS entry pointing your (sub-)domain to your server IP.

Preparing the MySQL DB

Next, we create a DB user called castopod and a database of the same name. We then grant the user full access to the database:

# Login
mysql -p
# Replace 'PASSWORD on the next line'
create user 'castopod'@'%' identified by 'PASSWORD';
create database castopod;
grant all privileges on castopod.* to 'castopod'@'%';

Installing Castopod

We install Castopod to the caddy user home directory:

cd /home/caddy
# All files are now unzipped in the folder ./castopod/
chmod 774 -R castopod
chown caddy:www-data -R castopod
# We link the folder out to where caddy will look
mkdir -p /usr/share/caddy/YOUR.DOMAIN
chown caddy:caddy -R /usr/share/caddy
ln -s /home/caddy/castopod/public /usr/share/caddy/YOUR.DOMAIN/html

Now we enable a cronjob that handles stuff like fediverse integration.

Run crontab -e and add the following line to the bottom of it:

* * * * * /path/to/php /path/to/castopod/spark tasks:run >> /dev/null 2>&1

We probably also want to be able to upload files bigger than the default 2MB, so we open up the php configuration with our favourite text editor. It's located at /etc/php/8.1/fpm/php.ini.

Search for these three values and update them, e.g. to these:

post_max_size = 200M
memory_limit = 256M
post_max_size = 200M

Pointing Caddy

Update the Caddyfile (/etc/caddy/Caddyfile):

	encode zstd gzip
	root * /usr/share/caddy/YOUR.DOMAIN/html
	php_fastcgi unix//run/php/php8.1-fpm.sock

(Re-)starting Everything

Now we need to reload all our services to use the new configurations.

systemctl restart php8.1-fpm.service
systemctl restart caddy
# or
caddy reload --config /etc/caddy/Caddyfile

All you need to do now is visit YOUR.DOMAIN/cp-wizard to finish the setup wizard.

If you have any questions please refer to official documentation or Castopod support. I will not help you debug your installation.

___ Reach out via Mastodon or shoot me an email