job "im" { datacenters = ["neptune"] type = "service" group "synapse" { count = 1 constraint { attribute = "${attr.unique.hostname}" operator = "=" value = "cariacou" } network { port "http" { to = 8008 } } ephemeral_disk { size = 1000 } task "restore-db" { lifecycle { hook = "prestart" sidecar = false } driver = "docker" config { image = "litestream/litestream:0.3.7" args = [ "restore", "-config", "/etc/litestream.yml", "/ephemeral/homeserver.db" ] volumes = [ "../alloc/data:/ephemeral", "secrets/litestream.yml:/etc/litestream.yml" ] } template { data = file("../config/litestream.yml") destination = "secrets/litestream.yml" } resources { memory = 1000 cpu = 1000 } } task "synapse" { driver = "docker" config { image = "matrixdotorg/synapse:v1.48.0" ports = [ "http" ] entrypoint = [ "/usr/local/bin/python" ] args = [ "-m", "synapse.app.homeserver", "-n", "-c", "/etc/matrix-synapse/homeserver.yaml" ] volumes = [ "secrets:/etc/matrix-synapse", "../alloc/data:/ephemeral", "/mnt/ssd/synapse:/data", ] } template { data = file("../config/homeserver.yaml") destination = "secrets/homeserver.yaml" } template { data = "{{ key \"secrets/synapse/signing_key\" }}" destination = "secrets/signing_key" } resources { memory = 1500 cpu = 1000 } restart { attempts = 3 delay = "30s" } 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 "replicate-db" { driver = "docker" config { image = "litestream/litestream:0.3.7" args = [ "replicate", "-config", "/etc/litestream.yml" ] volumes = [ "../alloc/data:/ephemeral", "secrets/litestream.yml:/etc/litestream.yml" ] } template { data = file("../config/litestream.yml") destination = "secrets/litestream.yml" } resources { memory = 500 cpu = 100 } } } }