From 6be0f681b8d07a9e354429f940458e382bd17368 Mon Sep 17 00:00:00 2001 From: gabriel becker Date: Tue, 8 Aug 2023 15:17:57 +1000 Subject: [PATCH] Basic server running docker --- .gitignore | 3 + simple-ec2/compose-app/docker-compose.yaml | 7 ++ simple-ec2/main.tf | 101 +++++++++++++++++++++ simple-ec2/scripts/01-install-docker.sh | 9 ++ 4 files changed, 120 insertions(+) create mode 100644 .gitignore create mode 100644 simple-ec2/compose-app/docker-compose.yaml create mode 100644 simple-ec2/main.tf create mode 100644 simple-ec2/scripts/01-install-docker.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fa6e750 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.terraform +.terraform* +*.tfstate* diff --git a/simple-ec2/compose-app/docker-compose.yaml b/simple-ec2/compose-app/docker-compose.yaml new file mode 100644 index 0000000..ba2b2b0 --- /dev/null +++ b/simple-ec2/compose-app/docker-compose.yaml @@ -0,0 +1,7 @@ +version: "3.8" + +services: + webserver: + image: nginx + ports: + - 8080:80 \ No newline at end of file diff --git a/simple-ec2/main.tf b/simple-ec2/main.tf new file mode 100644 index 0000000..ad00b3b --- /dev/null +++ b/simple-ec2/main.tf @@ -0,0 +1,101 @@ +locals { + ssh_user_home = "/home/ec2-user" +} + + +provider "aws" { + profile = "superuser" + region = "ap-southeast-2" +} + + +resource "aws_security_group" "allow_tls" { + name = "allow_tls" + description = "Allow TLS inbound traffic plys ssh" + + ingress { + description = "TLS from VPC" + from_port = 80 + to_port = 80 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + ipv6_cidr_blocks = ["::/0"] + } + + ingress { + description = "TLS from VPC" + from_port = 8000 + to_port = 8999 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + ipv6_cidr_blocks = ["::/0"] + } + + ingress { + from_port = 22 + to_port = 22 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + ipv6_cidr_blocks = ["::/0"] + } + + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + ipv6_cidr_blocks = ["::/0"] + } + + tags = { + Name = "allow_tls" + } +} + +resource "aws_instance" "test-box" { + + ami = "ami-00ffa321011c2611f" + instance_type = "t2.micro" + key_name = "debin" + + vpc_security_group_ids = [ aws_security_group.allow_tls.id ] + + connection { + type = "ssh" + user = "ec2-user" + host = self.public_ip + private_key = file(pathexpand("~/.ssh/debin.pem")) + } + + provisioner "file" { + source = "scripts" + destination = "${local.ssh_user_home}/scripts" + } + + provisioner "remote-exec" { + inline = [ + "chmod +x ${local.ssh_user_home}/scripts/01-install-docker.sh", + "${local.ssh_user_home}/scripts/01-install-docker.sh", + ] + } + + provisioner "file" { + source = "compose-app" + destination = "${local.ssh_user_home}/" + } + + provisioner "remote-exec" { + inline = [ + "cd ${local.ssh_user_home}/compose-app", + "docker-compose up -d", + ] + } + + tags = { + Name = "terragenerated-simple-ec2" + } +} + +output "test-instance-url" { + value = aws_instance.test-box.public_dns +} \ No newline at end of file diff --git a/simple-ec2/scripts/01-install-docker.sh b/simple-ec2/scripts/01-install-docker.sh new file mode 100644 index 0000000..30a509d --- /dev/null +++ b/simple-ec2/scripts/01-install-docker.sh @@ -0,0 +1,9 @@ +sudo yum update -y +sudo yum install -y docker + +sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose +sudo chmod +x /usr/local/bin/docker-compose + +sudo systemctl start docker +sudo systemctl enable docker +sudo usermod -aG docker $USER