diff options
| author | Mel <einebeere@gmail.com> | 2024-11-14 18:20:48 +0100 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2024-11-14 18:20:48 +0100 |
| commit | 227a29b06e09ce765da12e5cab74f9c539c1fe1e (patch) | |
| tree | a5dbef95a824fe3dfcb886222ef86c7951ecb13e | |
| parent | d48e145294d938b5c9ae6c6f690fef1aeaad5c29 (diff) | |
| download | network-227a29b06e09ce765da12e5cab74f9c539c1fe1e.tar.zst network-227a29b06e09ce765da12e5cab74f9c539c1fe1e.zip | |
Dendrite service from lapin
Signed-off-by: Mel <einebeere@gmail.com>
| -rw-r--r-- | machines/lapin/default.nix | 1 | ||||
| -rw-r--r-- | services/dendrite.nix | 110 |
2 files changed, 111 insertions, 0 deletions
diff --git a/machines/lapin/default.nix b/machines/lapin/default.nix index e32d109..821f095 100644 --- a/machines/lapin/default.nix +++ b/machines/lapin/default.nix @@ -9,6 +9,7 @@ ../../modules/www.nix + ../../services/dendrite.nix ../../services/akkoma ]; diff --git a/services/dendrite.nix b/services/dendrite.nix new file mode 100644 index 0000000..5eecfd6 --- /dev/null +++ b/services/dendrite.nix @@ -0,0 +1,110 @@ +{ lib, pkgs, unstablePkgs, ... }: + +let + inherit (pkgs) dockerTools; + + dendriteDir = "/srv/dendrite"; + + dendrite = unstablePkgs.dendrite; + + baseImageArm = dockerTools.pullImage { + imageName = "alpine"; + imageDigest = "sha256:1e42bbe2508154c9126d48c2b8a75420c3544343bf86fd041fb7527e017a4b4a"; + sha256 = "06c0q5kk60i89y1d83a28wk282ymp806xjcsmlca4cwwqp590j0q"; + finalImageName = "alpine"; + finalImageTag = "3.20.3"; + os = "linux"; + arch = "arm64"; + }; + + dendriteImage = dockerTools.buildLayeredImage { + name = "dendrite"; + tag = dendrite.version; + fromImage = baseImageArm; + + contents = [ dendrite ]; + }; + +in +{ + virtualisation.oci-containers.containers = { + dendrite = { + imageFile = dendriteImage; + image = "dendrite:${dendrite.version}"; + ports = [ + "127.0.0.1:8008:8008" + "127.0.0.1:8448:8448" + ]; + + volumes = [ + "${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 = { + # TODO: pull through `dockerTools`. + image = "postgres:15-alpine"; + 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" ]; }; + }; + }; +} |
