No description
.woodpecker | ||
templates | ||
.dockerignore | ||
.editorconfig | ||
.gitignore | ||
.python-version | ||
data.py | ||
Dockerfile | ||
LICENSE | ||
main.py | ||
process.py | ||
pyproject.toml | ||
README.md | ||
settings.py | ||
uv.lock |
Podcast Server
This is a really simple project allowing for quick creation of podcasts. The server provides a simple admin panel to manage podcasts, and the ability to upload episodes. Any uploaded episodes have their audio level normalised, and are re-encoded to AAC which tends to use less disk space than original formats.
Deployment
This is designed to sit behind a reverse proxy set up with forward authentication to protect the admin panel. Although, basic authentication should work too.
services:
server:
image: git.jakew.me/jakew/podcast-generator:latest
restart: unless-stopped
environment:
- PG_FEEDS=["mypodcast"]
volumes:
- data:/work
volumes:
data:
Example reverse proxy configuration for Caddy:
podcast.example.org {
# rewrite the base admin path to have a trailing slash
@admin path /admin /admin/*
# apply forward authentication to just admin routes
# this is only an example, refer to your auth provider documentation
forward_auth @admin https://auth.example.org {
copy_headers X-Auth-User ...
}
# proxy requests to the app
reverse_proxy podcast-server:8000
}
Environment Variables
Name | Default | Description |
---|---|---|
PG_DIRECTORY |
./data (/data for Docker) |
Where any files are stored. This includes episodes, images and application data. |
PG_UPLOADS_DIRECTORY |
./uploads (/uploads for Docker) |
Where any currently uploading files are stored. This directory does not need persistence in Docker. |
PG_FEEDS |
["default"] |
A JSON array of the podcast names to be initially created. |
Development
This project is made using Python and FastAPI. To get started, ensure you have Python and the uv package manager installed.
# install dependencies
uv sync
# run server in development mode
uv run fastapi dev main.py