Deploying to a server
These options assume you have a Linux server with a domain name pointed at it.
Run with Docker
The easiest way to deploy. Download the three config files from GitHub, edit the
domain in the Caddyfile, and start:
curl -O https://raw.githubusercontent.com/radiac/privipod/main/docker-compose.yml
mkdir -p docker
curl -O --output-dir docker https://raw.githubusercontent.com/radiac/privipod/main/docker/Dockerfile
curl -O --output-dir docker https://raw.githubusercontent.com/radiac/privipod/main/docker/Caddyfile
Then edit the three required values in docker-compose.yml:
PRIVIPOD_HOSTNAME- your domain name (e.g.privipod.example.com). This enables deployed mode: strictALLOWED_HOSTSchecking, HSTS headers, and correct share link generation.PRIVIPOD_SECRET_KEY- a random secret key for Django session signing. You can generate a strong one with:uv run --with django python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
PRIVIPOD_PASS- password for the admin user. Set it here for an initial password, then change it once logged in.
Also replace privipod.example.com in docker/Caddyfile with your domain:
$EDITOR docker/Caddyfile
$EDITOR docker-compose.yml
docker compose up -d
Caddy handles TLS automatically via Let’s Encrypt. Check logs for confirmation that the service started in deployed mode:
docker compose logs -f
You can change the admin password after logging in via the Django admin at /admin/.
Systemd service
It’s more complicated than docker, but if you prefer to run it directly on your server, you can run it with systemd, and then use a web server such as nginx or caddy to handle HTTPS and route traffic to the service.
Create /etc/systemd/system/privipod.service with something like this:
[Unit]
Description=Privipod
After=network.target
[Service]
Type=simple
User=privipod
WorkingDirectory=/opt/privipod
ExecStart=uvx privipod \
--store /opt/privipod/privipod.db \
localhost:8000
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Run privipod once to create a user (see Command-line options for ways to do this):
uvx privipod --store /opt/privipod/privipod.db
Enable and start it:
sudo useradd -r -s /sbin/nologin privipod
sudo mkdir -p /opt/privipod
sudo chown -R privipod:privipod /opt/privipod
sudo systemctl daemon-reload
sudo systemctl enable --now privipod
# Check logs
sudo journalctl -u privipod -f
You will now need to configure a web server to forward to privipod on
localhost:8000.