PeerTube

A decentralised streaming video platform

This project is funded by NLnet through these subgrants:

Options

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
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
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.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 configuration mainly used for testing purposes.
{
  config,
  pkgs,
  ...
}:
let
  storageBase = "/var/lib/peertube";
  storageDir = subdir: "${storageBase}/${subdir}/";
in
{
  environment = {
    # Sets the initial password of the root user to a fixed value. Make sure to change the password afterwards!
    etc."peertube-envvars".text = ''
      PT_INITIAL_ROOT_PASSWORD=changeme
    '';
  };

  services.peertube = {
    enable = true;

    # The system user & their group under which peertube will run
    user = "peertube";
    group = "peertube";

    # 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";

    # 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";
      };
      log = {
        level = "debug";
      };
      storage = {
        tmp = storageDir "tmp";
        logs = storageDir "logs";
        cache = storageDir "cache";
        plugins = storageDir "plugins";
      };
    };

    plugins = {
      enable = true;

      # The plugins you wish to use.
      plugins = with pkgs; [
        peertube-plugin-akismet
        peertube-plugin-auth-ldap
        peertube-plugin-auth-openid-connect
        peertube-plugin-auth-saml2
        peertube-plugin-auto-block-videos
        peertube-plugin-auto-mute
        peertube-plugin-hello-world
        peertube-plugin-logo-framasoft
        peertube-plugin-matomo
        peertube-plugin-privacy-remover
        peertube-plugin-transcoding-custom-quality
        peertube-plugin-transcoding-profile-debug
        peertube-plugin-video-annotation
        peertube-theme-background-red
        peertube-theme-dark
        peertube-theme-framasoft

        peertube-plugin-livechat
      ];
    };

    # For initial password
    serviceEnvironmentFile = "/etc/peertube-envvars";
  };

  systemd.tmpfiles.settings =
    let
      dirArgs = {
        mode = "0700";
        inherit (config.services.peertube) user group;
      };
    in
    {
      "99-peertube-plugins-test-setup" = {
        "${storageBase}".d = dirArgs;
        "${storageDir "tmp"}".d = dirArgs;
        "${storageDir "logs"}".d = dirArgs;
        "${storageDir "cache"}".d = dirArgs;
        "${storageDir "plugins"}".d = dirArgs;
      };
    };
}