1{ lib, config, ... }:
2
3rec {
4 name = "wordpress";
5 meta = with lib.maintainers; {
6 maintainers = [
7 flokli
8 grahamc # under duress!
9 mmilata
10 ];
11 };
12
13 nodes =
14 lib.foldl
15 (
16 a: version:
17 let
18 package = config.node.pkgs."wordpress_${version}";
19 in
20 a
21 // {
22 "wp${version}_httpd" = _: {
23 services.httpd.adminAddr = "webmaster@site.local";
24 services.httpd.logPerVirtualHost = true;
25
26 services.wordpress.webserver = "httpd";
27 services.wordpress.sites = {
28 "site1.local" = {
29 database.tablePrefix = "site1_";
30 inherit package;
31 };
32 "site2.local" = {
33 database.tablePrefix = "site2_";
34 inherit package;
35 };
36 };
37
38 networking.firewall.allowedTCPPorts = [ 80 ];
39 networking.hosts."127.0.0.1" = [
40 "site1.local"
41 "site2.local"
42 ];
43 };
44
45 "wp${version}_nginx" = _: {
46 services.wordpress.webserver = "nginx";
47 services.wordpress.sites = {
48 "site1.local" = {
49 database.tablePrefix = "site1_";
50 inherit package;
51 };
52 "site2.local" = {
53 database.tablePrefix = "site2_";
54 inherit package;
55 };
56 };
57
58 networking.firewall.allowedTCPPorts = [ 80 ];
59 networking.hosts."127.0.0.1" = [
60 "site1.local"
61 "site2.local"
62 ];
63 };
64
65 "wp${version}_caddy" = _: {
66 services.wordpress.webserver = "caddy";
67 services.wordpress.sites = {
68 "site1.local" = {
69 database.tablePrefix = "site1_";
70 inherit package;
71 };
72 "site2.local" = {
73 database.tablePrefix = "site2_";
74 inherit package;
75 };
76 };
77
78 networking.firewall.allowedTCPPorts = [
79 80
80 443
81 ];
82 networking.hosts."127.0.0.1" = [
83 "site1.local"
84 "site2.local"
85 ];
86 };
87 }
88 )
89 { }
90 [
91 "6_7"
92 "6_8"
93 ];
94
95 testScript = ''
96 import re
97
98 start_all()
99
100 ${lib.concatStrings (
101 lib.mapAttrsToList (name: value: ''
102 ${name}.wait_for_unit("${(value null).services.wordpress.webserver}")
103 '') nodes
104 )}
105
106 site_names = ["site1.local", "site2.local"]
107
108 for machine in (${lib.concatStringsSep ", " (builtins.attrNames nodes)}):
109 for site_name in site_names:
110 machine.wait_for_unit(f"phpfpm-wordpress-{site_name}")
111
112 with subtest("website returns welcome screen"):
113 assert "Welcome to the famous" in machine.succeed(f"curl -k -L {site_name}")
114
115 with subtest("wordpress-init went through"):
116 info = machine.get_unit_info(f"wordpress-init-{site_name}")
117 assert info["Result"] == "success"
118
119 with subtest("secret keys are set"):
120 pattern = re.compile(r"^define.*NONCE_SALT.{64,};$", re.MULTILINE)
121 assert pattern.search(
122 machine.succeed(f"cat /var/lib/wordpress/{site_name}/secret-keys.php")
123 )
124 '';
125}