{ den, __findFile, modules, ... }: { modules.services.provides.rtmp-to-whip = { nixos = { config, pkgs, ... }: { systemd.services.init-rtmp-to-whip-network = { description = "Create rtmp-to-whip docker network"; after = [ "docker.service" "docker.socket" ]; requires = [ "docker.service" "docker.socket" ]; before = [ "docker-rtmp-to-whip.service" "docker-rtmp-to-whip-frontend.service" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { Type = "oneshot"; RemainAfterExit = true; }; script = '' ${pkgs.docker}/bin/docker network inspect rtmp-to-whip >/dev/null 2>&1 || \ ${pkgs.docker}/bin/docker network create rtmp-to-whip ''; }; virtualisation.oci-containers.containers = { rtmp-to-whip = { image = "reg.h.doloro.co.uk/doloro/rtmp-to-whip:latest-aarch64"; ports = [ "0.0.0.0:1935:1935" "0.0.0.0:6969:6969/udp" "127.0.0.1:3001:3000" ]; environment = { PUBLIC_DOMAIN = "stream.h.doloro.co.uk"; RTC_PORT = "6969"; SIGNUP_CODE = "mreowmreow-pawsatyou"; RUST_LOG = "info,warn"; }; volumes = [ "/data/rtmp-to-whip/db:/db" ]; extraOptions = [ "--network=rtmp-to-whip" ]; }; rtmp-to-whip-frontend = { image = "reg.h.doloro.co.uk/doloro/rtmp-to-whip-frontend:latest-aarch64"; ports = [ "127.0.0.1:3002:3000" ]; environment = { VITE_API_URL = "https://stream.h.doloro.co.uk/api"; }; extraOptions = [ "--network=rtmp-to-whip" ]; }; rtmp-to-whip-watchtower = { image = "ghcr.io/nicholas-fedor/watchtower:latest"; volumes = [ "/var/run/docker.sock:/var/run/docker.sock" ]; environment = { WATCHTOWER_CLEANUP = "true"; WATCHTOWER_POLL_INTERVAL = "300"; }; cmd = [ "rtmp-to-whip" "rtmp-to-whip-frontend" ]; }; }; networking.firewall = { allowedTCPPorts = [ 1935 ]; allowedUDPPorts = [ 6969 ]; }; services.caddy = pkgs.lib.mkIf config.services.caddy.enable { virtualHosts."stream.h.doloro.co.uk".extraConfig = '' handle /api* { reverse_proxy :3001 } handle { reverse_proxy :3002 } ''; }; }; }; }