diff --git a/.sops.yaml b/.sops.yaml index 77aa455..e69d45d 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -46,6 +46,14 @@ creation_rules: age: - *pyramid + - path_regex: secrets/nginx/acme.json + key_groups: + - pgp: + - *swarsel + age: + - *twothreetunnel + - *eagleland + - path_regex: hosts/nixos/x86_64-linux/pyramid/secrets/[^/]+\.(yaml|json|env|ini|enc)$ key_groups: - pgp: diff --git a/SwarselSystems.org b/SwarselSystems.org index f602e41..562651c 100644 --- a/SwarselSystems.org +++ b/SwarselSystems.org @@ -2858,37 +2858,36 @@ This is my main server that I run at home. It handles most tasks that require bi swarselmodules.server = { diskEncryption = lib.mkForce false; - wireguard = lib.mkDefault true; - nfs = lib.mkDefault true; - nginx = lib.mkDefault true; - kavita = lib.mkDefault true; - restic = lib.mkDefault true; - jellyfin = lib.mkDefault true; - navidrome = lib.mkDefault true; - spotifyd = lib.mkDefault true; - mpd = lib.mkDefault true; - postgresql = lib.mkDefault true; - matrix = lib.mkDefault true; - nextcloud = lib.mkDefault true; - immich = lib.mkDefault true; - paperless = lib.mkDefault true; - transmission = lib.mkDefault true; - syncthing = lib.mkDefault true; - grafana = lib.mkDefault true; - emacs = lib.mkDefault true; - freshrss = lib.mkDefault true; - jenkins = lib.mkDefault false; - kanidm = lib.mkDefault true; - firefly-iii = lib.mkDefault true; - koillection = lib.mkDefault true; - radicale = lib.mkDefault true; - atuin = lib.mkDefault true; - forgejo = lib.mkDefault true; - ankisync = lib.mkDefault true; - # snipeit = lib.mkDefault false; - homebox = lib.mkDefault true; - opkssh = lib.mkDefault true; - garage = lib.mkDefault false; + nginx = true; # for php stuff + acme = false; # cert handled by proxy + wireguard = true; + + nfs = true; + kavita = true; + restic = true; + jellyfin = true; + navidrome = true; + spotifyd = true; + mpd = true; + postgresql = true; + matrix = true; + nextcloud = true; + immich = true; + paperless = true; + transmission = true; + syncthing = true; + grafana = true; + emacs = true; + freshrss = true; + kanidm = true; + firefly-iii = true; + koillection = true; + radicale = true; + atuin = true; + forgejo = true; + ankisync = true; + homebox = true; + opkssh = true; }; } @@ -3001,10 +3000,6 @@ This is my main server that I run at home. It handles most tasks that require bi server = true; }; - swarselmodules.server = { - nginx = lib.mkForce false; - }; - microvm.vms = let mkMicrovm = guestName: { @@ -3296,7 +3291,6 @@ This is my main server that I run at home. It handles most tasks that require bi swarselmodules = { server = { - nginx = lib.mkForce false; # we get this from the server profile wireguard = true; }; }; @@ -3914,7 +3908,6 @@ This machine mainly acts as my proxy server to stand before my local machines. topology.self = { icon = "devices.cloud-server"; }; - swarselmodules.server.nginx = false; swarselsystems = { flakePath = "/root/.dotfiles"; @@ -3963,7 +3956,7 @@ This machine mainly acts as my proxy server to stand before my local machines. postgresql = true; attic = true; garage = true; - hydra = true; + hydra = false; dns-hostrecord = true; }; @@ -4144,8 +4137,6 @@ This machine mainly acts as my proxy server to stand before my local machines. topology.self = { icon = "devices.cloud-server"; }; - swarselmodules.server.nginx = false; - swarselsystems = { flakePath = "/root/.dotfiles"; @@ -4168,7 +4159,6 @@ This machine mainly acts as my proxy server to stand before my local machines. swarselmodules.server = { nsd = true; - nginx = false; dns-hostrecord = true; }; } @@ -4370,7 +4360,6 @@ This machine mainly acts as my proxy server to stand before my local machines. }; swarselmodules.server = { - nginx = false; bastion = true; dns-hostrecord = true; # ssh = false; @@ -4578,7 +4567,7 @@ This machine mainly acts as my proxy server to stand before my local machines. "moonside" "winters" "belchsfactory" - # "eagleland" + "eagleland" ]; }; }; @@ -4590,8 +4579,8 @@ This machine mainly acts as my proxy server to stand before my local machines. }; swarselmodules.server = { - nginx = true; # for now - oauth2-proxy = true; # for now + nginx = true; + oauth2-proxy = true; dns-hostrecord = true; wireguard = true; }; @@ -4756,6 +4745,7 @@ This machine mainly acts as my proxy server to stand before my local machines. :END: ***** Main Configuration + :PROPERTIES: :CUSTOM_ID: h:96540b9c-1610-45f2-ba19-916051ab5e10 :END: @@ -4789,7 +4779,15 @@ This machine mainly acts as my proxy server to stand before my local machines. isBtrfs = true; isNixos = true; isLinux = true; - proxyHost = "eagleland"; + proxyHost = "twothreetunnel"; # mail shall not be proxied through twothreetunnel + server = { + wireguard.interfaces = { + wgProxy = { + isClient = true; + serverName = "twothreetunnel"; + }; + }; + }; }; } // lib.optionalAttrs (!minimal) { @@ -4797,6 +4795,8 @@ This machine mainly acts as my proxy server to stand before my local machines. mailserver = true; dns-hostrecord = true; postgresql = true; + nginx = true; + wireguard = true; }; swarselprofiles = { @@ -6271,6 +6271,7 @@ A breakdown of the flags being set: additions = final: _: import "${self}/pkgs/config" { inherit self config lib; pkgs = final; + nixosConfig = config; homeConfig = config.home-manager.users.${config.swarselsystems.mainUser}; }; in @@ -8440,7 +8441,7 @@ Here we just define some aliases for rebuilding the system, and we allow some in } #+end_src -**** System Packages +**** System Packages (Server Programs) :PROPERTIES: :CUSTOM_ID: h:6f2967d9-7e32-4605-bb5c-5e27770bec0f :END: @@ -8462,6 +8463,9 @@ Here we just define some aliases for rebuilding the system, and we allow some in swarsel-deploy tmux busybox + attic-client + swarsel-gens + swarsel-switch ]; }; } @@ -8530,16 +8534,64 @@ Here we just define some aliases for rebuilding the system, and we allow some in } #+end_src +**** acme + +#+begin_src nix-ts :tangle modules/nixos/server/acme.nix + { self, pkgs, lib, config, globals, ... }: + let + inherit (config.repo.secrets.common) dnsProvider dnsBase dnsMail; + + sopsFile = self + "/secrets/nginx/acme.json"; + in + { + options.swarselmodules.server.acme = lib.mkEnableOption "enable acme on server"; + config = lib.mkIf config.swarselmodules.server.acme { + environment.systemPackages = with pkgs; [ + lego + ]; + + sops = { + secrets = { + acme-creds = { format = "json"; key = ""; group = "acme"; inherit sopsFile; mode = "0660"; }; + }; + templates."certs.secret".content = '' + ACME_DNS_API_BASE = ${dnsBase} + ACME_DNS_STORAGE_PATH=${config.sops.secrets.acme-creds.path} + ''; + }; + + users.groups.acme.members = lib.mkIf config.swarselmodules.server.nginx [ "nginx" ]; + + security.acme = { + acceptTerms = true; + defaults = { + inherit dnsProvider; + email = dnsMail; + environmentFile = "${config.sops.templates."certs.secret".path}"; + reloadServices = [ "nginx" ]; + dnsPropagationCheck = true; + }; + certs."${globals.domains.main}" = { + domain = "*.${globals.domains.main}"; + }; + }; + + environment.persistence."/persist" = lib.mkIf config.swarselsystems.isImpermanence { + directories = [{ directory = "/var/lib/acme"; }]; + }; + + }; + } +#+end_src + **** NGINX :PROPERTIES: :CUSTOM_ID: h:302468d2-106a-41c8-b2bc-9fdc40064a9c :END: #+begin_src nix-ts :tangle modules/nixos/server/nginx.nix - { pkgs, lib, config, globals, ... }: + { pkgs, lib, config, ... }: let - inherit (config.repo.secrets.common) dnsProvider dnsBase dnsMail; - serviceUser = "nginx"; serviceGroup = serviceUser; @@ -8619,40 +8671,12 @@ Here we just define some aliases for rebuilding the system, and we allow some in }; }; config = lib.mkIf config.swarselmodules.server.nginx { - environment.systemPackages = with pkgs; [ - lego - ]; - sops = lib.mkIf (config.node.name == config.swarselsystems.proxyHost) { - secrets = { - acme-creds = { format = "json"; key = ""; group = "acme"; sopsFile = config.node.secretsDir + "/acme.json"; mode = "0660"; }; - }; - templates."certs.secret".content = '' - ACME_DNS_API_BASE = ${dnsBase} - ACME_DNS_STORAGE_PATH=${config.sops.secrets.acme-creds.path} - ''; - }; - - users.groups.acme.members = [ "nginx" ]; - - security.acme = lib.mkIf (config.node.name == config.swarselsystems.proxyHost) { - acceptTerms = true; - defaults = { - inherit dnsProvider; - email = dnsMail; - environmentFile = "${config.sops.templates."certs.secret".path}"; - reloadServices = [ "nginx" ]; - dnsPropagationCheck = true; - }; - certs."${globals.domains.main}" = { - domain = "*.${globals.domains.main}"; - }; - }; + swarselmodules.server.acme = lib.mkDefault true; networking.firewall.allowedTCPPorts = [ 80 443 ]; environment.persistence."/persist" = lib.mkIf config.swarselsystems.isImpermanence { - directories = [{ directory = "/var/lib/acme"; }]; files = [ dhParamsPathBase ]; }; @@ -14041,7 +14065,7 @@ or 2) use classic path addressing =aws s3 cp s3:/// s3:/// s3:/// s3:/// s3:/// s3:/// s3:///