helm/reference/wallabag.nix
2021-01-09 20:04:32 +10:00

121 lines
3.4 KiB
Nix

{ pkgs, config, lib, ... }:
let
phppoolName = "wallabag";
dataDir = "/var/lib/wallabag";
vhost = "read.mossnet.local";
in
{
services.nginx.virtualHosts."${vhost}" = {
forceSSL = false;
enableACME = false;
root = "/var/lib/wallabag/web";
listen = [ { addr = "192.168.1.6"; port = 800; } ];
locations."/" = {
extraConfig = ''
try_files $uri /app.php$is_args$args;
'';
};
locations."/assets".root = "${dataDir}/web";
locations."~ ^/app\.php(/|$)" = {
extraConfig = ''
include ${pkgs.nginx}/conf/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass unix:${config.services.phpfpm.pools."${phppoolName}".socket};
fastcgi_param SCRIPT_FILENAME {pkgs.wallabag}/web/$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT {pkgs.wallabag}/web;
'';
};
locations."~ \.php$" = {
extraConfig = ''
return 404;
'';
};
};
services.postgresql = {
enable = true;
# Ensure the database, user, and permissions always exist
ensureDatabases = [ "wallabag" ];
ensureUsers = [
{ name = "wallabag";
ensurePermissions."DATABASE wallabag" = "ALL PRIVILEGES";
}
];
};
services.phpfpm.pools."${phppoolName}" = {
user = "wallabag";
group = "wallabag";
phpEnv."WALLABAG_DATA" = "/var/lib/wallabag";
phpEnv."PATH" = lib.makeBinPath [ pkgs.php ];
settings = {
"listen.owner" = "nginx";
"listen.group" = "nginx";
"user" = "wallabag";
"pm" = "dynamic";
"pm.max_children" = "75";
"pm.min_spare_servers" = "5";
"pm.max_spare_servers" = "20";
"pm.max_requests" = "10";
"catch_workers_output" = "1";
};
};
systemd.services.wallabag-install = {
description = "Wallabag install service";
wantedBy = [ "multi-user.target" ];
before = [ "phpfpm-wallabag.service" ];
after = [ "mysql.service" "postgresql.service" ];
path = [ pkgs.coreutils pkgs.php73 pkgs.php73Packages.composer ];
serviceConfig = {
User = "wallabag";
Type = "oneshot";
RemainAfterExit = "yes";
PermissionsStartOnly = true;
};
preStart = ''
mkdir -p "${dataDir}"
chown wallabag:nginx "${dataDir}"
'';
script = ''
echo "Setting up wallabag files in ${dataDir} ..."
cd "${dataDir}"
rm -rf var/cache/*
rm -f ${dataDir}/app
rm -f ${dataDir}/bin
ln -sf ${pkgs.wallabag}/app app
ln -sf ${pkgs.wallabag}/composer.{json,lock} .
ln -sf ${pkgs.wallabag}/bin/ bin
export WALLABAG_DATA="${dataDir}"
if [ ! -f installed ]; then
php /var/lib/wallabag/bin/console --env=prod doctrine:database:create --if-not-exists --no-interaction
php /var/lib/wallabag/bin/console --env=prod doctrine:migrations:migrate --no-interaction
# Until https://github.com/wallabag/wallabag/issues/3662 is fixed
yes no | php /var/lib/wallabag/bin/console --env=prod wallabag:install
touch installed
else
php ${pkgs.wallabag}/bin/console --env=prod doctrine:migrations:migrate --no-interaction
fi
php ${pkgs.wallabag}/bin/console --env=prod cache:clear
'';
};
users.extraUsers.wallabag = { group = "wallabag"; };
users.extraGroups.wallabag = { };
networking.firewall.allowedTCPPorts = [ 800 ];
}