summary refs log tree commit diff
path: root/services
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2024-12-07 18:16:47 +0100
committerMel <einebeere@gmail.com>2024-12-07 18:16:47 +0100
commitd1a88ffa2c8cf5d6dd690f9059c0da059e01b716 (patch)
treeb05d964e2e5c692ce36ec3471939f1f32ba54593 /services
parenta511e64fab20700fad50dedd1f966b4605e637b5 (diff)
downloadnetwork-d1a88ffa2c8cf5d6dd690f9059c0da059e01b716.tar.zst
network-d1a88ffa2c8cf5d6dd690f9059c0da059e01b716.zip
Convert most services to streamed images and foundation
Signed-off-by: Mel <einebeere@gmail.com>
Diffstat (limited to 'services')
-rw-r--r--services/akkoma/default.nix91
-rw-r--r--services/cgit.nix6
-rw-r--r--services/dendrite.nix75
-rw-r--r--services/irc/soju.nix5
-rw-r--r--services/minecraft.nix6
-rw-r--r--services/pds.nix4
6 files changed, 38 insertions, 149 deletions
diff --git a/services/akkoma/default.nix b/services/akkoma/default.nix
index 8b89df7..939e9be 100644
--- a/services/akkoma/default.nix
+++ b/services/akkoma/default.nix
@@ -1,11 +1,11 @@
-{ lib, pkgs, unstablePkgs, auxiliaryPkgs, ... }:
+{ pkgs, unstablePkgs, auxiliaryPkgs, ... }:
 
 let
   inherit (pkgs) dockerTools;
   inherit (auxiliaryPkgs) common;
   inherit (unstablePkgs) fedifetcher;
 
-  akkomaLocalPort = "1111";
+  akkomaLocalPort = 1111;
   akkomaDir = "/srv/akkoma";
 
   akkoma = unstablePkgs.akkoma.overrideAttrs {
@@ -15,7 +15,7 @@ let
     '';
   };
 
