Les trois environnements passent sur enervision-g3.duckdns.org, rec. et dev. : noms publics qui visent l'IP privée de la VM, donc résolus sans /etc/hosts sur le réseau de l'école et injoignables ailleurs (ADR 0018). - infra/front : nginx sur le réseau de l'hôte, seul exposé en 80 et 443. Aiguille par SNI vers la stack visée sans déchiffrer le TLS, et lui transmet l'IP du client en PROXY protocol. - Proxy de stack : écouteur 4443 en PROXY protocol, real_ip_header ; sans lui, limit_req et get_client_ip() compteraient tous les postes comme un seul. PROXY_FRONT_PORT le publie sur 127.0.0.1. - make tls-duckdns : Let's Encrypt par défi DNS-01 via l'API DuckDNS (acme.sh 3.1.6), rejouable, rejoué à chaque déploiement et chaque nuit. - provision-host.sh fait foi pour l'adressage et les secrets : un .env existant garde ses secrets, reçoit ceux qui manquent (supervision) et voit hôte et ports réalignés. Planifie le renouvellement des certificats. - deploy.yml : nouvelles URL, sonde prod sur 10443, front-up en prod. - Terraform : variable domaine. CI : validation du frontal.
97 lines
3.5 KiB
Terraform
97 lines
3.5 KiB
Terraform
variable "ssh_host" {
|
|
type = string
|
|
description = "Adresse de la VM ENI qui porte les trois environnements (ADR 0009, ADR 0017)."
|
|
}
|
|
|
|
variable "ssh_port" {
|
|
type = number
|
|
description = "Port SSH de la VM."
|
|
default = 22
|
|
}
|
|
|
|
variable "ssh_user" {
|
|
type = string
|
|
description = "Utilisateur SSH du provisionnement. Different de root, les commandes privilegiees sont prefixees par sudo."
|
|
default = "root"
|
|
}
|
|
|
|
variable "ssh_private_key_path" {
|
|
type = string
|
|
description = "Chemin local vers la cle privee SSH. L'authentification par mot de passe n'est volontairement pas prise en charge : une variable de mot de passe finit en clair dans le state ou dans les triggers."
|
|
sensitive = true
|
|
}
|
|
|
|
variable "proprietaire" {
|
|
type = string
|
|
description = "Utilisateur qui possede la racine et fait tourner le runner. Il doit exister sur la machine : git refuse les depots appartenant a un autre utilisateur, et un .env en 600 lui echapperait."
|
|
|
|
validation {
|
|
condition = can(regex("^[a-z_][a-z0-9_-]*$", var.proprietaire))
|
|
error_message = "proprietaire doit etre un nom d'utilisateur Unix valide."
|
|
}
|
|
}
|
|
|
|
variable "racine" {
|
|
type = string
|
|
description = "Dossier qui porte un clone du depot par environnement."
|
|
default = "/srv/enervision"
|
|
}
|
|
|
|
variable "depot_url" {
|
|
type = string
|
|
description = "URL de clonage du depot, passee a provision-host.sh."
|
|
default = "https://github.com/ineszang/ProjetPiscine_EnerVision.git"
|
|
}
|
|
|
|
variable "domaine" {
|
|
type = string
|
|
description = "Nom DuckDNS de la prod, rec. et dev. en sous-domaines (ADR 0018). Son enregistrement doit viser ssh_host, et son jeton se trouver dans <racine>/duckdns.token sur la machine."
|
|
default = "enervision-g3.duckdns.org"
|
|
}
|
|
|
|
variable "adresse_publique" {
|
|
type = string
|
|
description = "Adresse annoncee dans les certificats auto-signes. Vide : la premiere adresse de la VM."
|
|
default = ""
|
|
}
|
|
|
|
variable "runner_url" {
|
|
type = string
|
|
description = "Depot GitHub auquel le runner s'enregistre."
|
|
default = "https://github.com/ineszang/ProjetPiscine_EnerVision"
|
|
}
|
|
|
|
variable "runner_version" {
|
|
type = string
|
|
description = "Version d'actions-runner a installer, sans le v initial (ex: 2.330.0). Voir https://github.com/actions/runner/releases."
|
|
|
|
validation {
|
|
condition = can(regex("^[0-9]+\\.[0-9]+\\.[0-9]+$", var.runner_version))
|
|
error_message = "runner_version doit etre epinglee explicitement (ex: 2.330.0), sinon l'installation cesse d'etre reproductible."
|
|
}
|
|
}
|
|
|
|
variable "runner_token" {
|
|
type = string
|
|
description = "Jeton d'enregistrement du runner. Expire au bout d'une heure et ne vaut que pour une inscription : Parametres du depot > Actions > Runners > New self-hosted runner. Seul un administrateur du depot peut le creer."
|
|
sensitive = true
|
|
}
|
|
|
|
variable "runner_labels" {
|
|
type = string
|
|
description = "Libelles supplementaires du runner. deploy.yml cible [self-hosted, linux, eni-g3], les deux premiers etant poses par GitHub."
|
|
default = "eni-g3"
|
|
}
|
|
|
|
variable "runner_nom" {
|
|
type = string
|
|
description = "Nom du runner cote GitHub, unique dans le depot. Vide : le nom d'hote de la machine, qui reste unique si cette racine est reprise pour une seconde VM. A renseigner pour faire tourner deux runners sur la meme machine."
|
|
default = ""
|
|
}
|
|
|
|
variable "runner_dossier" {
|
|
type = string
|
|
description = "Dossier d'installation du runner sur la machine."
|
|
default = "/opt/actions-runner"
|
|
}
|