This commit is contained in:
Daniel Berteaud 2023-12-21 23:32:14 +01:00
parent 46228c4ac3
commit 46e0010e5f
6 changed files with 28 additions and 27 deletions

View File

@ -1,3 +1,3 @@
Kind = "service-defaults" Kind = "service-defaults"
Name = "[[ .vaultwarden.instance ]][[ .consul.suffix ]]" Name = "[[ .instance ]][[ .consul.suffix ]]"
Protocol = "http" Protocol = "http"

View File

@ -4,5 +4,5 @@ set -euo pipefail
[[- template "common/vault.mkpgrole.sh.tpl" [[- template "common/vault.mkpgrole.sh.tpl"
dict "ctx" . dict "ctx" .
"config" (dict "role" .vaultwarden.instance "database" "postgres") "config" (dict "role" .instance "database" "postgres")
]] ]]

View File

@ -1 +1 @@
[[ template "common/mv_conf.sh.tpl" dict "ctx" . "services" (dict "vaultwarden" .vaultwarden.instance) ]] [[ template "common/mv_conf.sh" dict "ctx" . "services" (dict "vaultwarden" .instance) ]]

View File

@ -1,8 +1,9 @@
--- ---
# Name of this instance (job and service name)
instance: vaultwarden
vaultwarden: vaultwarden:
# Name of this instance (job and service name)
instance: vaultwarden
# Server settings # Server settings
server: server:

View File

@ -1,7 +1,7 @@
path "[[ .vault.prefix ]]kv/data/service/[[ .vaultwarden.instance ]]" { path "[[ .vault.prefix ]]kv/data/service/[[ .instance ]]" {
capabilities = ["read"] capabilities = ["read"]
} }
path "[[ .vault.prefix ]]database/creds/[[ .vaultwarden.instance ]]" { path "[[ .vault.prefix ]]database/creds/[[ .instance ]]" {
capabilities = ["read"] capabilities = ["read"]
} }

View File

