at master 2.1 kB view raw
1{ pkgs, ... }: 2{ 3 name = "jitsi-meet"; 4 meta = with pkgs.lib; { 5 maintainers = teams.jitsi.members; 6 }; 7 8 nodes = { 9 client = 10 { nodes, pkgs, ... }: 11 { 12 }; 13 server = 14 { config, pkgs, ... }: 15 { 16 services.jitsi-meet = { 17 enable = true; 18 hostName = "server"; 19 }; 20 services.jitsi-videobridge.openFirewall = true; 21 22 networking.firewall.allowedTCPPorts = [ 23 80 24 443 25 ]; 26 27 services.nginx.virtualHosts.server = { 28 enableACME = true; 29 forceSSL = true; 30 }; 31 32 security.acme.acceptTerms = true; 33 security.acme.defaults.email = "me@example.org"; 34 security.acme.defaults.server = "https://example.com"; # self-signed only 35 36 specialisation.caddy = { 37 inheritParentConfig = true; 38 configuration = { 39 services.jitsi-meet = { 40 caddy.enable = true; 41 nginx.enable = false; 42 }; 43 services.caddy.virtualHosts.${config.services.jitsi-meet.hostName}.extraConfig = '' 44 tls internal 45 ''; 46 }; 47 }; 48 }; 49 }; 50 51 testScript = 52 { nodes, ... }: 53 '' 54 server.wait_for_unit("jitsi-videobridge2.service") 55 server.wait_for_unit("jicofo.service") 56 server.wait_for_unit("nginx.service") 57 server.wait_for_unit("prosody.service") 58 59 server.wait_until_succeeds( 60 "journalctl -b -u prosody -o cat | grep -q 'Authenticated as focus@auth.server'" 61 ) 62 server.wait_until_succeeds( 63 "journalctl -b -u prosody -o cat | grep -q 'Authenticated as jvb@auth.server'" 64 ) 65 66 client.wait_for_unit("network.target") 67 68 def client_curl(): 69 assert "<title>Jitsi Meet</title>" in client.succeed("curl -sSfkL http://server/") 70 71 client_curl() 72 73 with subtest("Testing backup service"): 74 server.succeed("${nodes.server.system.build.toplevel}/specialisation/caddy/bin/switch-to-configuration test") 75 server.wait_for_unit("caddy.service") 76 client_curl() 77 ''; 78}