PeerTube
A decentralised streaming video platform
Try the service in a VM
-
Install Nix
- Arch Linux
-
- Bash
-
$ pacman --sync --refresh --noconfirm curl git jq nix
- Debian
-
- Bash
-
$ apt install --yes curl git jq nix
- Ubuntu
-
- Bash
-
$ apt install --yes curl git jq nix
-
Download a configuration file
# default.nix { ngipkgs ? import (fetchTarball "https://github.com/ngi-nix/ngipkgs/tarball/main") { }, }: ngipkgs.demo-vm ( { config, pkgs, ... }: { services.peertube = { enable = true; # Configure locally-running instances of redis server & database. database.createLocally = true; redis.createLocally = true; # Where we're running localDomain = "localhost"; listenWeb = 9000; # Example settings, adjust as desired settings = { listen.hostname = "0.0.0.0"; instance.name = "My Lovely PeerTube Instance"; # Enable livestreaming live.enabled = true; }; plugins = { enable = true; plugins = with pkgs; [ peertube-theme-dark peertube-plugin-video-annotation peertube-plugin-livechat ]; }; # Do *NOT* use this in production, follow the docs and properly generate a secret here! i.e. using the output of: # openssl rand -hex 32 # https://docs.joinpeertube.org/install/any-os#peertube-configuration secrets.secretsFile = pkgs.writeText "secrets.txt" "secrets"; # Set the initial password of the root user to a fixed value. Make sure to change the password afterwards! serviceEnvironmentFile = "/etc/peertube-envvars"; }; environment.etc."peertube-envvars".text = '' PT_INITIAL_ROOT_PASSWORD=changeme ''; networking.firewall.allowedTCPPorts = [ config.services.peertube.listenWeb # Livestreaming port 1935 ]; } )
-
Enable binary substituters
- Bash
-
$ export NIX_CONFIG='substituters = https://cache.nixos.org/ https://ngi.cachix.org/ trusted-public-keys = cache.nixos.org-1:6nchdd59x431o0gwypbmraurkbj16zpmqfgspcdshjy= ngi.cachix.org-1:n+cal72roc3qqulxihpv+tw5t42whxmmhpragkrsrow='
-
Build and run a virtual machine
- Arch Linux, Debian Sid and Ubuntu 25.04
-
- Bash
-
$ nix-build ./default.nix && ./result
- Debian 12 and Ubuntu 24.04/24.10
-
- Bash
-
$ rev=$(nix-instantiate --eval --attr sources.nixpkgs.rev https://github.com/ngi-nix/ngipkgs/archive/master.tar.gz | jq --raw-output)
$ nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/$rev.tar.gz --packages nix --run "nix-build ./default.nix && ./result"
-
Usage Instructions
PeerTube service demo.
The web UI is available at http://localhost:9000/.
You can log in with:
- username: root
- password: changeme
Options
programs.peertube-cli
- programs.peertube-cli.enable
-
Whether to enable peertube-cli.
- Type:
boolean
- Default:
false
services.peertube
- services.peertube.configureNginx
-
Configure nginx as a reverse proxy for peertube.
- Type:
boolean
- Default:
false
- services.peertube.dataDirs
-
Allow access to custom data locations.
- Type:
list of absolute path
- Default:
[ ]
- services.peertube.database.createLocally
-
Configure local PostgreSQL database server for PeerTube.
- Type:
boolean
- Default:
false
- services.peertube.database.host
-
Database host address or unix socket.
- Type:
string
- Default:
if config.services.peertube.database.createLocally then "/run/postgresql" else null
- services.peertube.database.name
-
Database name.
- Type:
string
- Default:
"peertube"
- services.peertube.database.passwordFile
-
Password for PostgreSQL database.
- Type:
null or absolute path
- Default:
null
- services.peertube.database.port
-
Database host port.
- Type:
16 bit unsigned integer; between 0 and 65535 (both inclusive)
- Default:
5432
- services.peertube.database.user
-
Database user.
- Type:
string
- Default:
"peertube"
- services.peertube.enable
-
Whether to enable Peertube.
- Type:
boolean
- Default:
false
- services.peertube.enableWebHttps
-
Whether clients will access your PeerTube instance with HTTPS. Does NOT configure the PeerTube webserver itself to listen for incoming HTTPS connections.
- Type:
boolean
- Default:
false
- services.peertube.group
-
Group under which Peertube runs.
- Type:
string
- Default:
"peertube"
- services.peertube.listenHttp
-
The port that the local PeerTube web server will listen on.
- Type:
16 bit unsigned integer; between 0 and 65535 (both inclusive)
- Default:
9000
- services.peertube.listenWeb
-
The public-facing port that PeerTube will be accessible at (likely 80 or 443 if running behind a reverse proxy). Clients will try to access PeerTube at this port.
- Type:
16 bit unsigned integer; between 0 and 65535 (both inclusive)
- Default:
9000
- services.peertube.localDomain
-
The domain serving your PeerTube instance.
- Type:
string
- services.peertube.package
-
PeerTube package to use.
- Type:
package
- Default:
pkgs.peertube
- Notes:
- Missing update script An update script is required for automatically tracking the latest release.
- services.peertube.plugins.enable
-
Whether to enable declarative plugin management for PeerTube .
- Type:
boolean
- Default:
false
- services.peertube.plugins.package
-
Base PeerTube package to use when using declarative plugin management. This overrides
services.peertube.package
.- Type:
package
- Default:
pkgs.peertube
- Notes:
- Missing update script An update script is required for automatically tracking the latest release.
- services.peertube.plugins.plugins
-
List of packages with peertube plugins that should be added.
- Type:
list of package
- Default:
[ ]
- services.peertube.redis.createLocally
-
Configure local Redis server for PeerTube.
- Type:
boolean
- Default:
false
- services.peertube.redis.enableUnixSocket
-
Use Unix socket.
- Type:
boolean
- Default:
config.services.peertube.redis.createLocally
- services.peertube.redis.host
-
Redis host.
- Type:
null or string
- Default:
if config.services.peertube.redis.createLocally && !config.services.peertube.redis.enableUnixSocket then "127.0.0.1" else null
- services.peertube.redis.passwordFile
-
Password for redis database.
- Type:
null or absolute path
- Default:
null
- services.peertube.redis.port
-
Redis port.
- Type:
null or 16 bit unsigned integer; between 0 and 65535 (both inclusive)
- Default:
if config.services.peertube.redis.createLocally && config.services.peertube.redis.enableUnixSocket then null else 6379
- services.peertube.secrets.secretsFile
-
Secrets to run PeerTube. Generate one using
openssl rand -hex 32
- Type:
null or absolute path
- Default:
null
- services.peertube.serviceEnvironmentFile
-
Set environment variables for the service. Mainly useful for setting the initial root password. For example write to file: PT_INITIAL_ROOT_PASSWORD=changeme
- Type:
null or absolute path
- Default:
null
- services.peertube.settings
-
Configuration for peertube.
- Type:
JSON value
- services.peertube.settings.video_transcription.enabled
-
Enable automatic transcription of videos.
- Type:
boolean
- Default:
false
- services.peertube.settings.video_transcription.engine_path
-
Custom engine path for local transcription.
- Type:
absolute path or string
- Default:
if config.services.peertube.settings.video_transcription.enabled then lib.getExe pkgs.whisper-ctranslate2 else "Set `services.peertube.settings.video_transcription.enabled = true`."
- services.peertube.smtp.createLocally
-
Configure local Postfix SMTP server for PeerTube.
- Type:
boolean
- Default:
false
- services.peertube.smtp.passwordFile
-
Password for smtp server.
- Type:
null or absolute path
- Default:
null
- services.peertube.user
-
User account under which Peertube runs.
- Type:
string
- Default:
"peertube"
Examples
basic
{ config, pkgs, ... }: { services.peertube = { enable = true; # Configure locally-running instances of redis server & database. database.createLocally = true; redis.createLocally = true; # Where we're running localDomain = "localhost"; listenWeb = 9000; # Example settings, adjust as desired settings = { listen.hostname = "0.0.0.0"; instance.name = "My Lovely PeerTube Instance"; # Enable livestreaming live.enabled = true; }; plugins = { enable = true; plugins = with pkgs; [ peertube-theme-dark peertube-plugin-video-annotation peertube-plugin-livechat ]; }; # Do *NOT* use this in production, follow the docs and properly generate a secret here! i.e. using the output of: # openssl rand -hex 32 # https://docs.joinpeertube.org/install/any-os#peertube-configuration secrets.secretsFile = pkgs.writeText "secrets.txt" "secrets"; # Set the initial password of the root user to a fixed value. Make sure to change the password afterwards! serviceEnvironmentFile = "/etc/peertube-envvars"; }; environment.etc."peertube-envvars".text = '' PT_INITIAL_ROOT_PASSWORD=changeme ''; networking.firewall.allowedTCPPorts = [ config.services.peertube.listenWeb # Livestreaming port 1935 ]; }
basic-cli
{ programs.peertube-cli.enable = true; }
This project is funded by NLnet through these subgrants:
Related links: