From 46538ad379d76b6af710950bfe5fa58f6ccf8e96 Mon Sep 17 00:00:00 2001 From: Sascha Koenig Date: Wed, 7 May 2025 23:46:40 +0200 Subject: [PATCH] Add vaultwarden and slash-nemoti services to m3-atlas --- hosts/m3-atlas/secrets.nix | 3 ++ .../services/containers/slash-nemoti.nix | 27 ++++++++++++++++ hosts/m3-atlas/services/default.nix | 1 + hosts/m3-atlas/services/vaultwarden.nix | 29 ++++++++++++++++++ secrets.nix | 1 + secrets/vaultwarden-env.age | Bin 0 -> 21989 bytes 6 files changed, 61 insertions(+) create mode 100644 hosts/m3-atlas/services/containers/slash-nemoti.nix create mode 100644 hosts/m3-atlas/services/vaultwarden.nix create mode 100644 secrets/vaultwarden-env.age diff --git a/hosts/m3-atlas/secrets.nix b/hosts/m3-atlas/secrets.nix index e37bac0..09996c0 100644 --- a/hosts/m3-atlas/secrets.nix +++ b/hosts/m3-atlas/secrets.nix @@ -29,6 +29,9 @@ file = ../../secrets/traefik.age; owner = "traefik"; }; + vaultwarden-env = { + file = ../../secrets/vaultwarden-env.age; + }; m3tam3re-secrets = { file = ../../secrets/m3tam3re-secrets.age; owner = "m3tam3re"; diff --git a/hosts/m3-atlas/services/containers/slash-nemoti.nix b/hosts/m3-atlas/services/containers/slash-nemoti.nix new file mode 100644 index 0000000..223e92e --- /dev/null +++ b/hosts/m3-atlas/services/containers/slash-nemoti.nix @@ -0,0 +1,27 @@ +{ + virtualisation.oci-containers.containers."slash" = { + image = "docker.io/yourselfhosted/slash:latest"; + ports = ["127.0.0.1:3016:5231"]; + volumes = [ + "slash_data:/var/opt/slash" + ]; + extraOptions = ["--ip=10.89.0.16" "--network=web"]; + }; + # Traefik configuration specific to littlelink + services.traefik.dynamicConfigOptions.http = { + services.slash.loadBalancer.servers = [ + { + url = "http://localhost:3016/"; + } + ]; + + routers.slash = { + rule = "Host(`l.nemoti.art`)"; + tls = { + certResolver = "godaddy"; + }; + service = "slash"; + entrypoints = "websecure"; + }; + }; +} diff --git a/hosts/m3-atlas/services/default.nix b/hosts/m3-atlas/services/default.nix index a5746cb..2e99305 100644 --- a/hosts/m3-atlas/services/default.nix +++ b/hosts/m3-atlas/services/default.nix @@ -10,6 +10,7 @@ ./searx.nix ./tailscale.nix ./traefik.nix + ./vaultwarden.nix ./wastebin.nix ]; } diff --git a/hosts/m3-atlas/services/vaultwarden.nix b/hosts/m3-atlas/services/vaultwarden.nix new file mode 100644 index 0000000..e45fc39 --- /dev/null +++ b/hosts/m3-atlas/services/vaultwarden.nix @@ -0,0 +1,29 @@ +{config, ...}: { + services.vaultwarden = { + enable = true; + backupDir = "/var/backup/vaultwarden"; + config = { + ROCKET_ADDRESS = "127.0.0.1"; + ROCKET_PORT = 3013; + }; + environmentFile = "${config.age.secrets.vaultwarden-env.path}"; + }; + + # Traefik configuration for headscale + services.traefik.dynamicConfigOptions.http = { + services.vaultwarden.loadBalancer.servers = [ + { + url = "http://localhost:3009/"; + } + ]; + + routers.vaultwarden = { + rule = "Host(`vw.m3ta.dev`)"; + tls = { + certResolver = "godaddy"; + }; + service = "vaultwarden"; + entrypoints = "websecure"; + }; + }; +} diff --git a/secrets.nix b/secrets.nix index 217a4e5..c02faf9 100644 --- a/secrets.nix +++ b/secrets.nix @@ -28,6 +28,7 @@ in { "secrets/searx.age".publicKeys = systems ++ users; "secrets/tailscale-key.age".publicKeys = systems ++ users; "secrets/traefik.age".publicKeys = systems ++ users; + "secrets/vaultwarden-env.age".publicKeys = systems ++ users; "secrets/wg-DE.age".publicKeys = systems ++ users; "secrets/wg-NL.age".publicKeys = systems ++ users; "secrets/wg-NO.age".publicKeys = systems ++ users; diff --git a/secrets/vaultwarden-env.age b/secrets/vaultwarden-env.age new file mode 100644 index 0000000000000000000000000000000000000000..4352c8cae2d48f15edb14ac15501c54c14560553 GIT binary patch literal 21989 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 Unh0LxSvynfT+3UgN|mzt027ytkO literal 0 HcmV?d00001