diff --git a/cluster/staging/app/im/deploy/flake.lock b/cluster/staging/app/im/deploy/flake.lock new file mode 100644 index 0000000..bde4085 --- /dev/null +++ b/cluster/staging/app/im/deploy/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1669546925, + "narHash": "sha256-Gvtk9agz88tBgqmCdHl5U7gYttTkiuEd8/Rq1Im0pTg=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "fecf05d4861f3985e8dee73f08bc82668ef75125", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "fecf05d4861f3985e8dee73f08bc82668ef75125", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/cluster/staging/app/im/deploy/flake.nix b/cluster/staging/app/im/deploy/flake.nix new file mode 100644 index 0000000..180e91b --- /dev/null +++ b/cluster/staging/app/im/deploy/flake.nix @@ -0,0 +1,39 @@ +{ + description = "Synapse packaging for Deuxfleurs"; + + # nixpkgs 22.05 at 2022-11-29 + inputs.nixpkgs.url = "github:nixos/nixpkgs/fecf05d4861f3985e8dee73f08bc82668ef75125"; + + outputs = { self, nixpkgs }: + let + pkgs = import nixpkgs { + system = "x86_64-linux"; + }; + pypkgsOverlay = import ./python-packages.nix { + inherit pkgs; + fetchurl = builtins.fetchurl; + fetchgit = pkgs.fetchgit; + fetchhg = pkgs.fetchhg; + }; + pkgs2 = import nixpkgs { + system = "x86_64-linux"; + overlays = [ + (self: super: { + python3 = super.python3.override { + self = self.python3; + packageOverrides = pypkgsOverlay; + }; + }) + ]; + }; + synapseWithS3 = pkgs2.matrix-synapse.overridePythonAttrs (old: rec { + propagatedBuildInputs = old.propagatedBuildInputs ++ [ + pkgs2.python3.pkgs.synapse-s3-storage-provider + ]; + }); + in + { + packages.x86_64-linux.default = synapseWithS3; + #packages.x86_64-linux.default = pkgs2.python3.pkgs.synapse-s3-storage-provider; + }; +} diff --git a/cluster/staging/app/im/deploy/im-nix.hcl b/cluster/staging/app/im/deploy/im-nix.hcl new file mode 100644 index 0000000..7f53136 --- /dev/null +++ b/cluster/staging/app/im/deploy/im-nix.hcl @@ -0,0 +1,196 @@ +job "im" { + datacenters = ["neptune"] + type = "service" + + group "synapse" { + count = 1 + + network { + port "http" { + to = 8008 + } + } + + ephemeral_disk { + size = 10000 + } + + restart { + attempts = 10 + delay = "30s" + } + + constraint { + attribute = "${attr.unique.hostname}" + operator = "!=" + value = "caribou" + } + + task "restore-db" { + lifecycle { + hook = "prestart" + sidecar = false + } + + driver = "nix2" + config { + packages = [ + "#litestream" + ] + command = "litestream" + args = [ + "restore", "-config", "/etc/litestream.yml", "/ephemeral/homeserver.db", "-v" + ] + bind = { + "../alloc/data" = "/ephemeral", + "secrets/litestream.yml" = "/etc/litestream.yml" + } + } + user = "root" + + template { + data = file("../config/litestream.yml") + destination = "secrets/litestream.yml" + } + + resources { + memory = 100 + memory_max = 1000 + cpu = 1000 + } + } + + task "synapse" { + driver = "nix2" + config { + nixpkgs = "github:nixos/nixpkgs/ce6aa13369b667ac2542593170993504932eb836" + packages = [ + ".", + ] + command = "synapse_homeserver" + args = [ + "-n", + "-c", "/etc/matrix-synapse/homeserver.yaml" + ] + bind = { + "./secrets" = "/etc/matrix-synapse", + "../alloc/data" = "/ephemeral", + } + } + user = "root" + + template { + data = file("flake.nix") + destination = "flake.nix" + } + template { + data = file("python-packages.nix") + destination = "python-packages.nix" + } + template { + data = file("flake.lock") + destination = "flake.lock" + } + + template { + data = file("../config/homeserver.yaml") + destination = "secrets/homeserver.yaml" + } + + template { + data = file("../config/synapse.log.config.yaml") + destination = "secrets/synapse.log.config.yaml" + } + + template { + data = "{{ key \"secrets/synapse/signing_key\" }}" + destination = "secrets/signing_key" + } + + resources { + memory = 2000 + memory_max = 3000 + cpu = 1000 + } + + service { + port = "http" + tags = [ + "tricot matrix.home.adnab.me 100", + "tricot matrix.home.adnab.me:443 100", + "tricot-add-header Access-Control-Allow-Origin *", + ] + check { + type = "http" + path = "/" + interval = "10s" + timeout = "2s" + } + } + } + + task "media-async-upload" { + driver = "docker" + + config { + image = "lxpz/amd64_synapse:1.49.2-4" + readonly_rootfs = true + command = "/usr/local/bin/matrix-s3-async-sqlite" + work_dir = "/ephemeral" + volumes = [ + "../alloc/data:/ephemeral", + ] + } + + resources { + cpu = 100 + memory = 100 + memory_max = 500 + } + + template { + data = <