aboutsummaryrefslogtreecommitdiff
path: root/nixops/modules/websites/tools/peertube/peertube.nix
blob: d2be5b61e39b0466937c90057160edd6566ab911 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
{ 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 = ''
    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@tools.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@tools.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;
  }