Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions .github/workflows/aws-create.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,19 @@ jobs:
run: |
aws ecr get-login-password --region eu-west-2 | docker login --username AWS --password-stdin ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.eu-west-2.amazonaws.com

- name: Create S3 bucket for terraform.tfstate
- name: Create S3 bucket for terraform.tfstate (if not exists)
run: |
BUCKET_NAME=ranky-bot-s3
FILE_PATH=terraform/terraform.tfstate
aws s3api create-bucket --bucket $BUCKET_NAME --region eu-west-2 --create-bucket-configuration LocationConstraint=eu-west-2

if aws s3api head-bucket --bucket "$BUCKET_NAME" 2>/dev/null; then
echo "El bucket $BUCKET_NAME ya existe y eres el propietario. Skipeando creación..."
else
echo "El bucket no existe o no tienes acceso. Intentando crearlo..."
aws s3api create-bucket \
--bucket "$BUCKET_NAME" \
--region eu-west-2 \
--create-bucket-configuration LocationConstraint=eu-west-2
fi

- name: Terraform Init
run: terraform init
Expand Down
66 changes: 54 additions & 12 deletions terraform/ec2.tf
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,64 @@ resource "aws_instance" "ranky-ec2" {
key_name = aws_key_pair.ranky-ec2-keypair.key_name

user_data = <<-EOF
#!/bin/bash
sudo yum update -y
sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker
#!/bin/bash
set -e

# Autenticarse con ECR
aws ecr get-login-password --region eu-west-2 | sudo docker login --username AWS --password-stdin ${var.AWS_ACCOUNT_ID}.dkr.ecr.eu-west-2.amazonaws.com/ranky-repo
yum update -y

# Docker
yum install -y docker
systemctl enable docker
systemctl start docker

# Tirar la imagen desde ECR
sudo docker pull ${var.AWS_ACCOUNT_ID}.dkr.ecr.eu-west-2.amazonaws.com/ranky-repo:latest
sleep 5

# Ejecutar la imagen
sudo docker run -d -p 8080:8080 --name ranky-app ${var.AWS_ACCOUNT_ID}.dkr.ecr.eu-west-2.amazonaws.com/ranky-repo:latest
EOF
# AWS CLI
yum install -y awscli

# NGINX
yum install -y nginx
systemctl enable nginx
systemctl start nginx

# Certbot
sleep 20
yum install -y certbot python3-certbot-nginx

# ECR login
aws ecr get-login-password --region eu-west-2 \
| docker login --username AWS --password-stdin ${var.AWS_ACCOUNT_ID}.dkr.ecr.eu-west-2.amazonaws.com/ranky-repo

# Pull image
docker pull ${var.AWS_ACCOUNT_ID}.dkr.ecr.eu-west-2.amazonaws.com/ranky-repo:latest

# Run container SOLO LOCAL
docker run -d \
--name ranky-app \
-p 127.0.0.1:8080:8080 \
--restart always \
${var.AWS_ACCOUNT_ID}.dkr.ecr.eu-west-2.amazonaws.com/ranky-repo:latest

# NGINX reverse proxy (Cambiado a EON para evitar conflictos)
cat > /etc/nginx/conf.d/ranky.conf <<'EON'
server {
listen 80;

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No deberia de escuchar el 443 tambien?

server_name api.ranky.top;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
EON

nginx -t && systemctl restart nginx

# Certbot (HTTPS)
certbot --nginx -d api.ranky.top --non-interactive --agree-tos -m mikel.garin@ranky.top
EOF

iam_instance_profile = aws_iam_instance_profile.ranky-ec2-profile.name

Expand Down
26 changes: 17 additions & 9 deletions terraform/networking.tf
Original file line number Diff line number Diff line change
Expand Up @@ -63,36 +63,44 @@ resource "aws_security_group" "ranky-sg-ec2" {
name = "ranky-sg"
description = "Security group for ranky ec2"

vpc_id = aws_vpc.ranky-vpc.id
vpc_id = aws_vpc.ranky-vpc.id

# SSH
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}

# HTTP (certbot)
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}

# HTTPS (Nginx + certbot final)
ingress {
from_port = 8080
to_port = 8080
from_port = 443
to_port = 443

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Y aqui no deberia ser from 443 to 8080?

protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}


egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}

depends_on = [
tags = {
Name = "ranky-sg-ec2"
}

depends_on = [
aws_vpc.ranky-vpc
]
}
}
Loading