1 { lib, pkgs, config, ... }:
3 scfg = config.myServices.websites.syden.peertube;
5 dataDir = "/var/lib/syden_peertube";
6 package = pkgs.webapps.peertube.override { sendmail = true; syden = true; light = "fr-FR"; };
7 env = config.myEnv.tools.syden_peertube;
10 options.myServices.websites.syden.peertube.enable = lib.mkEnableOption "enable Syden's website";
12 config = lib.mkIf scfg.enable {
13 services.duplyBackup.profiles.syden_peertube = {
15 remotes = ["eriomem" "ovh"];
17 users.users.peertube = {
18 uid = config.ids.uids.peertube;
20 description = "Peertube user";
21 useDefaultShell = true;
22 extraGroups = [ "keys" ];
24 users.groups.peertube.gid = config.ids.gids.peertube;
27 dest = "websites/syden/peertube";
34 port: ${toString env.listenPort}
37 hostname: 'record-links.immae.eu'
40 hostname: '${env.postgresql.socket}'
43 username: '${env.postgresql.user}'
44 password: '${env.postgresql.password}'
48 socket: '${env.redis.socket}'
53 sendmail: '/run/wrappers/bin/sendmail'
54 from_address: 'peertube@tools.immae.eu'
56 tmp: '${dataDir}/storage/tmp/'
57 avatars: '${dataDir}/storage/avatars/'
58 videos: '${dataDir}/storage/videos/'
59 streaming_playlists: '${dataDir}/storage/streaming-playlists/'
60 redundancy: '${dataDir}/storage/videos/'
61 logs: '${dataDir}/storage/logs/'
62 previews: '${dataDir}/storage/previews/'
63 thumbnails: '${dataDir}/storage/thumbnails/'
64 torrents: '${dataDir}/storage/torrents/'
65 captions: '${dataDir}/storage/captions/'
66 cache: '${dataDir}/storage/cache/'
67 plugins: '${dataDir}/storage/plugins/'
71 services.filesWatcher.syden_peertube = {
73 paths = [ config.secrets.fullPaths."websites/syden/peertube" ];
76 systemd.services.syden_peertube = {
77 description = "Peertube";
78 wantedBy = [ "multi-user.target" ];
79 after = [ "network.target" "postgresql.service" ];
80 wants = [ "postgresql.service" ];
82 environment.NODE_CONFIG_DIR = "${dataDir}/config";
83 environment.NODE_ENV = "production";
84 environment.HOME = package;
86 path = [ pkgs.nodejs pkgs.bashInteractive pkgs.ffmpeg pkgs.openssl ];
89 install -m 0750 -d ${dataDir}/config
90 ln -sf ${config.secrets.fullPaths."websites/syden/peertube"} ${dataDir}/config/production.yaml
91 ln -sf ${package}/config/default.yaml ${dataDir}/config/default.yaml
98 WorkingDirectory = package;
99 StateDirectory = "syden_peertube";
100 StateDirectoryMode = 0750;
103 ProtectControlGroups = true;
109 unitConfig.RequiresMountsFor = dataDir;
112 services.websites.env.production.vhostConfs.syden_peertube = {
115 certMainHost = "record-links.immae.eu";
116 hosts = [ "record-links.immae.eu" ];
121 RewriteCond %{REQUEST_URI} ^/socket.io [NC]
122 RewriteCond %{QUERY_STRING} transport=websocket [NC]
123 RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L]
125 RewriteCond %{REQUEST_URI} ^/tracker/socket [NC]
126 RewriteRule /(.*) ws://localhost:${toString env.listenPort}/$1 [P,NE,QSA,L]
128 ProxyPass / http://localhost:${toString env.listenPort}/
129 ProxyPassReverse / http://localhost:${toString env.listenPort}/
132 RequestHeader set X-Real-IP %{REMOTE_ADDR}s