@ -1,7 +1,7 @@
[[ $c := merge .vaultwarden.server . -]] [[ $c := merge .vaultwarden.server . -]]
job "[[ .vaultwarden.instance ]]" { job "[[ .instance ]]" {
[[ template "common/job_start.tpl" $c ]] [[ template "common/job_start" $c ]]
group "vaultwarden" { group "vaultwarden" {
count = [[ $c.count ]] count = [[ $c.count ]]
@ -20,10 +20,10 @@ job "[[ .vaultwarden.instance ]]" {
} }
service { service {
name = "[[ .vaultwarden.instance ]][[ $c.consul.suffix ]]" name = "[[ .instance ]][[ .consul.suffix ]]"
port = 8234 port = 8234
[[ template "common/connect.tpl" $c ]] [[ template "common/connect" $c ]]
check { check {
type = "http" type = "http"
@ -45,27 +45,27 @@ job "[[ .vaultwarden.instance ]]" {
"[[ $a.traefik.instance ]].enable=true", "[[ $a.traefik.instance ]].enable=true",
[[- end ]] [[- end ]]
# Admin interface # Admin interface
"[[ $a.traefik.instance ]].http.routers.[[ .vaultwarden.instance ]][[ $a.consul.suffix ]]-admin.rule=Host(`[[ (urlParse $c.public_url).Hostname ]]`) && PathPrefix(`[[ (urlParse $c.public_url).Path | regexp.Replace "/$" "" ]]/admin`)", "[[ $a.traefik.instance ]].http.routers.[[ .instance ]][[ .consul.suffix ]]-admin.rule=Host(`[[ (urlParse $c.public_url).Hostname ]]`) && PathPrefix(`[[ (urlParse $c.public_url).Path | regexp.Replace "/$" "" ]]/admin`)",
"[[ $a.traefik.instance ]].http.routers.[[ .vaultwarden.instance ]][[ $a.consul.suffix ]]-admin.entrypoints=[[ join $a.traefik.entrypoints "," ]]", "[[ $a.traefik.instance ]].http.routers.[[ .instance ]][[ .consul.suffix ]]-admin.entrypoints=[[ join $a.traefik.entrypoints "," ]]",
"[[ $a.traefik.instance ]].http.routers.[[ .vaultwarden.instance ]][[ $a.consul.suffix ]]-admin.priority=200", "[[ $a.traefik.instance ]].http.routers.[[ .instance ]][[ .consul.suffix ]]-admin.priority=200",
"[[ $a.traefik.instance ]].http.routers.[[ .vaultwarden.instance ]][[ $a.consul.suffix ]].middlewares=[[ template "common/traefik_middlewares.tpl" $a.traefik ]]", "[[ $a.traefik.instance ]].http.routers.[[ .instance ]][[ .consul.suffix ]].middlewares=[[ template "common/traefik_middlewares" $a.traefik ]]",
# Main interface # Main interface
"[[ $c.traefik.instance ]].http.routers.[[ .vaultwarden.instance ]][[ $c.consul.suffix ]].rule=Host(`[[ (urlParse $c.public_url).Hostname ]]`) "[[ $c.traefik.instance ]].http.routers.[[ .instance ]][[ .consul.suffix ]].rule=Host(`[[ (urlParse $c.public_url).Hostname ]]`)
[[- if not ((urlParse $c.public_url).Path | regexp.Match "^/?$") ]] && PathPrefix(`[[ (urlParse $c.public_url).Path ]]`)[[ end ]]", [[- if not ((urlParse $c.public_url).Path | regexp.Match "^/?$") ]] && PathPrefix(`[[ (urlParse $c.public_url).Path ]]`)[[ end ]]",
"[[ $c.traefik.instance ]].http.routers.[[ .vaultwarden.instance ]][[ $c.consul.suffix ]].entrypoints=[[ join $c.traefik.entrypoints "," ]]", "[[ $c.traefik.instance ]].http.routers.[[ .instance ]][[ .consul.suffix ]].entrypoints=[[ join $c.traefik.entrypoints "," ]]",
"[[ $c.traefik.instance ]].http.routers.[[ .vaultwarden.instance ]][[ $c.consul.suffix ]].priority=100", "[[ $c.traefik.instance ]].http.routers.[[ .instance ]][[ .consul.suffix ]].priority=100",
"[[ $c.traefik.instance ]].http.middlewares.[[ .vaultwarden.instance ]]-csp[[ $c.consul.suffix ]].headers.contentSecurityPolicy=default-src 'self'; img-src 'self' data: https://www.gravatar.com; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; font-src 'self' data:; connect-src 'self' https://api.pwnedpasswords.com https://api.2fa.directory", "[[ $c.traefik.instance ]].http.middlewares.[[ .instance ]]-csp[[ .consul.suffix ]].headers.contentSecurityPolicy=default-src 'self'; img-src 'self' data: https://www.gravatar.com; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; font-src 'self' data:; connect-src 'self' https://api.pwnedpasswords.com https://api.2fa.directory",
[[- if not ((urlParse $c.public_url).Path | regexp.Match "^/?$") ]] [[- if not ((urlParse $c.public_url).Path | regexp.Match "^/?$") ]]
"[[ $c.traefik.instance ]].http.middlewares.[[ .vaultwarden.instance ]][[ $c.consul.suffix ]]-prefix.stripprefix.prefixes=[[ (urlParse $c.public_url).Path ]]", "[[ $c.traefik.instance ]].http.middlewares.[[ .instance ]][[ .consul.suffix ]]-prefix.stripprefix.prefixes=[[ (urlParse $c.public_url).Path ]]",
"[[ $c.traefik.instance ]].http.routers.[[ .vaultwarden.instance ]][[ $c.consul.suffix ]].middlewares=[[ .vaultwarden.instance ]]-csp[[ $c.consul.suffix ]],[[ template "common/traefik_middlewares.tpl" $c.traefik ]],[[ .vaultwarden.instance ]][[ $c.consul.suffix ]]-prefix", "[[ $c.traefik.instance ]].http.routers.[[ .instance ]][[ .consul.suffix ]].middlewares=[[ .instance ]]-csp[[ .consul.suffix ]],[[ template "common/traefik_middlewares" $c.traefik ]],[[ .instance ]][[ .consul.suffix ]]-prefix",
[[- else ]] [[- else ]]
"[[ $c.traefik.instance ]].http.routers.[[ .vaultwarden.instance ]][[ $c.consul.suffix ]].middlewares=[[ .vaultwarden.instance ]]-csp[[ $c.consul.suffix ]],[[ template "common/traefik_middlewares.tpl" $c.traefik ]]", "[[ $c.traefik.instance ]].http.routers.[[ .instance ]][[ .consul.suffix ]].middlewares=[[ .instance ]]-csp[[ .consul.suffix ]],[[ template "common/traefik_middlewares" $c.traefik ]]",
[[- end ]] [[- end ]]
] ]
} }
[[ template "common/task.wait_for.tpl" $c ]] [[ template "common/task.wait_for" $c ]]
task "vaultwarden" { task "vaultwarden" {
driver = [[ $c.nomad.driver | toJSON ]] driver = [[ $c.nomad.driver | toJSON ]]
@ -78,7 +78,7 @@ job "[[ .vaultwarden.instance ]]" {
} }
vault { vault {
policies = ["[[ .vaultwarden.instance ]][[ $c.consul.suffix ]]"] policies = ["[[ .instance ]][[ .consul.suffix ]]"]
env = false env = false
disable_file = true disable_file = true
} }
@ -89,17 +89,17 @@ job "[[ .vaultwarden.instance ]]" {
IP_HEADER = "X-Forwarded-for" IP_HEADER = "X-Forwarded-for"
DOMAIN = [[ $c.public_url | toJSON ]] DOMAIN = [[ $c.public_url | toJSON ]]
DB_CONNECTION_RETRIES = 0 DB_CONNECTION_RETRIES = 0
[[ template "common/proxy_env.tpl" $c ]] [[ template "common/proxy_env" $c ]]
} }
[[ template "common/file_env.tpl" $c.env ]] [[ template "common/file_env" $c.env ]]
volume_mount { volume_mount {
volume = "data" volume = "data"
destination = "/data" destination = "/data"
} }
[[ template "common/resources.tpl" $c.resources ]] [[ template "common/resources" $c.resources ]]
} }
} }
} }