Skip to content

Instantly share code, notes, and snippets.

@ToxicMushroom
Created February 11, 2026 21:05
Show Gist options
  • Select an option

  • Save ToxicMushroom/1e90a6bec643af2b88fafd32f895aac3 to your computer and use it in GitHub Desktop.

Select an option

Save ToxicMushroom/1e90a6bec643af2b88fafd32f895aac3 to your computer and use it in GitHub Desktop.
peertube yaml
services:
# You can comment this webserver section if you want to use another webserver/proxy or test PeerTube in local
webserver:
image: chocobozzz/peertube-webserver:latest
# If you don't want to use the official image and build one from sources:
# build:
# context: .
# dockerfile: ./support/docker/production/Dockerfile.nginx
env_file:
- /run/secrets/rendered/peertube.env
ports:
- "8081:80"
- "4431:443"
volumes:
- type: bind
# Switch sources if you downloaded the whole repository
#source: ../../nginx/peertube
source: ./peertube-volume/nginx/peertube
target: /etc/nginx/conf.d/peertube.template
- assets:/var/www/peertube/peertube-latest/client/dist:ro
- ./peertube-volume/data:/var/www/peertube/storage
- certbot-www:/var/www/certbot
- ./peertube-volume/certbot/conf:/etc/letsencrypt
- ./peertube-volume/nginx-logs:/var/log/nginx
depends_on:
- peertube
restart: "always"
# You can comment this certbot section if you want to use another webserver/proxy or test PeerTube in local
certbot:
container_name: certbot
image: certbot/certbot
volumes:
- ./peertube-volume/certbot/conf:/etc/letsencrypt
- certbot-www:/var/www/certbot
restart: unless-stopped
entrypoint: /bin/sh -c "trap exit TERM; while :; do certbot renew --webroot -w /var/www/certbot; sleep 12h & wait $${!}; done;"
depends_on:
- webserver
peertube:
# If you don't want to use the official image and build one from sources:
# build:
# context: .
# dockerfile: ./support/docker/production/Dockerfile
image: chocobozzz/peertube:production-bookworm
# Use a static IP for this container because nginx does not handle proxy host change without reload
# This container could be restarted on crash or until the postgresql database is ready for connection
networks:
default:
ipv4_address: 172.18.0.42
ipv6_address: fdab:e4b3:21a2:ef1b::42
env_file:
- /run/secrets/rendered/peertube.env
ports:
- "1935:1935" # Comment if you don't want to use the live feature
# - "9000:9000" # Uncomment if you use another webserver/proxy or test PeerTube in local, otherwise not suitable for production
volumes:
# Remove the following line if you want to use another webserver/proxy or test PeerTube in local
- assets:/app/client/dist
- ./peertube-volume/data:/data
- ./peertube-volume/config:/config
depends_on:
- postgres
- redis
restart: "always"
postgres:
image: postgres:17-alpine
env_file:
- /run/secrets/rendered/peertube.env
volumes:
- ./peertube-volume/db:/var/lib/postgresql/data
restart: "always"
redis:
image: redis:8-alpine
volumes:
- ./peertube-volume/redis:/data
restart: "always"
networks:
default:
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 172.18.0.0/16
- subnet: fdab:e4b3:21a2:ef1b::/64
volumes:
assets:
certbot-www:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment