PeerTube
A decentralised streaming video platform
Declared in: projects/PeerTube/default.nix
Try the service in a VM
- 
    Install Nix
    
- Bash
 - 
  
$ apt install --yes curl git jq nix 
- Bash
 - 
  
$ apt install --yes curl git jq nix 
- Bash
 - 
  
$ pacman --sync --refresh --noconfirm 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
    
- Bash
 - 
  
$ nix-build ./default.nix && ./result 
- Bash
 - 
  
$ nix-build ./default.nix && ./result 
- 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" 
- Bash
 - 
  
$ nix-build ./default.nix && ./result 
 - 
  Usage Instructions
  
- 
The web UI is available at http://localhost:9000/.
 - 
You can log in with:
- username: 
root - password: 
changeme 
 - username: 
 
 - 
 
Options
programs.peertube-cli
- 
  
  
Whether to enable peertube-cli.
- Type:
 boolean- Default:
 false- Declared in:
 - projects/PeerTube/programs/peertube-cli/module.nix
 
 
programs.peertube-cli.enable
services.peertube
- 
  
  
Configure nginx as a reverse proxy for peertube.
- Type:
 boolean- Default:
 false- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Allow access to custom data locations.
- Type:
 list of absolute path- Default:
 [ ]- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Configure local PostgreSQL database server for PeerTube.
- Type:
 boolean- Default:
 false- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Database host address or unix socket.
- Type:
 string- Default:
 if config.services.peertube.database.createLocally then "/run/postgresql" else null- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Database name.
- Type:
 string- Default:
 "peertube"- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Password for PostgreSQL database.
- Type:
 null or absolute path- Default:
 null- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Database host port.
- Type:
 16 bit unsigned integer; between 0 and 65535 (both inclusive)- Default:
 5432- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Database user.
- Type:
 string- Default:
 "peertube"- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Whether to enable Peertube.
- Type:
 boolean- Default:
 false- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
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- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Group under which Peertube runs.
- Type:
 string- Default:
 "peertube"- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
The port that the local PeerTube web server will listen on.
- Type:
 16 bit unsigned integer; between 0 and 65535 (both inclusive)- Default:
 9000- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
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- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
The domain serving your PeerTube instance.
- Type:
 string- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
The peertube package to use.
- Type:
 package- Default:
 pkgs.peertube- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 - Notes:
 - Missing update script An update script is required for automatically tracking the latest release.
 
 - 
  
  
Whether to enable declarative plugin management for PeerTube .
- Type:
 boolean- Default:
 false- Declared in:
 - projects/PeerTube/services/peertube/module.nix
 
 - 
  
  
Base PeerTube package to use when using declarative plugin management. This overrides
services.peertube.package.- Type:
 package- Default:
 pkgs.peertube- Declared in:
 - projects/PeerTube/services/peertube/module.nix
 - Notes:
 - Missing update script An update script is required for automatically tracking the latest release.
 
 - 
  
  
List of packages with peertube plugins that should be added.
- Type:
 list of package- Default:
 [ ]- Declared in:
 - projects/PeerTube/services/peertube/module.nix
 
 - 
  
  
Configure local Redis server for PeerTube.
- Type:
 boolean- Default:
 false- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Use Unix socket.
- Type:
 boolean- Default:
 config.services.peertube.redis.createLocally- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
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- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Password for redis database.
- Type:
 null or absolute path- Default:
 null- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
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- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Secrets to run PeerTube. Generate one using
openssl rand -hex 32- Type:
 null or absolute path- Default:
 null- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
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- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Configuration for peertube.
- Type:
 open submodule of (JSON value)- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Enable automatic transcription of videos.
