Postgree + PgAdmin

This commit is contained in:
Luigi Oliveira 2023-12-04 22:29:52 -03:00
parent 35afbb644c
commit ad5f57a0c4
13 changed files with 231 additions and 13 deletions

View file

@ -1,8 +1,20 @@
module "caddy" { module "caddy" {
source = "./modules/caddy" source = "./modules/caddy"
cloudflare_api_token = var.cloudflare_caddy_api_token cloudflare_api_token = var.cloudflare_caddy_api_token
endpoint = "192.168.15.92" endpoint = "192.168.15.92"
providers = { providers = {
nomad = nomad nomad = nomad
} }
} }
module "postgree" {
source = "./modules/postgreeSQL"
postgree_user = var.postgree_user
postgree_password = var.postgree_password
pgadmin_user = var.pgadmin_user
pgadmin_password = var.pgadmin_password
providers = {
nomad = nomad
}
}

View file

@ -12,6 +12,13 @@ adguard.lab.marioverde.com.br {
dns cloudflare "${cloudflare_api_token}" dns cloudflare "${cloudflare_api_token}"
} }
} }
red.lab.marioverde.com.br {
reverse_proxy "${endpoint}:8080"
encode gzip zstd
tls {
dns cloudflare "${cloudflare_api_token}"
}
}
# #
vault.lab.marioverde.com.br { vault.lab.marioverde.com.br {
reverse_proxy "https://${endpoint}:8200" { reverse_proxy "https://${endpoint}:8200" {
@ -25,3 +32,19 @@ vault.lab.marioverde.com.br {
dns cloudflare "${cloudflare_api_token}" dns cloudflare "${cloudflare_api_token}"
} }
} }
pgadmin.lab.marioverde.com.br {
reverse_proxy "${endpoint}:8090" {
header_up Redirect off
header_up Host {host}
header_up X-Scheme {scheme}
header_up X-Real-IP {remote}
header_up X-Forwarded-Proto {scheme}
}
log {
output stderr
}
tls {
dns cloudflare "${cloudflare_api_token}"
}
}

View file

@ -2,6 +2,6 @@ data "template_file" "caddyfile" {
template = file("${path.module}/conf/Caddyfile") template = file("${path.module}/conf/Caddyfile")
vars = { vars = {
cloudflare_api_token = var.cloudflare_api_token cloudflare_api_token = var.cloudflare_api_token
endpoint = var.endpoint endpoint = var.endpoint
} }
} }

View file

@ -1,6 +1,6 @@
resource "nomad_job" "app" { resource "nomad_job" "app" {
jobspec = templatefile("${path.module}/conf/caddy.hcl", { jobspec = templatefile("${path.module}/conf/caddy.hcl", {
caddyfile = data.template_file.caddyfile.rendered caddyfile = data.template_file.caddyfile.rendered
NOMAD_ALLOC_DIR = "/alloc" NOMAD_ALLOC_DIR = "/alloc"
}) })
} }

View file

