diff --git a/infra/terraform/environments/dev/frontend.tf b/infra/terraform/environments/dev/frontend.tf index 8460459..cced2e7 100644 --- a/infra/terraform/environments/dev/frontend.tf +++ b/infra/terraform/environments/dev/frontend.tf @@ -4,16 +4,6 @@ locals { source_dir = "${path.root}/../../../apps/frontend/dist/frontend-dev/browser" domain = "dev.enervision" } - - rec = { - source_dir = "${path.root}/../../../apps/frontend/dist/frontend-rec/browser" - domain = "rec.enervision" - } - - prod = { - source_dir = "${path.root}/../../../apps/frontend/dist/frontend-prod/browser" - domain = "enervision" - } } selected_frontend = local.frontend_environments[var.deployment_environment] diff --git a/infra/terraform/environments/prod/frontend.tf b/infra/terraform/environments/prod/frontend.tf new file mode 100644 index 0000000..8d55bdb --- /dev/null +++ b/infra/terraform/environments/prod/frontend.tf @@ -0,0 +1,57 @@ +locals { + frontend_environments = { + prod = { + source_dir = "${path.root}/../../../apps/frontend/dist/frontend-prod/browser" + domain = "enervision" + } + } + + selected_frontend = local.frontend_environments[var.deployment_environment] +} + +resource "null_resource" "frontend" { + depends_on = [module.k3s] + + triggers = { + environment = var.deployment_environment + + build_hash = sha256(join("", [ + for file in fileset("${path.root}/../../../apps/frontend/dist/frontend/browser", "**") : + filesha256("${path.root}/../../../apps/frontend/dist/frontend/browser/${file}") + ])) + } + + // Variables pour la connexion SSH + connection { + type = "ssh" + host = var.ssh_host + port = var.ssh_port + user = var.ssh_user + private_key = file(pathexpand(var.ssh_private_key_path)) + } + + // Lancement de script en SSH avec remote-exec + // Installation de Nginx et initialisation du répertoire du frontend + provisioner "remote-exec" { + inline = [ + "sudo apt-get update", + "sudo apt-get install -y nginx", + "sudo mkdir -p /var/www/enervision", + "sudo rm -rf /var/www/enervision/*" + ] + } + + // Copie des fichiers vers le serveur + provisioner "file" { + source = "${path.root}/../../../apps/frontend/dist/frontend/browser/" + destination = "/tmp/enervision-frontend" + } + + // Déplacement des fichiers + provisioner "remote-exec" { + inline = [ + "sudo cp -r /tmp/enervision-frontend/* /var/www/enervision/", + "sudo chown -R www-data:www-data /var/www/enervision" + ] + } +} \ No newline at end of file diff --git a/infra/terraform/environments/prod/main.tf b/infra/terraform/environments/prod/main.tf new file mode 100644 index 0000000..1361f4d --- /dev/null +++ b/infra/terraform/environments/prod/main.tf @@ -0,0 +1,11 @@ +module "k3s" { + source = "../../modules/k3s" + + ssh_host = var.ssh_host + ssh_port = var.ssh_port + ssh_user = var.ssh_user + ssh_private_key_path = var.ssh_private_key_path + k3s_version = var.k3s_version + k3s_disable_components = var.k3s_disable_components + kubeconfig_output_path = var.kubeconfig_output_path +} diff --git a/infra/terraform/environments/prod/outputs.tf b/infra/terraform/environments/prod/outputs.tf new file mode 100644 index 0000000..69cd419 --- /dev/null +++ b/infra/terraform/environments/prod/outputs.tf @@ -0,0 +1,9 @@ +output "kubeconfig_path" { + description = "Chemin local du kubeconfig recupere apres installation." + value = module.k3s.kubeconfig_path +} + +output "node_host" { + description = "Adresse du serveur sur lequel k3s est installe." + value = module.k3s.node_host +} diff --git a/infra/terraform/environments/prod/variables.tf b/infra/terraform/environments/prod/variables.tf new file mode 100644 index 0000000..9d507e3 --- /dev/null +++ b/infra/terraform/environments/prod/variables.tf @@ -0,0 +1,39 @@ +variable "ssh_host" { + type = string + description = "Adresse IP ou nom d'hote du serveur on-premise de l'ecole." +} + +variable "ssh_port" { + type = number + description = "Port SSH du serveur." + default = 22 +} + +variable "ssh_user" { + type = string + description = "Utilisateur SSH utilise pour l'installation." + default = "root" +} + +variable "ssh_private_key_path" { + type = string + description = "Chemin local vers la cle privee SSH." + sensitive = true +} + +variable "k3s_version" { + type = string + description = "Version k3s a epingler pour un deploiement reproductible (ex: v1.31.5+k3s1). Voir https://github.com/k3s-io/k3s/releases." +} + +variable "k3s_disable_components" { + type = list(string) + description = "Composants embarques k3s a desactiver." + default = ["traefik"] +} + +variable "kubeconfig_output_path" { + type = string + description = "Chemin local ou ecrire le kubeconfig recupere apres installation." + default = "./kubeconfig" +} diff --git a/infra/terraform/environments/prod/versions.tf b/infra/terraform/environments/prod/versions.tf new file mode 100644 index 0000000..d793df3 --- /dev/null +++ b/infra/terraform/environments/prod/versions.tf @@ -0,0 +1,14 @@ +terraform { + required_version = ">= 1.7" + + required_providers { + null = { + source = "hashicorp/null" + version = "~> 3.2" + } + } + + backend "local" { + path = "terraform.tfstate" + } +} diff --git a/infra/terraform/environments/rec/frontend.tf b/infra/terraform/environments/rec/frontend.tf new file mode 100644 index 0000000..23b0a0e --- /dev/null +++ b/infra/terraform/environments/rec/frontend.tf @@ -0,0 +1,57 @@ +locals { + frontend_environments = { + rec = { + source_dir = "${path.root}/../../../apps/frontend/dist/frontend-rec/browser" + domain = "rec.enervision" + } + } + + selected_frontend = local.frontend_environments[var.deployment_environment] +} + +resource "null_resource" "frontend" { + depends_on = [module.k3s] + + triggers = { + environment = var.deployment_environment + + build_hash = sha256(join("", [ + for file in fileset("${path.root}/../../../apps/frontend/dist/frontend/browser", "**") : + filesha256("${path.root}/../../../apps/frontend/dist/frontend/browser/${file}") + ])) + } + + // Variables pour la connexion SSH + connection { + type = "ssh" + host = var.ssh_host + port = var.ssh_port + user = var.ssh_user + private_key = file(pathexpand(var.ssh_private_key_path)) + } + + // Lancement de script en SSH avec remote-exec + // Installation de Nginx et initialisation du répertoire du frontend + provisioner "remote-exec" { + inline = [ + "sudo apt-get update", + "sudo apt-get install -y nginx", + "sudo mkdir -p /var/www/enervision", + "sudo rm -rf /var/www/enervision/*" + ] + } + + // Copie des fichiers vers le serveur + provisioner "file" { + source = "${path.root}/../../../apps/frontend/dist/frontend/browser/" + destination = "/tmp/enervision-frontend" + } + + // Déplacement des fichiers + provisioner "remote-exec" { + inline = [ + "sudo cp -r /tmp/enervision-frontend/* /var/www/enervision/", + "sudo chown -R www-data:www-data /var/www/enervision" + ] + } +} \ No newline at end of file diff --git a/infra/terraform/environments/rec/main.tf b/infra/terraform/environments/rec/main.tf new file mode 100644 index 0000000..1361f4d --- /dev/null +++ b/infra/terraform/environments/rec/main.tf @@ -0,0 +1,11 @@ +module "k3s" { + source = "../../modules/k3s" + + ssh_host = var.ssh_host + ssh_port = var.ssh_port + ssh_user = var.ssh_user + ssh_private_key_path = var.ssh_private_key_path + k3s_version = var.k3s_version + k3s_disable_components = var.k3s_disable_components + kubeconfig_output_path = var.kubeconfig_output_path +} diff --git a/infra/terraform/environments/rec/outputs.tf b/infra/terraform/environments/rec/outputs.tf new file mode 100644 index 0000000..69cd419 --- /dev/null +++ b/infra/terraform/environments/rec/outputs.tf @@ -0,0 +1,9 @@ +output "kubeconfig_path" { + description = "Chemin local du kubeconfig recupere apres installation." + value = module.k3s.kubeconfig_path +} + +output "node_host" { + description = "Adresse du serveur sur lequel k3s est installe." + value = module.k3s.node_host +} diff --git a/infra/terraform/environments/rec/variables.tf b/infra/terraform/environments/rec/variables.tf new file mode 100644 index 0000000..9d507e3 --- /dev/null +++ b/infra/terraform/environments/rec/variables.tf @@ -0,0 +1,39 @@ +variable "ssh_host" { + type = string + description = "Adresse IP ou nom d'hote du serveur on-premise de l'ecole." +} + +variable "ssh_port" { + type = number + description = "Port SSH du serveur." + default = 22 +} + +variable "ssh_user" { + type = string + description = "Utilisateur SSH utilise pour l'installation." + default = "root" +} + +variable "ssh_private_key_path" { + type = string + description = "Chemin local vers la cle privee SSH." + sensitive = true +} + +variable "k3s_version" { + type = string + description = "Version k3s a epingler pour un deploiement reproductible (ex: v1.31.5+k3s1). Voir https://github.com/k3s-io/k3s/releases." +} + +variable "k3s_disable_components" { + type = list(string) + description = "Composants embarques k3s a desactiver." + default = ["traefik"] +} + +variable "kubeconfig_output_path" { + type = string + description = "Chemin local ou ecrire le kubeconfig recupere apres installation." + default = "./kubeconfig" +} diff --git a/infra/terraform/environments/rec/versions.tf b/infra/terraform/environments/rec/versions.tf new file mode 100644 index 0000000..d793df3 --- /dev/null +++ b/infra/terraform/environments/rec/versions.tf @@ -0,0 +1,14 @@ +terraform { + required_version = ">= 1.7" + + required_providers { + null = { + source = "hashicorp/null" + version = "~> 3.2" + } + } + + backend "local" { + path = "terraform.tfstate" + } +}