paperless-ngx/paperless-ngx.nomad.hcl

217 lines
5.4 KiB
HCL

[[ $c := merge .paperless . -]]
job "[[ .paperless.instance ]]" {
[[ template "common/job_start.tpl" $c ]]
group "paperless" {
network {
mode = "bridge"
}
volume "data" {
type = "[[ .paperless.volumes.data.type ]]"
source = "[[ .paperless.volumes.data.source ]]"
[[- if ne .paperless.volumes.data.type "host" ]]
access_mode = "single-node-writer"
attachment_mode = "file-system"
[[- end ]]
}
[[- if .paperless.consumer.enabled ]]
volume "input" {
type = "[[ .paperless.volumes.input.type ]]"
source = "[[ .paperless.volumes.input.source ]]"
[[- if ne .paperless.volumes.input.type "host" ]]
access_mode = "single-node-writer"
attachment_mode = "file-system"
[[- end ]]
}
[[- end ]]
service {
name = "[[ .paperless.instance ]][[ .consul.suffix ]]"
port = 8994
[[ template "common/connect.tpl" $c ]]
[[ $c = merge .paperless.webserver . ]]
tags = [
"[[ $c.traefik.instance ]].enable=[[ if $c.traefik.enabled ]]true[[ else ]]false[[ end ]]",
"[[ $c.traefik.instance ]].http.routers.[[ .paperless.instance ]][[ .consul.suffix ]].rule=Host(`[[ (urlParse $c.public_url).Hostname ]]`)
[[- if not (regexp.Match "^/?$" (urlParse $c.public_url).Path) ]] && PathPrefix(`[[ (urlParse $c.public_url).Path ]]`)[[ end ]]",
"[[ $c.traefik.instance ]].http.routers.[[ .paperless.instance ]][[ .consul.suffix ]].entrypoints=[[ join $c.traefik.entrypoints "," ]]",
[[- if not (regexp.Match "^/?$" (urlParse $c.public_url).Path) ]]
"[[ $c.traefik.instance ]].http.middlewares.[[ .paperless.instance ]][[ .consul.suffix ]]-prefix.stripprefix.prefixes=[[ (urlParse .paperless.public_url).Path ]]",
"[[ $c.traefik.instance ]].http.routers.[[ .paperless.instance ]][[ .consul.suffix ]].middlewares=[[ .paperless.instance ]][[ $c.consul.suffix ]]-prefix,[[ template "common/traefik_middlewares.tpl" $c.traefik ]]",
[[- else ]]
"[[ $c.traefik.instance ]].http.routers.[[ .paperless.instance ]][[ .consul.suffix ]].middlewares=[[ template "common/traefik_middlewares.tpl" $c.traefik ]]",
[[- end ]]
]
}
[[ template "common/task.redis.tpl" ]]
task "webserver" {
driver = [[ $c.nomad.driver | toJSON ]]
config {
image = [[ $c.image | toJSON ]]
readonly_rootfs = true
pids_limit = 100
}
vault {
policies = ["[[ .paperless.instance ]][[ .consul.suffix ]]"]
env = false
disable_file = true
}
env {
PAPERLESS_MODE = "webserver"
PAPERLESS_BIND_ADDR = "127.0.0.1"
TMPDIR = "/alloc/tmp"
}
[[ template "common/file_env.tpl" merge $c.env .paperless.env ]]
volume_mount {
volume = "data"
destination = "/data"
}
volume_mount {
volume = "input"
destination = "/input"
}
[[ template "common/resources.tpl" $c.resources ]]
}
[[- if .paperless.consumer.enabled ]]
[[ $c := merge .paperless.consumer . ]]
task "consumer" {
driver = [[ $c.nomad.driver | toJSON ]]
lifecycle {
hook = "prestart"
sidecar = true
}
config {
image = [[ $c.image | toJSON ]]
readonly_rootfs = true
pids_limit = 100
}
vault {
policies = ["[[ .paperless.instance ]][[ .consul.suffix ]]"]
env = false
disable_file = true
}
env {
PAPERLESS_MODE = "consumer"
TMPDIR = "/alloc/tmp"
}
[[ template "common/file_env.tpl" merge $c.env .paperless.env ]]
volume_mount {
volume = "data"
destination = "/data"
}
volume_mount {
volume = "input"
destination = "/input"
}
[[ template "common/resources.tpl" $c.resources ]]
}
[[- end ]]
[[ $c := merge .paperless.scheduler . ]]
task "scheduler" {
driver = [[ $c.nomad.driver | toJSON ]]
lifecycle {
hook = "prestart"
sidecar = true
}
config {
image = [[ $c.image | toJSON ]]
readonly_rootfs = true
pids_limit = 100
}
vault {
policies = ["[[ .paperless.instance ]][[ .consul.suffix ]]"]
env = false
disable_file = true
}
env {
PAPERLESS_MODE = "scheduler"
TMPDIR = "/alloc/tmp"
}
[[ template "common/file_env.tpl" merge $c.env .paperless.env ]]
volume_mount {
volume = "data"
destination = "/data"
}
volume_mount {
volume = "input"
destination = "/input"
}
[[ template "common/resources.tpl" $c.resources ]]
}
[[ $c := merge .paperless.task_queue . ]]
task "task-queue" {
driver = [[ $c.nomad.driver | toJSON ]]
lifecycle {
hook = "prestart"
sidecar = true
}
config {
image = [[ $c.image | toJSON ]]
readonly_rootfs = true
pids_limit = 300
}
vault {
policies = ["[[ .paperless.instance ]][[ .consul.suffix ]]"]
env = false
disable_file = true
}
env {
PAPERLESS_MODE = "task-queue"
TMPDIR = "/alloc/tmp"
}
[[ template "common/file_env.tpl" merge $c.env .paperless.env ]]
volume_mount {
volume = "data"
destination = "/data"
}
volume_mount {
volume = "input"
destination = "/input"
}
[[ template "common/resources.tpl" $c.resources ]]
}
}
}