feat: nixos module for server and redis
This commit is contained in:
parent
887b517445
commit
97544ab816
85
flake.nix
85
flake.nix
@ -11,7 +11,7 @@
|
|||||||
pkgs-stable = nixpkgs-stable.legacyPackages.${system};
|
pkgs-stable = nixpkgs-stable.legacyPackages.${system};
|
||||||
pname = "some-automoderation";
|
pname = "some-automoderation";
|
||||||
version = "0.0.1";
|
version = "0.0.1";
|
||||||
in {
|
in rec {
|
||||||
devShells.default = pkgs.mkShell {
|
devShells.default = pkgs.mkShell {
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
pkgs.go
|
pkgs.go
|
||||||
@ -40,5 +40,88 @@
|
|||||||
};
|
};
|
||||||
default = some-automoderation;
|
default = some-automoderation;
|
||||||
};
|
};
|
||||||
|
nixosModules.some-automoderation-module = { lib, pkgs, config, ... }:
|
||||||
|
let
|
||||||
|
cfg = config.services.${pname};
|
||||||
|
in {
|
||||||
|
options.services.${pname} = {
|
||||||
|
enable =
|
||||||
|
lib.mkEnableOption "Enable Some-Automoderation web service";
|
||||||
|
host = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "127.0.0.1";
|
||||||
|
description = "Host to bind to.";
|
||||||
|
};
|
||||||
|
useNginx = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description =
|
||||||
|
"Whether to set up nginx reverse proxy";
|
||||||
|
};
|
||||||
|
port = lib.mkOption {
|
||||||
|
type = lib.types.int;
|
||||||
|
default = 8090;
|
||||||
|
description =
|
||||||
|
"Port to listen on. Use 443 for tls when no nginx, usual plaintext is 8090.";
|
||||||
|
};
|
||||||
|
redisPort = lib.mkOption {
|
||||||
|
type = lib.types.int;
|
||||||
|
default = 7777;
|
||||||
|
description = "Port on which to connect to redis database.";
|
||||||
|
};
|
||||||
|
useHostTls = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description =
|
||||||
|
"Whether virtual host should enable NixOS ACME certs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config =
|
||||||
|
let
|
||||||
|
username = "${pname}";
|
||||||
|
groupname = "${pname}";
|
||||||
|
in
|
||||||
|
lib.mkIf cfg.enable {
|
||||||
|
users.groups."${groupname}" = { };
|
||||||
|
users.users."${username}" = {
|
||||||
|
isNormalUser = true; # needed to allow for home dir
|
||||||
|
group = "${groupname}";
|
||||||
|
};
|
||||||
|
systemd.services.${pname} = {
|
||||||
|
description = "Some Automoderation systemd service";
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
startLimitIntervalSec = 30;
|
||||||
|
startLimitBurst = 10;
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = let
|
||||||
|
serveCliArg =
|
||||||
|
"--port ${toString cfg.port} --redisPort ${toString cfg.redisPort}";
|
||||||
|
in "${packages.some-automoderation}/bin/${pname} ${serveCliArg}";
|
||||||
|
Restart = "on-failure";
|
||||||
|
User = "${username}";
|
||||||
|
Group = "${groupname}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services.nginx = lib.mkIf cfg.useNginx {
|
||||||
|
virtualHosts.${cfg.host} = {
|
||||||
|
forceSSL = cfg.useHostTls;
|
||||||
|
enableACME = cfg.useHostTls;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass = "http://127.0.0.1:${toString cfg.port}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services.redis.servers.${pname} = {
|
||||||
|
enable = true;
|
||||||
|
user = "${username}";
|
||||||
|
port = cfg.redisPort;
|
||||||
|
settings = {
|
||||||
|
notify-keyspace-events = "KEA";
|
||||||
|
}
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user