217 lines
5.4 KiB
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 ]]
|
|
}
|
|
}
|
|
}
|