My Nix Configuration

[systems.caddy] add pinchflat service

pyrox.dev ee906241 3f26e51a

verified
Changed files
+87 -30
lib
systems
x86_64-linux
prefect
services
+1
lib/data/default.nix
···
{
data.hosts = builtins.fromTOML (builtins.readFile ./hosts.toml);
data.services = builtins.fromTOML (builtins.readFile ./services.toml);
}
···
{
data.hosts = builtins.fromTOML (builtins.readFile ./hosts.toml);
data.services = builtins.fromTOML (builtins.readFile ./services.toml);
+
data.tsNet = "coelacanth-dragon.ts.net";
}
+86 -30
systems/x86_64-linux/prefect/services/caddy.nix
···
-
{ pkgs, lib, ... }: let
pns = lib.py.data.services;
marvin = lib.py.data.hosts.marvin.ts.ip4;
-
reverseProxyToMarvin = port: {
-
extraConfig = ''
-
reverse_proxy http://${marvin}:${toString port}
-
'';
};
-
# Hosts that are just a reverse proxy declaration and nothing else
-
simpleHosts = [
-
"nextcloud"
-
"nextcloud-office"
-
"git"
-
"miniflux"
-
"iceshrimp"
-
"grafana"
-
"deemix"
-
"planka"
-
];
-
-
simpleHostAttrs = lib.mapAttrs' (name: value: lib.nameValuePair "${pns.${name}.extUrl}" (reverseProxyToMarvin (toString pns.${value}.port)))
-
(lib.genAttrs simpleHosts (name: name));
-
in {
services.caddy = {
enable = true;
package = pkgs.caddy.withPlugins {
plugins = [
"github.com/caddy-dns/desec@v0.0.0-20240526070323-822a6a2014b2"
-
"github.com/greenpau/caddy-security@v1.1.29"
];
-
hash = "sha256-nfBjtwqn7UOGRr5Aqy0y1u9AYhWU9TLjbdhZ9uAwtHY=";
};
email = "pyrox@pyrox.dev";
virtualHosts = {
# Just get TLS certs for mailserver
-
"mail.pyrox.dev" = {};
# Redirect old domains -> pyrox.dev
"blog.pyrox.dev" = {
-
serverAliases = ["www.pyrox.dev" "thehedgehog.me"];
extraConfig = ''
redir https://pyrox.dev{uri} permanent
'';
···
};
# Authentik
-
"${pns.authentik.extUrl}:443" = reverseProxyToMarvin pns.authentik.port;
-
"${pns.authentik.extUrl}:80" = reverseProxyToMarvin pns.authentik.port;
-
"http://${pns.authentik.extUrl}:389" = reverseProxyToMarvin 389;
-
"${pns.authentik.extUrl}:636" = reverseProxyToMarvin 636;
# Vaultwarden
${pns.vaultwarden.extUrl} = {
···
}
'';
};
-
# Jellyfin
${pns.jellyfin.extUrl} = {
extraConfig = ''
···
metrics /metrics
'';
};
-
} // simpleHostAttrs;
};
systemd.services.caddy.serviceConfig.CapabilityBoundingSet = "CAP_NET_BIND_SERVICE";
systemd.services.caddy.serviceConfig.AmbientCapabilities = "CAP_NET_BIND_SERVICE";
···
+
{ pkgs, lib, ... }:
+
let
pns = lib.py.data.services;
marvin = lib.py.data.hosts.marvin.ts.ip4;
+
tsNet = lib.py.data.tsNet;
+
reverseProxyToMarvin = port: ts: {
+
extraConfig = ''
+
reverse_proxy http://${marvin}:${toString port}
+
${if ts then "tailscale_auth" else ""}
+
'';
};
+
in
+
{
services.caddy = {
enable = true;
package = pkgs.caddy.withPlugins {
plugins = [
"github.com/caddy-dns/desec@v0.0.0-20240526070323-822a6a2014b2"
+
"github.com/greenpau/caddy-security@v1.1.31"
+
"github.com/tailscale/caddy-tailscale@v0.0.0-20250207163903-69a970c84556"
];
+
hash = "sha256-rvPZ/Lomx40tvlqqhUBIG9wCHJorN2FGus7gtO7ob/0=";
};
email = "pyrox@pyrox.dev";
virtualHosts = {
# Just get TLS certs for mailserver
+
"mail.pyrox.dev" = { };
# Redirect old domains -> pyrox.dev
"blog.pyrox.dev" = {
+
serverAliases = [
+
"www.pyrox.dev"
+
"thehedgehog.me"
+
];
extraConfig = ''
redir https://pyrox.dev{uri} permanent
'';
···
};
# Authentik
+
"${pns.authentik.extUrl}:443" = reverseProxyToMarvin pns.authentik.port false;
+
"${pns.authentik.extUrl}:80" = reverseProxyToMarvin pns.authentik.port false;
+
"http://${pns.authentik.extUrl}:389" = reverseProxyToMarvin 389 false;
+
"${pns.authentik.extUrl}:636" = reverseProxyToMarvin 636 false;
# Vaultwarden
${pns.vaultwarden.extUrl} = {
···
}
'';
};
# Jellyfin
${pns.jellyfin.extUrl} = {
extraConfig = ''
···
metrics /metrics
'';
};
+
# SIMPLE HOSTS
+
+
# Forgejo
+
${pns.git.extUrl} = {
+
extraConfig = ''
+
reverse_proxy http://${marvin}:${toString pns.git.port}
+
'';
+
};
+
+
# Grafana
+
${pns.grafana.extUrl} = {
+
extraConfig = ''
+
reverse_proxy http://${marvin}:${toString pns.grafana.port}
+
'';
+
};
+
+
# Miniflux
+
${pns.miniflux.extUrl} = {
+
extraConfig = ''
+
reverse_proxy http://${marvin}:${toString pns.miniflux.port}
+
'';
+
};
+
+
# Nextcloud
+
${pns.nextcloud.extUrl} = {
+
extraConfig = ''
+
reverse_proxy http://${marvin}:${toString pns.nextcloud.port}
+
'';
+
};
+
+
# Nextcloud-Office(Collabora)
+
${pns.nextcloud-office.extUrl} = {
+
extraConfig = ''
+
reverse_proxy http://${marvin}:${toString pns.nextcloud-office.port}
+
'';
+
};
+
+
# Planka
+
${pns.planka.extUrl} = {
+
extraConfig = ''
+
reverse_proxy http://${marvin}:${toString pns.planka.port}
+
'';
+
};
+
+
# Simple Tailscale Hosts
+
+
# Deemix
+
"${pns.deemix.tsHost}.${tsNet}" = {
+
extraConfig = ''
+
bind tailscale/${pns.deemix.tsHost}
+
tailscale_auth
+
reverse_proxy http://${marvin}:${toString pns.deemix.port}
+
'';
+
};
+
# Pinchflat
+
"${pns.pinchflat.tsHost}.${tsNet}" = {
+
extraConfig = ''
+
bind tailscale/${pns.pinchflat.tsHost}
+
tailscale_auth
+
reverse_proxy http://${marvin}:${toString pns.pinchflat.port}
+
'';
+
};
+
+
};
};
systemd.services.caddy.serviceConfig.CapabilityBoundingSet = "CAP_NET_BIND_SERVICE";
systemd.services.caddy.serviceConfig.AmbientCapabilities = "CAP_NET_BIND_SERVICE";