at master 2.1 kB view raw
1{ pkgs, lib, ... }: 2{ 3 name = "frp"; 4 meta.maintainers = with lib.maintainers; [ zaldnoay ]; 5 nodes = { 6 frps = { 7 networking = { 8 useNetworkd = true; 9 useDHCP = false; 10 firewall.enable = false; 11 }; 12 13 systemd.network.networks."01-eth1" = { 14 name = "eth1"; 15 networkConfig.Address = "10.0.0.1/24"; 16 }; 17 18 services.frp = { 19 enable = true; 20 role = "server"; 21 settings = { 22 bindPort = 7000; 23 vhostHTTPPort = 80; 24 }; 25 }; 26 }; 27 28 frpc = { 29 networking = { 30 useNetworkd = true; 31 useDHCP = false; 32 }; 33 34 systemd.network.networks."01-eth1" = { 35 name = "eth1"; 36 networkConfig.Address = "10.0.0.2/24"; 37 }; 38 39 services.httpd = { 40 enable = true; 41 adminAddr = "admin@example.com"; 42 virtualHosts."test-appication" = 43 let 44 testdir = pkgs.writeTextDir "web/index.php" "<?php phpinfo();"; 45 in 46 { 47 documentRoot = "${testdir}/web"; 48 locations."/" = { 49 index = "index.php index.html"; 50 }; 51 }; 52 phpPackage = pkgs.php81; 53 enablePHP = true; 54 }; 55 56 services.frp = { 57 enable = true; 58 role = "client"; 59 settings = { 60 serverAddr = "10.0.0.1"; 61 serverPort = 7000; 62 proxies = [ 63 { 64 name = "web"; 65 type = "http"; 66 localPort = 80; 67 customDomains = [ "10.0.0.1" ]; 68 } 69 ]; 70 }; 71 }; 72 }; 73 }; 74 75 testScript = '' 76 start_all() 77 frps.wait_for_unit("frp.service") 78 frps.wait_for_open_port(80) 79 frpc.wait_for_unit("frp.service") 80 response = frpc.succeed("curl -fvvv -s http://127.0.0.1/") 81 assert "PHP Version ${pkgs.php81.version}" in response, "PHP version not detected" 82 response = frpc.succeed("curl -fvvv -s http://10.0.0.1/") 83 assert "PHP Version ${pkgs.php81.version}" in response, "PHP version not detected" 84 ''; 85}