diff --git a/infra/terraform/environments/dev/backend.tf b/infra/terraform/environments/dev/backend.tf new file mode 100644 index 0000000..1a2a5d4 --- /dev/null +++ b/infra/terraform/environments/dev/backend.tf @@ -0,0 +1,78 @@ +locals { + backend_dir = "../../../../apps/backend" + backend_image_name = "enervision-back" + backend_image_tag = "latest" + backend_container_name = "enervision-backend" +} + +resource "docker_image" "backend" { + name = "${local.backend_image_name}:${local.backend_image_tag}" + + build { + context = local.backend_dir + dockerfile = "Dockerfile" + } + + triggers = { + build_hash = sha256(join("", [ + for file in fileset(local.backend_dir, "**") : + filesha256("${local.backend_dir}/${file}") + ])) + } +} + +resource "docker_container" "backend" { + image = docker_image.backend.image_id + name = local.backend_container_name + + ports { + internal = 8000 + external = var.backend_port + } + + volumes { + host_path = "/var/log/enervision" + container_path = "/var/log/enervision" + } + + depends_on = [docker_image.backend] +} + +resource "null_resource" "deploy_backend_to_server" { + depends_on = [docker_image.backend] + + triggers = { + image_id = docker_image.backend.image_id + } + + connection { + type = "ssh" + host = var.ssh_host + port = var.ssh_port + user = var.ssh_user + password = var.ssh_password + private_key = try(file(pathexpand(var.ssh_private_key_path)), null) + timeout = "5m" + } + + provisioner "file" { + source = "${local.backend_dir}/Dockerfile" + destination = "/tmp/Dockerfile" + } + provisioner "file" { + source = "${local.backend_dir}/" + destination = "/tmp/backend/" + } + + provisioner "remote-exec" { + inline = [ + "cd /tmp/backend", + "sudo docker stop ${local.backend_container_name} 2>/dev/null || true", + "sudo docker rm ${local.backend_container_name} 2>/dev/null || true", + "sudo docker build -t ${local.backend_image_name}:${local.backend_image_tag} .", + "sudo docker run -d --name ${local.backend_container_name} -p ${var.backend_port}:8000 --restart always -v /var/log/enervision:/var/log/enervision ${local.backend_image_name}:${local.backend_image_tag}" + ] + } +} + + diff --git a/infra/terraform/environments/dev/variables.tf b/infra/terraform/environments/dev/variables.tf index 4cb6e7e..e6f20c2 100644 --- a/infra/terraform/environments/dev/variables.tf +++ b/infra/terraform/environments/dev/variables.tf @@ -44,6 +44,12 @@ variable "frontend_port" { description = "Port externe du frontend" } +variable "backend_port" { + type = number + default = 8000 + description = "Port externe du backend" +} + 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."