summaryrefslogtreecommitdiffstats
path: root/nixos/tests/web-apps/mastodon/standard.nix
blob: d4769d4b39ec421c339e9f949b8c4b4f1ca24dfe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import ../../make-test-python.nix (
  { pkgs, ... }:
  let
    cert =
      pkgs:
      pkgs.runCommand "selfSignedCerts" { buildInputs = [ pkgs.openssl ]; } ''
        openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes -subj '/CN=mastodon.local' -days 36500
        mkdir -p $out
        cp key.pem cert.pem $out
      '';

    hosts = ''
      192.168.2.101 mastodon.local
    '';

  in
  {
    name = "mastodon-standard";
    meta.maintainers = with pkgs.lib.maintainers; [
      erictapen
      izorkin
      turion
    ];

    nodes = {
      server =
        { pkgs, ... }:
        {

          virtualisation.memorySize = 2048;

          networking = {
            interfaces.eth1 = {
              ipv4.addresses = [
                {
                  address = "192.168.2.101";
                  prefixLength = 24;
                }
              ];
            };
            extraHosts = hosts;
            firewall.allowedTCPPorts = [
              80
              443
            ];
          };

          security = {
            pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
          };

          services.mastodon = {
            enable = true;
            configureNginx = true;
            localDomain = "mastodon.local";
            enableUnixSocket = false;
            streamingProcesses = 2;
            smtp = {
              createLocally = false;
              fromAddress = "mastodon@mastodon.local";
            };
            extraConfig = {
              EMAIL_DOMAIN_ALLOWLIST = "example.com";
            };
          };

          services.nginx = {
            virtualHosts."mastodon.local" = {
              enableACME = pkgs.lib.mkForce false;
              sslCertificate = "${cert pkgs}/cert.pem";
              sslCertificateKey = "${cert pkgs}/key.pem";
            };
          };
        };

      client =
        { pkgs, ... }:
        {
          environment.systemPackages = [ pkgs.jq ];
          networking = {
            interfaces.eth1 = {
              ipv4.addresses = [
                {
                  address = "192.168.2.102";
                  prefixLength = 24;
                }
              ];
            };
            extraHosts = hosts;
          };

          security = {
            pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
          };
        };
    };

    testScript = import ./script.nix {
      inherit pkgs;
      extraInit = ''
        server.wait_for_unit("nginx.service")
        server.wait_for_open_port(443)
        server.wait_for_unit("redis-mastodon.service")
        server.wait_for_unit("postgresql.target")
        server.wait_for_open_port(5432)
      '';
    };
  }
)