DEV Community

Flávio Paixão
Flávio Paixão

Posted on

# Como hospedei meu portfólio na AWS com S3, CloudFront e CI/CD do zero

Quando decidi criar meu portfólio, tomei uma decisão: não ia hospedar no GitHub Pages nem no Vercel.

Queria aprender na prática. Queria que cada vez que alguém abrisse meu portfólio, ele estivesse rodando em uma infraestrutura real — a mesma que grandes empresas usam.

Então fui para a AWS.


A ideia

A arquitetura é simples mas poderosa:

GitHub → GitHub Actions → S3 → CloudFront → Usuário
Enter fullscreen mode Exit fullscreen mode

O site fica hospedado em um bucket S3. O CloudFront distribui o conteúdo globalmente via CDN. E a cada push no GitHub, o deploy acontece automaticamente.

Zero acesso manual ao servidor. Zero FTP. Zero dor de cabeça.


Passo a passo do que aprendi

1. Criando o bucket S3

O S3 (Simple Storage Service) é o serviço de armazenamento de objetos da AWS. Para hospedar um site estático, você:

  • Cria um bucket com nome único
  • Habilita hospedagem de site estático
  • Configura as permissões para acesso público
  • Cria uma bucket policy liberando leitura

A parte mais confusa foi entender permissões. A AWS bloqueia tudo por padrão — e isso é ótimo para segurança, mas exige atenção na configuração.

2. Configurando o CloudFront

O CloudFront é a CDN (Content Delivery Network) da AWS. Em vez de servir o site só de uma região, ele replica o conteúdo em Edge Locations ao redor do mundo.

Isso significa que um usuário no Japão vai acessar o site com a mesma velocidade que alguém aqui no Brasil.

O que configurei:

  • Origem apontando para o bucket S3
  • Redirect HTTP para HTTPS
  • Política de cache

3. Automatizando o deploy com GitHub Actions

Essa foi a parte que mais gostei. Criei um arquivo .yml no repositório que faz o seguinte a cada push na branch main:

  1. Faz checkout do código
  2. Sincroniza os arquivos com o bucket S3
  3. Invalida o cache do CloudFront

As credenciais AWS ficam armazenadas nos GitHub Secrets — nunca no código.

- name: Deploy to S3
  run: aws s3 sync . s3://meu-bucket --delete

- name: Invalidate CloudFront
  run: aws cloudfront create-invalidation --distribution-id ${{ secrets.CF_ID }} --paths "/*"
Enter fullscreen mode Exit fullscreen mode

O que esse projeto me ensinou

IAM na prática — precisei criar um usuário com permissões específicas só para o deploy. Nada de AdministratorAccess no CI/CD.

Cache é complicado — na primeira vez que atualizei o site, ele não mudou. Aprendi que o CloudFront faz cache agressivo e precisa de invalidação.

Infraestrutura como documentação — o próprio pipeline do GitHub Actions documenta como o deploy funciona. Qualquer pessoa que abrir o repositório entende o processo.


Resultado

🔗 Ver portfólio ao vivo
Pronto! Focado só no portfólio S3 + CloudFront + CI/CD.

📁 GitHub


Nos próximos posts vou falar sobre os outros projetos que construí na AWS — API REST no EC2, API Serverless com Lambda e infraestrutura como código com Terraform.

Se tiver alguma dúvida ou sugestão, comenta aqui!

aws #python #cloud #beginners #devops #portfolio #caree

Top comments (0)