@ -1,7 +1,7 @@
terraform { terraform {
required_providers { required_providers {
nomad = { nomad = {
source = "hashicorp/nomad" source = "hashicorp/nomad"
version = "2.0.0-rc.1" version = "2.0.0-rc.1"
} }
} }

View file

@ -4,6 +4,6 @@ variable "cloudflare_api_token" {
} }
variable "endpoint" { variable "endpoint" {
type = string type = string
description = "Nomad's server endpoint, the machine IP Address so we can reverse proxy our services." description = "Nomad's server endpoint, the machine IP Address so we can reverse proxy our services."
} }

View file

@ -0,0 +1,54 @@
job "pg_admin" {
datacenters = ["dc"]
type = "service"
group "pg_admin" {
count = 1
network {
port "pgadmin_port" {
static = 8090
to = 80
}
}
restart {
attempts = 2
interval = "5m"
delay = "30s"
mode = "delay"
}
task "pg_admin" {
driver = "docker"
config {
image = "dpage/pgadmin4:latest"
#network_mode = "host"
volumes = [
"${NOMAD_ALLOC_DIR}/pgadmin/servers.json:/servers.json",
"${NOMAD_ALLOC_DIR}/servers.passfile:/root/.pgpass",
]
ports = ["pgadmin_port"]
}
env {
PGADMIN_DEFAULT_EMAIL="${PGADMIN_USER}"
PGADMIN_DEFAULT_PASSWORD="${PGADMIN_PASSWORD}"
}
service {
name = "pgadmin"
port = "pgadmin_port"
provider = "nomad"
}
logs {
max_files = 5
max_file_size = 15
}
}
}
}

View file

@ -0,0 +1,65 @@
job "postgres" {
datacenters = ["dc"]
type = "service"
group "postgres" {
count = 1
network {
port "postgres_port" {
static = 5432
to = 5432
}
}
restart {
attempts = 2
interval = "5m"
delay = "30s"
mode = "delay"
}
task "postgres" {
driver = "docker"
config {
image = "postgres:alpine"
network_mode = "host"
volumes = [
"${NOMAD_ALLOC_DIR}/postgres/:/data/postgres",
]
ports = ["postgres_port"]
}
env {
POSTGRES_USER="${POSTGREE_USER}"
POSTGRES_PASSWORD="${POSTGREE_PASSWORD}"
PGDATA="/data/postgres"
}
resources {
cpu = 1000
memory = 1024
}
service {
name = "postgres"
port = "postgres_port"
provider = "nomad"
check {
name = "alive"
type = "tcp"
interval = "10s"
timeout = "4s"
}
}
logs {
max_files = 5
max_file_size = 15
}
}
}
}

View file

@ -0,0 +1,15 @@
resource "nomad_job" "app_postgree" {
jobspec = templatefile("${path.module}/conf/postgree.hcl", {
NOMAD_ALLOC_DIR = "/alloc"
POSTGREE_USER = var.postgree_user
POSTGREE_PASSWORD = var.postgree_password
})
}
resource "nomad_job" "app_pgadmin" {
jobspec = templatefile("${path.module}/conf/pgadmin.hcl", {
NOMAD_ALLOC_DIR = "/alloc"
PGADMIN_USER = var.pgadmin_user
PGADMIN_PASSWORD = var.pgadmin_password
})
}

View file

@ -0,0 +1,9 @@
terraform {
required_providers {
nomad = {
source = "hashicorp/nomad"
version = "2.0.0-rc.1"
}
}
required_version = ">= 0.14"
}

View file

@ -0,0 +1,19 @@
variable "postgree_user" {
type = string
description = "Postgree username"
}
variable "postgree_password" {
type = string
description = "Poastgree password"
}
variable "pgadmin_user" {
type = string
description = "PgAdmin username"
}
variable "pgadmin_password" {
type = string
description = "PgAdmin password"
}

View file

@ -1,14 +1,15 @@
# Configure the Nomad provider.
provider "nomad" {
address = "http://192.168.15.92:4646"
}
terraform { terraform {
required_providers { required_providers {
nomad = { nomad = {
source = "hashicorp/nomad" source = "hashicorp/nomad"
version = "2.0.0-rc.1" version = "2.0.0-rc.1"
} }
} }
required_version = ">= 0.14" required_version = ">= 0.14"
} }
# Configure the Nomad provider.
provider "nomad" {
address = "http://192.168.15.92:4646"
}

View file

@ -2,3 +2,23 @@ variable "cloudflare_caddy_api_token" {
type = string type = string
description = "API key to edit TLS in DNS zones in Cloudflare used by Caddy" description = "API key to edit TLS in DNS zones in Cloudflare used by Caddy"
} }
variable "postgree_user" {
type = string
description = "Postgree username"
}
variable "postgree_password" {
type = string
description = "Poastgree password"
}
variable "pgadmin_user" {
type = string
description = "PgAdmin username"
}
variable "pgadmin_password" {
type = string
description = "PgAdmin password"
}