]> git.immae.eu Git - perso/Immae/Config/Nix.git/blame - modules/private/websites/tools/peertube/default.nix
Add chatons infos
[perso/Immae/Config/Nix.git] / modules / private / websites / tools / peertube / default.nix
CommitLineData
ab8f306d 1{ lib, pkgs, config, ... }:
f3a8fab5 2let
ab8f306d 3 env = config.myEnv.tools.peertube;
4288c2f2 4 cfg = config.myServices.websites.tools.peertube;
e34b3079 5 pcfg = config.immaeServices.peertube;
f3a8fab5 6in {
4288c2f2 7 options.myServices.websites.tools.peertube = {
f3a8fab5
IB
8 enable = lib.mkEnableOption "enable Peertube's website";
9 };
10
11 config = lib.mkIf cfg.enable {
120bcf4d
IB
12 myServices.chatonsProperties.hostings.peertube = {
13 file.datetime = "2022-08-21T20:00:00";
14 hosting = {
15 name = "Peertube";
16 description = "Free software to take back control of your videos";
17 website = "https://peertube.immae.eu/";
18 logo = "https://peertube.immae.eu/client/assets/images/icons/icon-192x192.png";
19 type = "INSTANCE";
20 status.level = "OK";
21 status.description = "OK";
22 registration.load = "OPEN";
23 install.type = "PACKAGE";
24 };
25 };
26 myServices.chatonsProperties.services.peertube = {
27 file.datetime = "2022-08-21T20:00:00";
28 service = {
29 name = "Peertube";
30 description = "Free software to take back control of your videos";
31 website = "https://peertube.immae.eu/";
32 logo = "https://peertube.immae.eu/client/assets/images/icons/icon-192x192.png";
33 status.level = "OK";
34 status.description = "OK";
35 registration."" = ["MEMBER" "CLIENT"];
36 registration.load = "OPEN";
37 install.type = "PACKAGE";
38 };
39 software = {
40 name = "Peertube";
41 website = "https://joinpeertube.org/";
42 license.url = "https://github.com/Chocobozzz/PeerTube/blob/develop/LICENSE";
43 license.name = "GNU Affero General Public License";
44 version = pcfg.package.version;
45 source.url = "https://github.com/Chocobozzz/PeerTube";
46 };
47 };
e34b3079 48 immaeServices.peertube = {
d42bbbe6 49 enable = true;
da30ae4f 50 configFile = config.secrets.fullPaths."webapps/tools-peertube";
f3a8fab5 51 };
d42bbbe6 52 users.users.peertube.extraGroups = [ "keys" ];
f3a8fab5 53
4c4652aa 54 secrets.keys."webapps/tools-peertube" = {
f3a8fab5
IB
55 user = "peertube";
56 group = "peertube";
57 permissions = "0640";
58 text = ''
59 listen:
60 hostname: 'localhost'
ab8f306d 61 port: ${toString config.myEnv.ports.peertube}
f3a8fab5
IB
62 webserver:
63 https: true
64 hostname: 'peertube.immae.eu'
65 port: 443
f3a8fab5
IB
66 database:
67 hostname: '${env.postgresql.socket}'
68 port: 5432
69 suffix: '_prod'
70 username: '${env.postgresql.user}'
71 password: '${env.postgresql.password}'
72 pool:
73 max: 5
74 redis:
75 socket: '${env.redis.socket}'
76 auth: null
ab8f306d 77 db: ${env.redis.db}
f3a8fab5
IB
78 smtp:
79 transport: sendmail
80 sendmail: '/run/wrappers/bin/sendmail'
f3a8fab5
IB
81 from_address: 'peertube@tools.immae.eu'
82 storage:
d42bbbe6
IB
83 tmp: '${pcfg.dataDir}/storage/tmp/'
84 avatars: '${pcfg.dataDir}/storage/avatars/'
85 videos: '${pcfg.dataDir}/storage/videos/'
b639cc33 86 streaming_playlists: '${pcfg.dataDir}/storage/streaming-playlists/'
d42bbbe6
IB
87 redundancy: '${pcfg.dataDir}/storage/videos/'
88 logs: '${pcfg.dataDir}/storage/logs/'
89 previews: '${pcfg.dataDir}/storage/previews/'
90 thumbnails: '${pcfg.dataDir}/storage/thumbnails/'
91 torrents: '${pcfg.dataDir}/storage/torrents/'
92 captions: '${pcfg.dataDir}/storage/captions/'
93 cache: '${pcfg.dataDir}/storage/cache/'
b639cc33 94 plugins: '${pcfg.dataDir}/storage/plugins/'
3d11eafc 95 client_overrides: '${pcfg.dataDir}/storage/client-overrides/'
f3a8fab5 96 '';
4c4652aa 97 };
f3a8fab5 98
29f8cb85 99 services.websites.env.tools.modules = [
f3a8fab5
IB
100 "headers" "proxy" "proxy_http" "proxy_wstunnel"
101 ];
17f6eae9
IB
102 services.filesWatcher.peertube = {
103 restart = true;
104 paths = [ pcfg.configFile ];
105 };
106
29f8cb85 107 services.websites.env.tools.vhostConfs.peertube = {
f3a8fab5 108 certName = "eldiron";
7df420c2 109 addToCerts = true;
f3a8fab5
IB
110 hosts = [ "peertube.immae.eu" ];
111 root = null;
112 extraConfig = [ ''
f826c67c
IB
113 RewriteEngine On
114
115 RewriteCond %{REQUEST_URI} ^/socket.io [NC]
116 RewriteCond %{QUERY_STRING} transport=websocket [NC]
ab8f306d 117 RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L]
f826c67c
IB
118
119 RewriteCond %{REQUEST_URI} ^/tracker/socket [NC]
ab8f306d 120 RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L]
f826c67c 121
ab8f306d
IB
122 ProxyPass / http://localhost:${toString env.listenPort}/
123 ProxyPassReverse / http://localhost:${toString env.listenPort}/
f3a8fab5
IB
124
125 ProxyPreserveHost On
126 RequestHeader set X-Real-IP %{REMOTE_ADDR}s
f3a8fab5
IB
127 '' ];
128 };
129 };
130}