-  akkomaImage = dockerTools.buildLayeredImage {
+  akkomaImage = dockerTools.streamLayeredImage {
     name = "akkoma";
     tag = akkoma.version;
     fromImage = common.alpine.base;
@@ -43,7 +43,7 @@ let
     tail -f /var/log/fedifetcher.log
   '';
 
-  fedifetcherImage = dockerTools.buildLayeredImage {
+  fedifetcherImage = dockerTools.streamLayeredImage {
     name = "fedifetcher";
     tag = fedifetcher.version;
     fromImage = common.alpine.base;
@@ -58,15 +58,14 @@ let
 
 in
 {
-  virtualisation.oci-containers.containers = {
+  foundation.service.akkoma = {
     akkoma = {
-      imageFile = akkomaImage;
-      image = "akkoma:${akkoma.version}";
-      ports = [ "127.0.0.1:${akkomaLocalPort}:4000"];
+      image = akkomaImage;
+      ports = [ [ akkomaLocalPort 4000 ] ];
 
       volumes = [
-        "${akkomaDir}/data:/var/lib/akkoma"
-        "${akkomaDir}/config:/opt/akkoma/config"
+        [ "${akkomaDir}/data" "/var/lib/akkoma" ]
+        [ "${akkomaDir}/config" "/opt/akkoma/config" ]
       ];
 
       # TODO: remove redundant variables
@@ -84,87 +83,29 @@ in
 
       entrypoint = "${akkoma}/docker-entrypoint.sh";
       workdir = "${akkoma}";
-
-      extraOptions = [
-        "--network-alias=akkoma"
-        "--network=akkoma"
-      ];
     };
 
-    akkoma-db = {
-      inherit (common.postgres14) image imageFile;
+    db = {
+      fullImage = common.postgres14;
 
-      volumes = [ "${akkomaDir}/pgdata:/var/lib/postgresql/data" ];
+      volumes = [ [ "${akkomaDir}/pgdata" "/var/lib/postgresql/data" ] ];
 
       environment = {
         "POSTGRES_DB" = "akkoma";
         "POSTGRES_USER" = "akkoma";
         "POSTGRES_PASSWORD" = "akkoma";
       };
-
-      extraOptions = [
-        "--network-alias=db"
-        "--network=akkoma"
-      ];
     };
 
-    akkoma-fedifetcher = {
-      imageFile = fedifetcherImage;
-      image = "fedifetcher:${fedifetcher.version}";
+    fedifetcher = {
+      image = fedifetcherImage;
 
       volumes = [
-        "${akkomaDir}/fedifetcher:/opt/fedifetcher"
-        "${akkomaDir}/fedifetcher.json:/etc/fedifetcher/config.json"
+        [ "${akkomaDir}/fedifetcher" "/opt/fedifetcher" ]
+        [ "${akkomaDir}/fedifetcher.json" "/etc/fedifetcher/config.json" ]
       ];
 
       entrypoint = "/bin/fedifetcher-entry.sh";
-
-      extraOptions = [
-        "--network-alias=db"
-        "--network=akkoma"
-      ];
-    };
-  };
-
-  # systemd configuration to combine containers.
-  # mostly condensed from compose2nix output.
-  # TODO: make this automatic!!
-  systemd = let
-    root = "docker-akkoma-root";
-    network = "docker-akkoma-network";
-
-    containerService = {
-      serviceConfig = {
-        Restart = lib.mkOverride 90 "always";
-        RestartMaxDelaySec = lib.mkOverride 90 "1m";
-        RestartSec = lib.mkOverride 90 "100ms";
-        RestartSteps = lib.mkOverride 90 9;
-      };
-      after = [ "${network}.service" ]; requires = [ "${network}.service" ];
-      partOf = [ "${root}.target" ]; wantedBy = [ "${root}.target" ];
-    };
-  in {
-    services = {
-      "docker-akkoma" = containerService;
-      "docker-akkoma-db" = containerService;
-      "docker-akkoma-fedifetcher" = containerService;
-
-      "${network}" = {
-        path = [ pkgs.docker ];
-        serviceConfig = {
-          Type = "oneshot";
-          RemainAfterExit = true;
-          ExecStop = "docker network rm -f akkoma";
-        };
-        script = ''
-          docker network inspect akkoma || docker network create akkoma --driver=bridge
-        '';
-        partOf = [ "${root}.target" ]; wantedBy = [ "${root}.target" ];
-      };
-    };
-
-    targets = {
-      "${root}" = { wantedBy = [ "multi-user.target" ]; };
     };
   };
 }
diff --git a/services/cgit.nix b/services/cgit.nix
index a60b0e7..f8c2930 100644
--- a/services/cgit.nix
+++ b/services/cgit.nix
@@ -11,9 +11,7 @@ let
   cgitDir = "/srv/cgit";
   gitDir = "/srv/git";
 
-  # TODO: replace `buildLayeredImage` with `streamLayeredImage`
-  # in the upcoming 24.11 release.
-  cgitImage = dockerTools.buildLayeredImage {
+  cgitImage = dockerTools.streamLayeredImage {
     name = "cgit";
     tag = cgit.version;
     fromImage = common.alpine.base;
@@ -36,7 +34,7 @@ let
 in
 {
   foundation.services.cgit = {
-    fullImage = { imageFile = cgitImage; image = "cgit:${cgit.version}"; };
+    image = cgitImage;
     ports = [ [ cgitLocalPort 80 ] ];
 
     volumes = [
diff --git a/services/dendrite.nix b/services/dendrite.nix
index 2987762..dcd4dc9 100644
--- a/services/dendrite.nix
+++ b/services/dendrite.nix
@@ -1,4 +1,4 @@
-{ lib, pkgs, unstablePkgs, auxiliaryPkgs, ... }:
+{ pkgs, unstablePkgs, auxiliaryPkgs, ... }:
 
 let
   inherit (pkgs) dockerTools;
@@ -8,7 +8,7 @@ let
 
   dendrite = unstablePkgs.dendrite;
 
-  dendriteImage = dockerTools.buildLayeredImage {
+  dendriteImage = dockerTools.streamLayeredImage {
     name = "dendrite";
     tag = dendrite.version;
     fromImage = common.alpine.base;
@@ -18,84 +18,33 @@ let
 
 in
 {
-  virtualisation.oci-containers.containers = {
+  foundation.service.dendrite = {
     dendrite = {
-      imageFile = dendriteImage;
-      image = "dendrite:${dendrite.version}";
-      ports = [ 
-        "127.0.0.1:8008:8008"
-        "127.0.0.1:8448:8448"
+      image = dendriteImage;
+      ports = [
+        [ 8008 8008 ]
+        [ 8448 8448 ]
       ];
 
       volumes = [
-        "${dendriteDir}/config:/etc/dendrite"
-        "${dendriteDir}/data:/var/dendrite"
+        [ "${dendriteDir}/config" "/etc/dendrite" ]
+        [ "${dendriteDir}/data" "/var/dendrite" ]
       ];
 
       entrypoint = "${dendrite}/bin/dendrite";
       workdir = "/etc/dendrite";
-      
-      dependsOn = [ "dendrite-db" ];
-
-      extraOptions = [
-        "--network-alias=dendrite"
-        "--network=dendrite"
-      ];
     };
 
-    dendrite-db = {
-      inherit (common.postgres15) image imageFile;
+    db = {
+      fullImage = common.postgres15;
 
-      volumes = [ "${dendriteDir}/pgdata:/var/lib/postgresql/data" ];
+      volumes = [ [ "${dendriteDir}/pgdata" "/var/lib/postgresql/data" ] ];
 
       environment = {
         "POSTGRES_DATABASE" = "dendrite";
         "POSTGRES_USER" = "dendrite";
         "POSTGRES_PASSWORD" = "TFbQi2cHnzwe26";
       };
-
-      extraOptions = [
-        "--network-alias=db"
-        "--network=dendrite"
-      ];
-    };
-  };
-
-  systemd = let
-    root = "docker-dendrite-root";
-    network = "docker-dendrite-network";
-
-    containerService = {
-      serviceConfig = {
-        Restart = lib.mkOverride 90 "always";
-        RestartMaxDelaySec = lib.mkOverride 90 "1m";
-        RestartSec = lib.mkOverride 90 "100ms";
-        RestartSteps = lib.mkOverride 90 9;
-      };
-      after = [ "${network}.service" ]; requires = [ "${network}.service" ];
-      partOf = [ "${root}.target" ]; wantedBy = [ "${root}.target" ];
-    };
-  in {
-    services = {
-      "docker-dendrite-db" = containerService;
-      "docker-dendrite" = containerService;
-
-      "${network}" = {
-        path = [ pkgs.docker ];
-        serviceConfig = {
-          Type = "oneshot";
-          RemainAfterExit = true;
-          ExecStop = "docker network rm -f dendrite";
-        };
-        script = ''
-          docker network inspect dendrite || docker network create dendrite --driver=bridge
-        '';
-        partOf = [ "${root}.target" ]; wantedBy = [ "${root}.target" ];
-      };
-    };
-
-    targets = {
-      "${root}" = { wantedBy = [ "multi-user.target" ]; };
     };
   };
 }
diff --git a/services/irc/soju.nix b/services/irc/soju.nix
index 75adfaa..f6c7ff0 100644
--- a/services/irc/soju.nix
+++ b/services/irc/soju.nix
@@ -8,7 +8,7 @@ let
   socketPort = "3030";
   sojuDir = "/srv/soju";
 
-  sojuImage = dockerTools.buildLayeredImage {
+  sojuImage = dockerTools.streamLayeredImage {
     name = soju.pname;
     tag = soju.version;
     fromImage = common.alpine.base;
@@ -24,8 +24,9 @@ in
 {
   virtualisation.oci-containers.containers = {
     soju = {
-      imageFile = sojuImage;
+      imageStream = sojuImage;
       image = "soju:${soju.version}";
+      # TODO: allow tailscale ports in foundation
       ports = [
         "${me.tailscale.ip}:${ircPort}:${ircPort}"
         "${me.tailscale.ip}:${socketPort}:${socketPort}"
diff --git a/services/minecraft.nix b/services/minecraft.nix
index 29e8e00..cd04e31 100644
--- a/services/minecraft.nix
+++ b/services/minecraft.nix
@@ -17,7 +17,7 @@ let
   minecraftDir = "/srv/mc";
   minecraftMemory = "8G";
 
-  minecraftImage = dockerTools.buildLayeredImage {
+  minecraftImage = dockerTools.streamLayeredImage {
     name = "minecraft";
     tag = minecraft.version;
     fromImage = common.alpine.base;
@@ -28,9 +28,9 @@ in
 {
   networking.firewall.allowedTCPPorts = [ minecraftPort ];
 
-  # TODO: put global ports and streamed images into foundation
+  # TODO: put global ports into foundation
   virtualisation.oci-containers.containers.minecraft = {
-    imageFile = minecraftImage;
+    imageStream = minecraftImage;
     image = "minecraft:${minecraft.version}";
     # expose minecraft service port globally.
     ports = [ "0.0.0.0:${toString minecraftPort}:${toString minecraftPort}" ];
diff --git a/services/pds.nix b/services/pds.nix
index 68ca66a..671dc6a 100644
--- a/services/pds.nix
+++ b/services/pds.nix
@@ -9,7 +9,7 @@ let
   pdsLocalPort = 16419;
   pdsDir = "/srv/pds";
 
-  pdsImage = dockerTools.buildLayeredImage {
+  pdsImage = dockerTools.streamLayeredImage {
     name = "pds";
     tag = pds.version;
     fromImage = common.alpine.base;
@@ -30,7 +30,7 @@ in
   };
 
   foundation.services.pds = {
-    fullImage = { imageFile = pdsImage; image = "pds:${pds.version}"; };
+    image = pdsImage;
     ports = [ [ pdsLocalPort 3000 ] ];
 
     volumes = [