Official Docker images
Castopod pushes 3 Docker images to the Docker Hub during its automated build process:
castopod/castopod: an all in one castopod image using nginx unitcastopod/app: the app bundle with all of Castopod dependenciescastopod/web-server: an Nginx configuration for Castopod
Additionally, Castopod requires a MySQL-compatible database. A Redis database can be added as a cache handler.
Supported tags
Section titled “Supported tags”develop[unstable], latest development branch buildbeta[stable], latest beta version buildlatest[stable], latest version build1.x.x[stable], specific version build (since1.0.0)
Example usage
Section titled “Example usage”-
Install docker and docker-compose
-
Create a
docker-compose.ymlfile with the following:version: "3.7"services:castopod:image: castopod/castopod:latestcontainer_name: "castopod"volumes:- castopod-media:/var/www/castopod/public/mediaenvironment:MYSQL_DATABASE: castopodMYSQL_USER: castopodMYSQL_PASSWORD: changemeCP_BASEURL: "https://castopod.example.com"CP_ANALYTICS_SALT: changemeCP_CACHE_HANDLER: redisCP_REDIS_HOST: redisCP_REDIS_PASSWORD: changemenetworks:- castopod- castopod-dbports:- 8000:8000restart: unless-stoppedmariadb:image: mariadb:11.2container_name: "castopod-mariadb"networks:- castopod-dbvolumes:- castopod-db:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD: changemeMYSQL_DATABASE: castopodMYSQL_USER: castopodMYSQL_PASSWORD: changemerestart: unless-stoppedredis:image: redis:7.2-alpinecontainer_name: "castopod-redis"command: --requirepass changemevolumes:- castopod-cache:/datanetworks:- castopodvolumes:castopod-media:castopod-db:castopod-cache:networks:castopod:castopod-db:You have to adapt some variables to your needs (e.g.
CP_BASEURL,MYSQL_ROOT_PASSWORD,MYSQL_PASSWORDandCP_ANALYTICS_SALT). -
Setup a reverse proxy for TLS (SSL/HTTPS)
TLS is mandatory for ActivityPub to work. This job can easily be handled by a reverse proxy, for example with Caddy:
#castopodcastopod.example.com {reverse_proxy localhost:8000} -
Run
docker-compose up -d, wait for it to initialize and head on tohttps://castopod.example.com/cp-installto finish setting up Castopod! -
You’re all set, start podcasting! 🎙️🚀
Environment Variables
Section titled “Environment Variables”-
castopod/castopod and castopod/app
Variable name Type ( default)Default CP_BASEURLstring undefinedCP_MEDIA_BASEURL?string CP_BASEURLCP_ADMIN_GATEWAY?string "cp-admin"CP_AUTH_GATEWAY?string "cp-auth"CP_ANALYTICS_SALTstring undefinedCP_DATABASE_HOSTNAME?string "mariadb"CP_DATABASE_NAME?string MYSQL_DATABASECP_DATABASE_USERNAME?string MYSQL_USERCP_DATABASE_PASSWORD?string MYSQL_PASSWORDCP_DATABASE_PREFIX?string "cp_"CP_CACHE_HANDLER[ "file"or"redis"]"file"CP_REDIS_HOST?string "localhost"CP_REDIS_PASSWORD?string nullCP_REDIS_PORT?number 6379CP_REDIS_DATABASE?number 0CP_EMAIL_SMTP_HOST?string undefinedCP_EMAIL_FROM?string undefinedCP_EMAIL_SMTP_USERNAME?string "localhost"CP_EMAIL_SMTP_PASSWORD?string nullCP_EMAIL_SMTP_PORT?number 25CP_EMAIL_SMTP_CRYPTO[ "tls"or"ssl"]"tls"CP_ENABLE_2FA?boolean undefinedCP_MEDIA_FILE_MANAGER?string undefinedCP_MEDIA_S3_ENDPOINT?string undefinedCP_MEDIA_S3_KEY?string undefinedCP_MEDIA_S3_SECRET?string undefinedCP_MEDIA_S3_REGION?string undefinedCP_MEDIA_S3_BUCKET?string undefinedCP_MEDIA_S3_PROTOCOL?number undefinedCP_MEDIA_S3_PATH_STYLE_ENDPOINT?boolean undefinedCP_MEDIA_S3_KEY_PREFIX?string undefinedCP_DISABLE_HTTPS?[ 0or1]undefinedCP_MAX_BODY_SIZE?number (with suffix) 512MCP_PHP_MEMORY_LIMIT?number (with suffix) 512MCP_TIMEOUT?number 900 -
castopod/web-server
Variable name Type Default CP_APP_HOSTNAME?string "app"CP_MAX_BODY_SIZE?number (with suffix) 512MCP_TIMEOUT?number 900