- Type:
 boolean- Default:
 false- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
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`."- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Configure local Postfix SMTP server for PeerTube.
- Type:
 boolean- Default:
 false- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
Password for smtp server.
- Type:
 null or absolute path- Default:
 null- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 - 
  
  
User account under which Peertube runs.
- Type:
 string- Default:
 "peertube"- Declared in:
 - nixos/modules/services/web-apps/peertube.nix
 
 
services.peertube.configureNginx
services.peertube.dataDirs
services.peertube.database.createLocally
services.peertube.database.host
services.peertube.database.name
services.peertube.database.passwordFile
services.peertube.database.port
services.peertube.database.user
services.peertube.enable
services.peertube.enableWebHttps
services.peertube.group
services.peertube.listenHttp
services.peertube.listenWeb
services.peertube.localDomain
services.peertube.package
services.peertube.plugins.enable
services.peertube.plugins.package
services.peertube.plugins.plugins
services.peertube.redis.createLocally
services.peertube.redis.enableUnixSocket
services.peertube.redis.host
services.peertube.redis.passwordFile
services.peertube.redis.port
services.peertube.secrets.secretsFile
services.peertube.serviceEnvironmentFile
services.peertube.settings
services.peertube.settings.video_transcription.enabled
services.peertube.settings.video_transcription.engine_path
services.peertube.smtp.createLocally
services.peertube.smtp.passwordFile
services.peertube.user
services.peertube-runner
- 
  
  
Whether to enable peertube-runner.
- Type:
 boolean- Default:
 false- Declared in:
 - nixos/modules/services/web-apps/peertube-runner.nix
 
 - 
  
  
Job types that this runner will execute.
- Type:
 non-empty (list of string)- Default:
 [ "vod-web-video-transcoding" "vod-hls-transcoding" "vod-audio-merge-transcoding" "live-rtmp-hls-transcoding" "video-studio-transcoding" "video-transcription" ]- Declared in:
 - nixos/modules/services/web-apps/peertube-runner.nix
 
 - 
  
  
Group under which peertube-runner runs.
- Type:
 string- Default:
 "prunner"- Declared in:
 - nixos/modules/services/web-apps/peertube-runner.nix
 
 - 
  
  
PeerTube instances to register this runner with.
- Type:
 attribute set of (submodule)- Default:
 { }- Declared in:
 - nixos/modules/services/web-apps/peertube-runner.nix
 
 - 
  
  
Path to a file containing a registration token for the PeerTube instance.
See how to generate registration tokens at https://docs.joinpeertube.org/admin/remote-runners#manage-remote-runners.
- Type:
 absolute path- Declared in:
 - nixos/modules/services/web-apps/peertube-runner.nix
 
 - 
  
  
Runner description declared to the PeerTube instance.
- Type:
 null or string- Default:
 null- Declared in:
 - nixos/modules/services/web-apps/peertube-runner.nix
 
 - 
  
  
Runner name declared to the PeerTube instance.
- Type:
 string- Declared in:
 - nixos/modules/services/web-apps/peertube-runner.nix
 
 - 
  
  
URL of the PeerTube instance.
- Type:
 string- Declared in:
 - nixos/modules/services/web-apps/peertube-runner.nix
 
 - 
  
  
The runner package to use.
- Type:
 package- Default:
 pkgs.peertube.runner- Declared in:
 - nixos/modules/services/web-apps/peertube-runner.nix
 - Notes:
 - Missing update script An update script is required for automatically tracking the latest release.
 
 - 
  
  
Configuration for peertube-runner.
See available configuration options at https://docs.joinpeertube.org/maintain/tools#configuration.
- Type:
 TOML value- Default:
 { }- Declared in:
 - nixos/modules/services/web-apps/peertube-runner.nix
 
 - 
  
  
User account under which peertube-runner runs.
- Type:
 string- Default:
 "prunner"- Declared in:
 - nixos/modules/services/web-apps/peertube-runner.nix
 
 
services.peertube-runner.enable
services.peertube-runner.enabledJobTypes
services.peertube-runner.group
services.peertube-runner.instancesToRegister
services.peertube-runner.instancesToRegister..registrationTokenFile 
services.peertube-runner.instancesToRegister..runnerDescription 
services.peertube-runner.instancesToRegister..runnerName 
services.peertube-runner.instancesToRegister..url 
services.peertube-runner.package
services.peertube-runner.settings
services.peertube-runner.user
Examples
basic-cli
{ programs.peertube-cli.enable = true; }
Declared in: projects/PeerTube/programs/peertube-cli/examples/basic.nix
basic-runner
{ services.peertube-runner = { enable = true; instancesToRegister = { # All instances must be registered here. They can't be registered using the CLI. # personal = { # url = "https://mypeertubeinstance.com"; # # See how to generate registration tokens at https://docs.joinpeertube.org/admin/remote-runners#manage-remote-runners. # registrationTokenFile = "/run/secrets/my-peertube-instance-registration-token"; # runnerName = "Main"; # }; }; }; }
Declared in: projects/PeerTube/services/peertube-runner/examples/basic.nix
basic-server
{ 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 ]; }
Declared in: projects/PeerTube/services/peertube/examples/basic.nix
This project is funded by NLnet through these subgrants:
- Entrust
 - Peertube-Transcode
 - Peertube-Livechat
 - PeerTube-mobile
 - Review
 - PeerTube
 - PeerTubeSearch
 - PeerTubeDesktop
 
Related links: