109 lines
2.9 KiB
Nix
109 lines
2.9 KiB
Nix
{
|
|
config,
|
|
hostMeta,
|
|
siteConfig,
|
|
...
|
|
}:
|
|
{
|
|
services.mediawiki = {
|
|
enable = true;
|
|
name = siteConfig.wikiName;
|
|
url = "https://${hostMeta.publicDomain}";
|
|
webserver = "none";
|
|
passwordFile = config.age.secrets.mediawiki-admin-password.path;
|
|
|
|
database = {
|
|
type = "mysql";
|
|
name = siteConfig.database.name;
|
|
user = siteConfig.database.mediawikiUser;
|
|
passwordFile = config.age.secrets.mysql-mediawiki.path;
|
|
socket = "/run/mysqld/mysqld.sock";
|
|
createLocally = false;
|
|
};
|
|
|
|
extensions = {
|
|
ParserFunctions = null;
|
|
WikiEditor = null;
|
|
};
|
|
|
|
extraConfig = ''
|
|
$wgServer = "https://${hostMeta.publicDomain}";
|
|
$wgSitename = "${siteConfig.wikiName}";
|
|
$wgMetaNamespace = "${siteConfig.wikiName}";
|
|
$wgScriptPath = "";
|
|
$wgArticlePath = "/wiki/$1";
|
|
$wgUsePathInfo = true;
|
|
wfLoadSkin('Vector');
|
|
|
|
$wgEnableUploads = true;
|
|
$wgEnableEmail = false;
|
|
$wgShowIPinHeader = false;
|
|
|
|
$wgGroupPermissions['*']['edit'] = false;
|
|
$wgGroupPermissions['*']['createpage'] = false;
|
|
$wgGroupPermissions['*']['createtalk'] = false;
|
|
$wgGroupPermissions['*']['writeapi'] = false;
|
|
$wgGroupPermissions['*']['createaccount'] = false;
|
|
|
|
$wgGroupPermissions['user']['edit'] = true;
|
|
$wgGroupPermissions['user']['createpage'] = true;
|
|
$wgGroupPermissions['user']['createtalk'] = true;
|
|
$wgGroupPermissions['user']['upload'] = true;
|
|
$wgGroupPermissions['user']['writeapi'] = true;
|
|
'';
|
|
};
|
|
|
|
services.mediawiki.poolConfig =
|
|
if hostMeta.role == "primary" then
|
|
{
|
|
"pm" = "dynamic";
|
|
"pm.max_children" = 12;
|
|
"pm.start_servers" = 3;
|
|
"pm.min_spare_servers" = 2;
|
|
"pm.max_spare_servers" = 4;
|
|
"pm.max_requests" = 500;
|
|
}
|
|
else
|
|
{
|
|
"pm" = "dynamic";
|
|
"pm.max_children" = 6;
|
|
"pm.start_servers" = 2;
|
|
"pm.min_spare_servers" = 1;
|
|
"pm.max_spare_servers" = 3;
|
|
"pm.max_requests" = 500;
|
|
};
|
|
|
|
services.phpfpm.pools.mediawiki.phpOptions =
|
|
if hostMeta.role == "primary" then
|
|
''
|
|
opcache.enable=1
|
|
opcache.memory_consumption=192
|
|
opcache.interned_strings_buffer=16
|
|
opcache.max_accelerated_files=10000
|
|
realpath_cache_size=4096K
|
|
realpath_cache_ttl=600
|
|
''
|
|
else
|
|
''
|
|
opcache.enable=1
|
|
opcache.memory_consumption=128
|
|
opcache.interned_strings_buffer=16
|
|
opcache.max_accelerated_files=10000
|
|
realpath_cache_size=2048K
|
|
realpath_cache_ttl=600
|
|
'';
|
|
|
|
age.secrets.mediawiki-admin-password = {
|
|
file = ../secrets/mediawiki-admin-password.age;
|
|
owner = "mediawiki";
|
|
group = "mediawiki";
|
|
mode = "0400";
|
|
};
|
|
|
|
age.secrets.mysql-mediawiki = {
|
|
file = ../secrets/mysql-mediawiki.age;
|
|
owner = "mediawiki";
|
|
group = "mediawiki";
|
|
mode = "0400";
|
|
};
|
|
}
|