aboutsummaryrefslogblamecommitdiff
path: root/nixops/modules/websites/tools/peertube/peertube.nix
blob: 75629bd269c1d4f23b7aa4d6221b2189db956b21 (plain) (tree)





























































































































































































                                                                                                                                                                                 
{ env, fetchedGithub, fetchurl, fetchzip, stdenv, writeText, pkgs, cacert }:
let
  varDir = "/var/lib/peertube";
  listenPort = env.listenPort;
  # Doesn't seem to work
  # patchedPackages = stdenv.mkDerivation (fetchedGithub ./peertube.json // rec {
  #   patches = [ ./ldap.patch ];
  #   installPhase = ''
  #     mkdir $out
  #     cp package.json yarn.lock $out/
  #     '';
  # });
  # yarnModules = pkgs.yarn2nix.mkYarnModules {
  #   name = "peertube-yarn-modules";
  #   packageJSON = "${patchedPackages}/package.json";
  #   yarnLock = "${patchedPackages}/yarn.lock";
  #   yarnNix = ./yarn-packages.nix;
  # };
  patchedServer = stdenv.mkDerivation (fetchedGithub ./peertube.json // rec {
    __noChroot = true;
    patches = [
      ./ldap.patch
      ./sendmail.patch
    ];
    buildPhase = ''
      export GIT_SSL_CAINFO=${cacert}/etc/ssl/certs/ca-bundle.crt
      export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
      export HOME=$PWD
      yarn install --pure-lockfile
      npm run build:server
      '';
    installPhase = ''
      mkdir $out
      cp -a dist/server $out
      '';
    buildInputs = [ pkgs.python pkgs.git pkgs.yarn pkgs.nodejs ];
  });
  webappDir = stdenv.mkDerivation rec {
    __noChroot = true;
    version = "v1.2.0";
    name = "peertube-${version}";
    src = fetchzip {
      url = "https://github.com/Chocobozzz/PeerTube/releases/download/${version}/${name}.zip";
      sha256 = "18fp3fy1crw67gdpc29nr38b5zy2f68l70w47zwp7dzhd8bbbipp";
    };
    patches = [ ./ldap_yarn.patch ];
    buildPhase = ''
      export GIT_SSL_CAINFO=${cacert}/etc/ssl/certs/ca-bundle.crt
      export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
      export HOME=$PWD
      yarn install --production --pure-lockfile
      rm -rf dist/server && cp -a ${patchedServer}/server dist
      '';
    installPhase = ''
      mkdir $out
      cp -a * $out
      '';
    buildInputs = [ pkgs.yarn pkgs.git pkgs.python ];
  };
  config = writeText "production.yaml" ''
        listen:
          hostname: 'localhost'
          port: ${env.listenPort}
        webserver:
          https: true
          hostname: 'peertube.immae.eu'
          port: 443
        trust_proxy:
          - 'loopback'
        database:
          hostname: '${env.postgresql.socket}'
          port: 5432
          suffix: '_prod'
          username: '${env.postgresql.user}'
          password: '${env.postgresql.password}'
          pool:
            max: 5
        redis:
          socket: '${env.redis.socket}'
          auth: null
          db: ${env.redis.db_index}
        ldap:
          enable: true
          ldap_only: false
          url: ldaps://${env.ldap.host}/${env.ldap.base}
          bind_dn: ${env.ldap.dn}
          bind_password: ${env.ldap.password}
          base: ${env.ldap.base}
          mail_entry: "mail"
          user_filter: "${env.ldap.filter}"
        smtp:
          transport: sendmail
          sendmail: '/run/wrappers/bin/sendmail'
          hostname: null
          port: 465 # If you use StartTLS: 587
          username: null
          password: null
          tls: true # If you use StartTLS: false
          disable_starttls: false
          ca_file: null # Used for self signed certificates
          from_address: 'peertube@immae.eu'
        storage:
          tmp: '${varDir}/storage/tmp/'
          avatars: '${varDir}/storage/avatars/'
          videos: '${varDir}/storage/videos/'
          redundancy: '${varDir}/storage/videos/'
          logs: '${varDir}/storage/logs/'
          previews: '${varDir}/storage/previews/'
          thumbnails: '${varDir}/storage/thumbnails/'
          torrents: '${varDir}/storage/torrents/'
          captions: '${varDir}/storage/captions/'
          cache: '${varDir}/storage/cache/'
        log:
          level: 'info'
        search:
          remote_uri:
            users: true
            anonymous: false
        trending:
          videos:
            interval_days: 7
        redundancy:
          videos:
            check_interval: '1 hour' # How often you want to check new videos to cache
            strategies: # Just uncomment strategies you want
        # Following are saved in local-production.json
        cache:
          previews:
            size: 500 # Max number of previews you want to cache
          captions:
            size: 500 # Max number of video captions/subtitles you want to cache
        admin:
          email: 'peertube@immae.eu'
        contact_form:
          enabled: true
        signup:
          enabled: false
          limit: 10
          requires_email_verification: false
          filters:
            cidr:
              whitelist: []
              blacklist: []
        user:
          video_quota: -1
          video_quota_daily: -1
        transcoding:
          enabled: false
          allow_additional_extensions: true
          threads: 1
          resolutions:
            240p: false
            360p: false
            480p: true
            720p: true
            1080p: true
          hls:
            enabled: false
        import:
          videos:
            http:
              enabled: true
            torrent:
              enabled: false
        instance:
          name: 'Immae’s PeerTube'
          short_description: 'PeerTube, a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.'
          description: '''
          terms: '''
          default_client_route: '/videos/trending'
          default_nsfw_policy: 'blur'
          customizations:
            javascript: '''
            css: '''
          robots: |
            User-agent: *
            Disallow:
          securitytxt:
            "# If you would like to report a security issue\n# you may report it to:\nContact: https://github.com/Chocobozzz/PeerTube/blob/develop/SECURITY.md\nContact: mailto:"
        services:
          # You can provide a reporting endpoint for Content Security Policy violations
          csp-logger:
          twitter:
            username: '@_immae'
            whitelisted: false
        '';
in
  {
    inherit varDir webappDir config listenPort;
  }