mirror of
https://github.com/apricote/home-cloud.git
synced 2026-01-13 13:01:03 +00:00
165 lines
3.8 KiB
HCL
165 lines
3.8 KiB
HCL
locals {
|
|
postgres_dns = "pg.apricote.de"
|
|
}
|
|
|
|
resource "hcloud_volume" "postgres_data" {
|
|
name = "postgres-data"
|
|
location = "fsn1"
|
|
format = "ext4"
|
|
size = 10
|
|
}
|
|
|
|
resource "hcloud_volume" "postgres_backup" {
|
|
name = "postgres-backup"
|
|
location = "fsn1"
|
|
format = "ext4"
|
|
size = 10
|
|
}
|
|
|
|
module "postgres" {
|
|
source = "../solidblocks/solidblocks-hetzner/modules/rds-postgresql"
|
|
# version = "0.1.19"
|
|
|
|
data_volume = hcloud_volume.postgres_data.id
|
|
backup_volume = hcloud_volume.postgres_backup.id
|
|
|
|
databases = var.postgres_databases
|
|
db_admin_password = var.postgres_password_admin
|
|
|
|
location = "fsn1"
|
|
|
|
name = "postgres"
|
|
postgres_major_version = "15"
|
|
server_type = "cax11"
|
|
ssh_keys = [data.hcloud_ssh_key.default.id]
|
|
|
|
ssl_enable = true
|
|
ssl_domains = [local.postgres_dns]
|
|
ssl_email = "certs@apricote.de"
|
|
ssl_dns_provider = "hetzner"
|
|
ssl_dns_provider_config = { HETZNER_API_KEY : var.hetzner_dns_token }
|
|
|
|
postgres_extra_config = replace(<<-EOT
|
|
# DB Version: 15
|
|
# OS Type: linux
|
|
# DB Type: mixed
|
|
# Total Memory (RAM): 4 GB
|
|
# CPUs num: 2
|
|
# Connections num: 50
|
|
# Data Storage: san
|
|
|
|
max_connections = 100
|
|
shared_buffers = 1GB
|
|
effective_cache_size = 3GB
|
|
maintenance_work_mem = 256MB
|
|
checkpoint_completion_target = 0.9
|
|
wal_buffers = 16MB
|
|
default_statistics_target = 100
|
|
random_page_cost = 1.1
|
|
effective_io_concurrency = 300
|
|
work_mem = 5242kB
|
|
huge_pages = off
|
|
min_wal_size = 1GB
|
|
max_wal_size = 4GB
|
|
|
|
# pg_stats_statements
|
|
# https://www.postgresql.org/docs/current/pgstatstatements.html
|
|
shared_preload_libraries = 'pg_stat_statements'
|
|
compute_query_id = 'on'
|
|
EOT
|
|
, "\n", "\\n")
|
|
# password_encryption = 'scram-sha-256'
|
|
|
|
post_script = <<-EOT
|
|
apt-get install --no-install-recommends -qq -y postgresql-client
|
|
EOT
|
|
}
|
|
|
|
resource "hetznerdns_record" "pg_apricote_de_a" {
|
|
zone_id = hetznerdns_zone.apricote_de.id
|
|
|
|
name = "pg"
|
|
value = module.postgres.ipv4_address
|
|
type = "A"
|
|
ttl = 60
|
|
}
|
|
|
|
resource "hetznerdns_record" "pg_apricote_de_aaaa" {
|
|
zone_id = hetznerdns_zone.apricote_de.id
|
|
|
|
name = "pg"
|
|
value = module.postgres.ipv6_address
|
|
type = "AAAA"
|
|
ttl = 60
|
|
}
|
|
|
|
provider "postgresql" {
|
|
host = local.postgres_dns
|
|
port = 5432
|
|
database = "postgres"
|
|
username = "rds"
|
|
password = var.postgres_password_admin
|
|
sslmode = "verify-full"
|
|
connect_timeout = 15
|
|
}
|
|
|
|
# Listory
|
|
resource "postgresql_role" "listory" {
|
|
name = "listory"
|
|
login = true
|
|
password = var.postgres_password_listory
|
|
}
|
|
|
|
resource "postgresql_database" "listory" {
|
|
name = "listory"
|
|
owner = postgresql_role.listory.name
|
|
lc_collate = "de-DE.UTF-8"
|
|
lc_ctype = "de-DE.UTF-8"
|
|
connection_limit = -1
|
|
allow_connections = true
|
|
}
|
|
|
|
resource "postgresql_extension" "listory_pgcrypto" {
|
|
name = "pgcrypto"
|
|
database = postgresql_database.listory.name
|
|
}
|
|
|
|
resource "postgresql_extension" "listory_uuid" {
|
|
name = "uuid-ossp"
|
|
database = postgresql_database.listory.name
|
|
}
|
|
|
|
# Gitea
|
|
resource "postgresql_role" "gitea" {
|
|
name = "gitea"
|
|
login = true
|
|
password = var.postgres_password_gitea
|
|
}
|
|
|
|
resource "postgresql_database" "gitea" {
|
|
name = "gitea"
|
|
owner = postgresql_role.gitea.name
|
|
lc_collate = "de-DE.UTF-8"
|
|
lc_ctype = "de-DE.UTF-8"
|
|
connection_limit = -1
|
|
allow_connections = true
|
|
}
|
|
|
|
# pghero + postgres_exporter
|
|
resource "postgresql_extension" "pg_stat_statements" {
|
|
for_each = toset([
|
|
postgresql_database.listory.name,
|
|
postgresql_database.gitea.name
|
|
])
|
|
name = "pg_stat_statements"
|
|
database = each.value
|
|
}
|
|
|
|
# postgres_exporter
|
|
resource "postgresql_role" "exporter" {
|
|
name = "exporter"
|
|
login = true
|
|
password = var.postgres_password_exporter
|
|
|
|
roles = ["pg_monitor"]
|
|
}
|