job "garage" { datacenters = ["dc1", "belair", "saturne"] type = "system" constraint { attribute = "${attr.cpu.arch}" value = "amd64" } group "garage" { task "server" { driver = "docker" config { image = "lxpz/garage_amd64:3" port_map { rpc_port = 3901 api_port = 3900 } volumes = [ "/mnt/storage/garage/data:/garage/data", "/mnt/ssd/garage/meta:/garage/meta", "secrets/garage.toml:/garage/config.toml", "secrets/garage-ca.crt:/garage/garage-ca.crt", "secrets/garage.crt:/garage/garage.crt", "secrets/garage.key:/garage/garage.key", ] } template { data = "{{ key \"configuration/garage/garage.toml\" }}" destination = "secrets/garage.toml" } template { data = "{{ key \"secrets/garage/garage-ca.crt\" }}" destination = "secrets/garage-ca.crt" } template { data = "{{ key \"secrets/garage/garage.crt\" }}" destination = "secrets/garage.crt" } template { data = "{{ key \"secrets/garage/garage.key\" }}" destination = "secrets/garage.key" } resources { memory = 500 cpu = 2000 network { port "rpc_port" { static = "3901" } port "api_port" {} } } service { tags = [ "garage_api", "traefik.enable=true", "traefik.frontend.entryPoints=https,http", "traefik.frontend.rule=Host:garage.deuxfleurs.fr" ] port = "api_port" address_mode = "host" name = "garage-api" check { type = "tcp" port = "api_port" interval = "60s" timeout = "5s" check_restart { limit = 3 grace = "90s" ignore_warnings = false } } } service { tags = ["garage-rpc"] port = "rpc_port" address_mode = "host" name = "garage-rpc" check { type = "tcp" port = "rpc_port" interval = "60s" timeout = "5s" check_restart { limit = 3 grace = "90s" ignore_warnings = false } } } } } }