Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018BAUeCFpDkRD6tU5wGsc1C
53 lines
1.6 KiB
HCL
53 lines
1.6 KiB
HCL
# =============================================================================
|
|
# Reseau prive Hetzner
|
|
# =============================================================================
|
|
# Le noeud de donnees n'est JAMAIS joignable depuis Internet sur 5432/6379.
|
|
# Tout le trafic applicatif -> base passe par ce reseau prive, isole au niveau
|
|
# du projet Hetzner.
|
|
#
|
|
# Attention : le trafic sur un reseau prive Hetzner n'est pas chiffre par
|
|
# l'hyperviseur. On ajoute donc deux couches par-dessus :
|
|
# 1. TLS PostgreSQL (ssl = on + DATABASE_SSL=true cote applicatif)
|
|
# 2. Filtrage nftables sur db-01 (cf. scripts/01-setup-data-node.sh)
|
|
# Les firewalls Hetzner Cloud ne filtrent que les interfaces PUBLIQUES.
|
|
|
|
resource "hcloud_network" "main" {
|
|
name = "${var.project_name}-net"
|
|
ip_range = var.network_cidr
|
|
|
|
labels = {
|
|
project = var.project_name
|
|
managed = "terraform"
|
|
}
|
|
}
|
|
|
|
resource "hcloud_network_subnet" "main" {
|
|
network_id = hcloud_network.main.id
|
|
type = "cloud"
|
|
network_zone = "eu-central"
|
|
ip_range = var.subnet_cidr
|
|
}
|
|
|
|
# Cle SSH partagee par les deux serveurs.
|
|
resource "hcloud_ssh_key" "admin" {
|
|
name = "${var.project_name}-admin"
|
|
public_key = var.ssh_public_key
|
|
|
|
labels = {
|
|
project = var.project_name
|
|
managed = "terraform"
|
|
}
|
|
}
|
|
|
|
# Repartit les deux VMs sur des hotes physiques differents : une panne materielle
|
|
# ne peut pas emporter l'app ET la base en meme temps.
|
|
resource "hcloud_placement_group" "spread" {
|
|
name = "${var.project_name}-spread"
|
|
type = "spread"
|
|
|
|
labels = {
|
|
project = var.project_name
|
|
managed = "terraform"
|
|
}
|
|
}
|