forked from Deuxfleurs/nixcfg
staging: move bottin and guichet to docker, sync with prod config
This commit is contained in:
parent
86026c5642
commit
fc83048b02
9 changed files with 202 additions and 165 deletions
|
@ -3,3 +3,7 @@ type = 'user'
|
||||||
description = 'LDAP base DN for everything'
|
description = 'LDAP base DN for everything'
|
||||||
example = 'dc=example,dc=com'
|
example = 'dc=example,dc=com'
|
||||||
|
|
||||||
|
[secrets."d53/gandi_api_key"]
|
||||||
|
type = 'user'
|
||||||
|
description = 'Gandi API key'
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ job "guichet" {
|
||||||
driver = "docker"
|
driver = "docker"
|
||||||
config {
|
config {
|
||||||
image = "dxflrs/guichet:m1gzk1r00xp0kz566fwbpc87z7haq7xj"
|
image = "dxflrs/guichet:m1gzk1r00xp0kz566fwbpc87z7haq7xj"
|
||||||
args = [ "server", "-config", "/etc/config.json" ]
|
args = [ "server", "-config", "/etc/config.json" ]
|
||||||
readonly_rootfs = true
|
readonly_rootfs = true
|
||||||
ports = [ "web_port" ]
|
ports = [ "web_port" ]
|
||||||
volumes = [
|
volumes = [
|
100
cluster/staging/app/core/deploy/bottin.hcl
Normal file
100
cluster/staging/app/core/deploy/bottin.hcl
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
job "core-bottin" {
|
||||||
|
datacenters = ["neptune", "jupiter", "corrin", "bespin"]
|
||||||
|
type = "system"
|
||||||
|
priority = 90
|
||||||
|
|
||||||
|
update {
|
||||||
|
max_parallel = 1
|
||||||
|
stagger = "1m"
|
||||||
|
}
|
||||||
|
|
||||||
|
group "bottin" {
|
||||||
|
constraint {
|
||||||
|
distinct_property = "${meta.site}"
|
||||||
|
value = "1"
|
||||||
|
}
|
||||||
|
|
||||||
|
network {
|
||||||
|
port "ldap_port" {
|
||||||
|
static = 389
|
||||||
|
to = 389
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
task "bottin" {
|
||||||
|
driver = "docker"
|
||||||
|
config {
|
||||||
|
image = "dxflrs/bottin:7h18i30cckckaahv87d3c86pn4a7q41z"
|
||||||
|
network_mode = "host"
|
||||||
|
readonly_rootfs = true
|
||||||
|
ports = [ "ldap_port" ]
|
||||||
|
volumes = [
|
||||||
|
"secrets/config.json:/config.json",
|
||||||
|
"secrets:/etc/bottin",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
restart {
|
||||||
|
interval = "5m"
|
||||||
|
attempts = 10
|
||||||
|
delay = "15s"
|
||||||
|
mode = "delay"
|
||||||
|
}
|
||||||
|
|
||||||
|
resources {
|
||||||
|
memory = 100
|
||||||
|
memory_max = 200
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
data = file("../config/bottin/config.json.tpl")
|
||||||
|
destination = "secrets/config.json"
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
data = "{{ key \"secrets/consul/consul.crt\" }}"
|
||||||
|
destination = "secrets/consul.crt"
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
data = "{{ key \"secrets/consul/consul-client.crt\" }}"
|
||||||
|
destination = "secrets/consul-client.crt"
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
data = "{{ key \"secrets/consul/consul-client.key\" }}"
|
||||||
|
destination = "secrets/consul-client.key"
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
data = <<EOH
|
||||||
|
CONSUL_HTTP_ADDR=https://consul.service.staging.consul:8501
|
||||||
|
CONSUL_HTTP_SSL=true
|
||||||
|
CONSUL_CACERT=/etc/bottin/consul.crt
|
||||||
|
CONSUL_CLIENT_CERT=/etc/bottin/consul-client.crt
|
||||||
|
CONSUL_CLIENT_KEY=/etc/bottin/consul-client.key
|
||||||
|
EOH
|
||||||
|
destination = "secrets/env"
|
||||||
|
env = true
|
||||||
|
}
|
||||||
|
|
||||||
|
service {
|
||||||
|
tags = [ "${meta.site}" ]
|
||||||
|
port = "ldap_port"
|
||||||
|
address_mode = "host"
|
||||||
|
name = "bottin"
|
||||||
|
check {
|
||||||
|
type = "tcp"
|
||||||
|
port = "ldap_port"
|
||||||
|
interval = "60s"
|
||||||
|
timeout = "5s"
|
||||||
|
check_restart {
|
||||||
|
limit = 3
|
||||||
|
grace = "90s"
|
||||||
|
ignore_warnings = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,8 @@
|
||||||
|
[secrets."directory/ldap_base_dn"]
|
||||||
|
type = 'user'
|
||||||
|
description = 'LDAP base DN for everything'
|
||||||
|
example = 'dc=example,dc=com'
|
||||||
|
|
||||||
[secrets."d53/gandi_api_key"]
|
[secrets."d53/gandi_api_key"]
|
||||||
type = 'user'
|
type = 'user'
|
||||||
description = 'Gandi API key'
|
description = 'Gandi API key'
|
||||||
|
|
|
@ -1,133 +0,0 @@
|
||||||
job "directory" {
|
|
||||||
datacenters = ["neptune", "jupiter", "corrin", "bespin"]
|
|
||||||
type = "service"
|
|
||||||
priority = 90
|
|
||||||
|
|
||||||
constraint {
|
|
||||||
attribute = "${attr.cpu.arch}"
|
|
||||||
value = "amd64"
|
|
||||||
}
|
|
||||||
|
|
||||||
group "bottin" {
|
|
||||||
count = 1
|
|
||||||
|
|
||||||
network {
|
|
||||||
port "ldap_port" {
|
|
||||||
static = 389
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
task "bottin" {
|
|
||||||
driver = "nix2"
|
|
||||||
config {
|
|
||||||
packages = [
|
|
||||||
"git+https://git.deuxfleurs.fr/Deuxfleurs/bottin.git?ref=main&rev=9cab98d2cee386ece54b000bbdf2346da8b55eed"
|
|
||||||
]
|
|
||||||
command = "bottin"
|
|
||||||
}
|
|
||||||
user = "root" # needed to bind port 389
|
|
||||||
|
|
||||||
resources {
|
|
||||||
memory = 100
|
|
||||||
}
|
|
||||||
|
|
||||||
template {
|
|
||||||
data = file("../config/bottin/config.json.tpl")
|
|
||||||
destination = "config.json"
|
|
||||||
}
|
|
||||||
|
|
||||||
template {
|
|
||||||
data = "{{ key \"secrets/consul/consul-ca.crt\" }}"
|
|
||||||
destination = "etc/bottin/consul-ca.crt"
|
|
||||||
}
|
|
||||||
|
|
||||||
template {
|
|
||||||
data = "{{ key \"secrets/consul/consul-client.crt\" }}"
|
|
||||||
destination = "etc/bottin/consul-client.crt"
|
|
||||||
}
|
|
||||||
|
|
||||||
template {
|
|
||||||
data = "{{ key \"secrets/consul/consul-client.key\" }}"
|
|
||||||
destination = "etc/bottin/consul-client.key"
|
|
||||||
}
|
|
||||||
|
|
||||||
template {
|
|
||||||
data = <<EOH
|
|
||||||
CONSUL_HTTP_ADDR=https://localhost:8501
|
|
||||||
CONSUL_HTTP_SSL=true
|
|
||||||
CONSUL_CACERT=/etc/bottin/consul-ca.crt
|
|
||||||
CONSUL_CLIENT_CERT=/etc/bottin/consul-client.crt
|
|
||||||
CONSUL_CLIENT_KEY=/etc/bottin/consul-client.key
|
|
||||||
EOH
|
|
||||||
destination = "secrets/env"
|
|
||||||
env = true
|
|
||||||
}
|
|
||||||
|
|
||||||
service {
|
|
||||||
tags = ["bottin"]
|
|
||||||
port = "ldap_port"
|
|
||||||
name = "bottin"
|
|
||||||
check {
|
|
||||||
type = "tcp"
|
|
||||||
port = "ldap_port"
|
|
||||||
interval = "60s"
|
|
||||||
timeout = "5s"
|
|
||||||
check_restart {
|
|
||||||
limit = 3
|
|
||||||
grace = "90s"
|
|
||||||
ignore_warnings = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
group "guichet" {
|
|
||||||
count = 1
|
|
||||||
|
|
||||||
network {
|
|
||||||
port "web_port" { static = 9991 }
|
|
||||||
}
|
|
||||||
|
|
||||||
task "guichet" {
|
|
||||||
driver = "nix2"
|
|
||||||
config {
|
|
||||||
packages = [
|
|
||||||
"git+https://git.deuxfleurs.fr/Deuxfleurs/guichet.git?ref=main&rev=10bdee10cf6947ec6dd0ba5040d7274d6c3316a7"
|
|
||||||
]
|
|
||||||
command = "guichet"
|
|
||||||
}
|
|
||||||
|
|
||||||
template {
|
|
||||||
data = file("../config/guichet/config.json.tpl")
|
|
||||||
destination = "config.json"
|
|
||||||
}
|
|
||||||
|
|
||||||
resources {
|
|
||||||
memory = 200
|
|
||||||
}
|
|
||||||
|
|
||||||
service {
|
|
||||||
name = "guichet"
|
|
||||||
tags = [
|
|
||||||
"guichet",
|
|
||||||
"tricot guichet.staging.deuxfleurs.org",
|
|
||||||
"d53-cname guichet.staging.deuxfleurs.org",
|
|
||||||
]
|
|
||||||
port = "web_port"
|
|
||||||
check {
|
|
||||||
type = "tcp"
|
|
||||||
port = "web_port"
|
|
||||||
interval = "60s"
|
|
||||||
timeout = "5s"
|
|
||||||
check_restart {
|
|
||||||
limit = 3
|
|
||||||
grace = "90s"
|
|
||||||
ignore_warnings = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
{
|
{
|
||||||
"http_bind_addr": ":9991",
|
"http_bind_addr": ":9991",
|
||||||
"ldap_server_addr": "ldap://bottin.service.staging.consul:389",
|
"ldap_server_addr": "ldap://{{ env "meta.site" }}.bottin.service.staging.consul:389",
|
||||||
|
|
||||||
"base_dn": "{{ key "secrets/directory/ldap_base_dn" }}",
|
"base_dn": "{{ key "secrets/directory/ldap_base_dn" }}",
|
||||||
"user_base_dn": "ou=users,{{ key "secrets/directory/ldap_base_dn" }}",
|
"user_base_dn": "ou=users,{{ key "secrets/directory/ldap_base_dn" }}",
|
||||||
"user_name_attr": "cn",
|
"user_name_attr": "cn",
|
||||||
"group_base_dn": "ou=groups,{{ key "secrets/directory/ldap_base_dn" }}",
|
"group_base_dn": "ou=groups,{{ key "secrets/directory/ldap_base_dn" }}",
|
||||||
"group_name_attr": "cn",
|
"group_name_attr": "cn",
|
||||||
|
"mailing_list_base_dn": "ou=mailing_lists,ou=groups,{{ key "secrets/directory/ldap_base_dn" }}",
|
||||||
|
"mailing_list_name_attr": "cn",
|
||||||
|
"mailing_list_guest_user_base_dn": "ou=guests,ou=users,{{ key "secrets/directory/ldap_base_dn" }}",
|
||||||
|
|
||||||
"invitation_base_dn": "ou=invitations,{{ key "secrets/directory/ldap_base_dn" }}",
|
"invitation_base_dn": "ou=invitations,{{ key "secrets/directory/ldap_base_dn" }}",
|
||||||
"invitation_name_attr": "cn",
|
"invitation_name_attr": "cn",
|
58
cluster/staging/app/guichet/deploy/guichet.hcl
Normal file
58
cluster/staging/app/guichet/deploy/guichet.hcl
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
job "guichet" {
|
||||||
|
datacenters = ["neptune", "jupiter", "corrin", "bespin"]
|
||||||
|
type = "service"
|
||||||
|
priority = 90
|
||||||
|
|
||||||
|
group "guichet" {
|
||||||
|
count = 1
|
||||||
|
|
||||||
|
network {
|
||||||
|
port "web_port" { to = 9991 }
|
||||||
|
}
|
||||||
|
|
||||||
|
task "guichet" {
|
||||||
|
driver = "docker"
|
||||||
|
config {
|
||||||
|
image = "dxflrs/guichet:m1gzk1r00xp0kz566fwbpc87z7haq7xj"
|
||||||
|
args = [ "server", "-config", "/etc/config.json" ]
|
||||||
|
readonly_rootfs = true
|
||||||
|
ports = [ "web_port" ]
|
||||||
|
volumes = [
|
||||||
|
"secrets/config.json:/etc/config.json"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
data = file("../config/guichet/config.json.tpl")
|
||||||
|
destination = "secrets/config.json"
|
||||||
|
}
|
||||||
|
|
||||||
|
resources {
|
||||||
|
memory = 200
|
||||||
|
}
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "guichet"
|
||||||
|
tags = [
|
||||||
|
"guichet",
|
||||||
|
"tricot guichet.staging.deuxfleurs.org",
|
||||||
|
"d53-cname guichet.staging.deuxfleurs.org",
|
||||||
|
]
|
||||||
|
port = "web_port"
|
||||||
|
address_mode = "host"
|
||||||
|
check {
|
||||||
|
type = "tcp"
|
||||||
|
port = "web_port"
|
||||||
|
interval = "60s"
|
||||||
|
timeout = "5s"
|
||||||
|
check_restart {
|
||||||
|
limit = 3
|
||||||
|
grace = "90s"
|
||||||
|
ignore_warnings = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,51 +1,51 @@
|
||||||
[secrets."directory/ldap_base_dn"]
|
# General configuration
|
||||||
|
|
||||||
|
[secrets."directory/guichet/web_hostname"]
|
||||||
type = 'user'
|
type = 'user'
|
||||||
description = 'LDAP base DN for everything'
|
description = 'Public hostname from which Guichet is accessible via HTTP (e.g. guichet.example.com)'
|
||||||
example = 'dc=example,dc=com'
|
|
||||||
|
|
||||||
|
# Mailing configuration
|
||||||
|
|
||||||
[secrets."directory/guichet/smtp_user"]
|
[secrets."directory/guichet/smtp_user"]
|
||||||
type = 'user'
|
type = 'user'
|
||||||
description = 'SMTP username'
|
description = 'SMTP username'
|
||||||
|
|
||||||
[secrets."directory/guichet/s3_access_key"]
|
|
||||||
type = 'user'
|
|
||||||
description = 'Garage access key for Guichet profile pictures'
|
|
||||||
|
|
||||||
[secrets."directory/guichet/s3_endpoint"]
|
|
||||||
type = 'user'
|
|
||||||
description = 'S3 endpoint URL'
|
|
||||||
|
|
||||||
[secrets."directory/guichet/s3_region"]
|
|
||||||
type = 'user'
|
|
||||||
description = 'S3 region'
|
|
||||||
|
|
||||||
[secrets."directory/guichet/smtp_pass"]
|
[secrets."directory/guichet/smtp_pass"]
|
||||||
type = 'user'
|
type = 'user'
|
||||||
description = 'SMTP password'
|
description = 'SMTP password'
|
||||||
|
|
||||||
[secrets."directory/guichet/web_hostname"]
|
|
||||||
type = 'user'
|
|
||||||
description = 'Public hostname from which Guichet is accessible via HTTP'
|
|
||||||
example = 'guichet.example.com'
|
|
||||||
|
|
||||||
[secrets."directory/guichet/s3_bucket"]
|
|
||||||
type = 'user'
|
|
||||||
description = 'S3 bucket in which to store data files (such as profile pictures)'
|
|
||||||
|
|
||||||
[secrets."directory/guichet/smtp_server"]
|
[secrets."directory/guichet/smtp_server"]
|
||||||
type = 'user'
|
type = 'user'
|
||||||
description = 'SMTP server address (hostname:port)'
|
description = 'SMTP server address (hostname:port)'
|
||||||
|
|
||||||
[secrets."directory/guichet/s3_secret_key"]
|
|
||||||
type = 'user'
|
|
||||||
description = 'Garage secret key for Guichet profile pictures'
|
|
||||||
|
|
||||||
[secrets."directory/guichet/mail_from"]
|
[secrets."directory/guichet/mail_from"]
|
||||||
type = 'user'
|
type = 'user'
|
||||||
description = 'E-mail address from which to send welcome emails to new users'
|
description = 'E-mail address from which to send welcome emails to new users'
|
||||||
|
|
||||||
[secrets."directory/guichet/mail_domain"]
|
[secrets."directory/guichet/mail_domain"]
|
||||||
type = 'user'
|
type = 'user'
|
||||||
description = 'E-mail domain for new users'
|
description = 'E-mail domain for new users (e.g. example.com)'
|
||||||
example = 'example.com'
|
|
||||||
|
|
||||||
|
|
||||||
|
# S3 configuration
|
||||||
|
|
||||||
|
[secrets."directory/guichet/s3_endpoint"]
|
||||||
|
type = 'user'
|
||||||
|
description = 'S3 endpoint URL'
|
||||||
|
|
||||||
|
[secrets."directory/guichet/s3_bucket"]
|
||||||
|
type = 'user'
|
||||||
|
description = 'S3 bucket in which to store data files (such as profile pictures)'
|
||||||
|
|
||||||
|
[secrets."directory/guichet/s3_region"]
|
||||||
|
type = 'user'
|
||||||
|
description = 'S3 region'
|
||||||
|
|
||||||
|
[secrets."directory/guichet/s3_access_key"]
|
||||||
|
type = 'user'
|
||||||
|
description = 'Garage access key for Guichet profile pictures'
|
||||||
|
|
||||||
|
[secrets."directory/guichet/s3_secret_key"]
|
||||||
|
type = 'user'
|
||||||
|
description = 'Garage secret key for Guichet profile pictures'
|
Loading…
Reference in a new issue