151 lines
5.6 KiB
Nix
151 lines
5.6 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.dov.reverse-proxy.nginx;
|
|
email = "susano@local.com";
|
|
# configFile = pkgs.writeText "duckdns_config"
|
|
# ''
|
|
# example config file bla bla
|
|
# '';
|
|
in {
|
|
options.dov.reverse-proxy.nginx = { enable = mkEnableOption "nginx config"; };
|
|
|
|
config = mkIf cfg.enable {
|
|
sops.secrets.duckdns-token = {
|
|
owner = config.services.nginx.user;
|
|
group = config.services.nginx.group;
|
|
};
|
|
|
|
# 1. Enable Nginx
|
|
|
|
# 2. Enable Automatic Certificate Management (ACME)
|
|
# NixOS uses acme.sh to handle Let's Encrypt certificates.
|
|
security.acme = {
|
|
acceptTerms = true;
|
|
defaults.email = email;
|
|
|
|
# Define the certificates you want to obtain.
|
|
# We use the DNS-01 challenge for wildcard domains.
|
|
certs = {
|
|
# Certificate for *.susano-lab.duckdns.org
|
|
"susano-lab.duckdns.org" = {
|
|
domain = "*.susano-lab.duckdns.org";
|
|
extraDomainNames = [ "susano-lab.duckdns.org" ];
|
|
dnsProvider = "duckdns";
|
|
# The credentialsFile points to the secret file we created.
|
|
credentialsFile = config.sops.secrets.duckdns-token.path;
|
|
group = config.services.nginx.group;
|
|
};
|
|
|
|
# Certificate for *.susano-tailscale.duckdns.org
|
|
"susano-tailscale.duckdns.org" = {
|
|
domain = "*.susano-tailscale.duckdns.org";
|
|
extraDomainNames = [ "susano-tailscale.duckdns.org" ];
|
|
dnsProvider = "duckdns";
|
|
credentialsFile = config.sops.secrets.duckdns-token.path;
|
|
group = config.services.nginx.group;
|
|
};
|
|
};
|
|
};
|
|
|
|
# 3. Define Nginx Reverse Proxy Configuration
|
|
services.nginx = {
|
|
enable = cfg.enable;
|
|
|
|
# Use httpConfig to define 'map' blocks at the correct level.
|
|
httpConfig = ''
|
|
# Map for susano-lab.duckdns.org domains
|
|
map $host $lab_proxy_pass {
|
|
"immich.susano-lab.duckdns.org" "http://192.168.1.57:2283";
|
|
"jellyfin.susano-lab.duckdns.org" "http://192.168.1.64:8096";
|
|
"jellyseer.susano-lab.duckdns.org" "http://192.168.1.68:5055";
|
|
"nginx.susano-lab.duckdns.org" "http://192.168.1.57:81";
|
|
"portainer.susano-lab.duckdns.org" "https://192.168.1.57:9443";
|
|
"qbittorrent.susano-lab.duckdns.org" "http://192.168.1.57:8080";
|
|
"radarr.susano-lab.duckdns.org" "http://192.168.1.57:7878";
|
|
"searxng.susano-lab.duckdns.org" "http://192.168.1.82:8080";
|
|
"sonarr.susano-lab.duckdns.org" "http://192.168.1.57:8989";
|
|
"susano-lab.duckdns.org" "http://192.168.1.53:8006";
|
|
default "http://127.0.0.1:8000"; # Optional: a default to avoid errors if no host matches
|
|
}
|
|
|
|
# Map for susano-tailscale.duckdns.org domains
|
|
map $host $tailscale_proxy_pass {
|
|
"immich.susano-tailscale.duckdns.org" "http://192.168.1.57:2283";
|
|
"searxng.susano-tailscale.duckdns.org" "http://192.168.1.82:8080";
|
|
default "http://127.0.0.1:8000"; # Optional: a default
|
|
}
|
|
|
|
# Map for susano-traefik.duckdns.org domains
|
|
map $host $traefik_proxy_pass {
|
|
"immich.susano-traefik.duckdns.org" "http://192.168.1.57:2283";
|
|
default "http://127.0.0.1:8000"; # Optional: a default
|
|
}
|
|
'';
|
|
|
|
virtualHosts = {
|
|
|
|
# === Group for susano-lab.duckdns.org subdomains ===
|
|
"susano-lab" = {
|
|
serverName = "susano-lab.duckdns.org";
|
|
serverAliases = [
|
|
"test.susano-lab.duckdns.org"
|
|
"immich.susano-lab.duckdns.org"
|
|
"jellyfin.susano-lab.duckdns.org"
|
|
"jellyseer.susano-lab.duckdns.org"
|
|
"nginx.susano-lab.duckdns.org"
|
|
"portainer.susano-lab.duckdns.org"
|
|
"qbittorrent.susano-lab.duckdns.org"
|
|
"radarr.susano-lab.duckdns.org"
|
|
"searxng.susano-lab.duckdns.org"
|
|
"sonarr.susano-lab.duckdns.org"
|
|
];
|
|
useACMEHost = "susano-lab.duckdns.org";
|
|
forceSSL = true;
|
|
|
|
locations."/".extraConfig = ''
|
|
# The map block is removed from here.
|
|
# We now use the variable defined in httpConfig.
|
|
proxy_pass $lab_proxy_pass;
|
|
|
|
# Standard proxy headers for websockets and correct IP forwarding.
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
'';
|
|
};
|
|
|
|
# === Group for susano-tailscale.duckdns.org subdomains ===
|
|
"susano-tailscale" = {
|
|
serverName = "susano-tailscale.duckdns.org";
|
|
serverAliases = [
|
|
"immich.susano-tailscale.duckdns.org"
|
|
"searxng.susano-tailscale.duckdns.org"
|
|
];
|
|
useACMEHost = "susano-tailscale.duckdns.org";
|
|
forceSSL = true;
|
|
|
|
locations."/".extraConfig = ''
|
|
# Use the second variable defined in httpConfig.
|
|
proxy_pass $tailscale_proxy_pass;
|
|
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|