62 lines
1.7 KiB
Nix
62 lines
1.7 KiB
Nix
{ config, lib, ... }:
|
|
let
|
|
cfg = config.aux.system.services.cockpit;
|
|
in
|
|
{
|
|
options = {
|
|
aux.system.services.cockpit = {
|
|
enable = lib.mkEnableOption "Enables Cockpit monitoring.";
|
|
domain = lib.mkOption {
|
|
default = "";
|
|
type = lib.types.str;
|
|
description = "The root domain that Cockpit will be hosted on.";
|
|
example = "example.com";
|
|
};
|
|
url = lib.mkOption {
|
|
default = "";
|
|
type = lib.types.str;
|
|
description = "The complete URL where Cockpit is hosted.";
|
|
example = "https://cockpit.example.com";
|
|
};
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
|
|
services = {
|
|
nginx.virtualHosts."${cfg.url}" = {
|
|
useACMEHost = cfg.domain;
|
|
forceSSL = true;
|
|
locations."/" = {
|
|
proxyPass = "http://127.0.0.1:9090";
|
|
extraConfig = ''
|
|
# Taken from https://garrett.github.io/cockpit-project.github.io/external/wiki/Proxying-Cockpit-over-NGINX
|
|
# Required to proxy the connection to Cockpit
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
|
|
# Required for web sockets to function
|
|
proxy_http_version 1.1;
|
|
proxy_buffering off;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
'';
|
|
};
|
|
};
|
|
|
|
cockpit = {
|
|
enable = true;
|
|
port = 9090;
|
|
settings = {
|
|
WebService = {
|
|
Origins = "https://${cfg.url} wss://${cfg.url}";
|
|
ProtocolHeader = "X-Forwarded-Proto";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
systemd.services.nginx.wants = [ config.systemd.services.cockpit.name ];
|
|
|
|
};
|
|
}
|