Table of Contents
DevOps e Cloud – Fundamentos Práticos 🚀
Domine a integração entre desenvolvimento (Dev) e operações (Ops), aplicando práticas modernas de automação, containers, pipelines de CI/CD e serviços em nuvem.
Foco do Curso
Metodologia: Aprendizado prático e direto ao ponto, focado em ferramentas reais do mercado (Docker, GitHub Actions, AWS, Terraform) para acelerar a entrega de software com qualidade.
🎯 O Que Você Vai Aprender
-
Cultura DevOps --- Entenda a colaboração entre times, metodologias ágeis e como o DevOps resolve gargalos tradicionais de software. Ir para Módulo 1
-
CI/CD e Automação --- Aprenda a criar pipelines automatizados que testam, buildam e entregam o seu código de forma contínua e segura. Ver Automação
-
Containers (Docker) --- Domine a arte de empacotar aplicações em containers, garantindo que o software funcione em qualquer ambiente. Ver Containers
-
Cloud & IaC --- Entenda os principais provedores (AWS, Azure) e aprenda a gerenciar infraestrutura via código com Terraform. Ver Cloud
📚 Jornada de Aprendizado (16 Aulas)
O curso é estruturado em quatro módulos essenciais.
🧱 Módulo 1: Fundamentos de DevOps (Aulas 01-04)
- Aula 01 - Introdução ao DevOps 🧩
- Aula 02 - Cultura Ágil 🏗️
- Aula 03 - Git Essencial 📡
- Aula 04 - GitHub Colaborativo 👥
⚙️ Módulo 2: Integração e Automação (Aulas 05-08)
- Aula 05 - Integração Contínua (CI) ⛓️
- Aula 06 - Entrega Contínua (CD) 🚢
- Aula 07 - Containers e Virtualização 📦
- Aula 08 - Docker na Prática 🐋
☁️ Módulo 3: Cloud Computing (Aulas 09-12)
- Aula 09 - Fundamentos de Cloud ☁️
- Aula 10 - Provedores (AWS/Azure/GCP) 🏢
- Aula 11 - Deploy em Cloud 🚀
- Aula 12 - Infraestrutura como Código 💻
🛡️ Módulo 4: Operações e Segurança (Aulas 13-16)
- Aula 13 - Monitoramento 📊
- Aula 14 - DevSecOps 🛡️
- Aula 15 - Projeto Prático 🔧
- Aula 16 - Mercado e Carreira 🎓
Plano de Ensino 📅
Curso: DevOps e Cloud – Fundamentos Práticos
Ementa
- Módulo 1: Fundamentos de DevOps: Cultura DevOps, Metodologias Ágeis, Controle de Versão (Git) e Github.
- Módulo 2: Integração Contínua e Automação: Pipeline de CI/CD, Build Automatizado, Containers (Docker) e Virtualização.
- Módulo 3: Cloud Computing: Fundamentos de Nuvem, AWS, Azure, GCP, Deploy em Cloud e Infraestrutura como Código (Terraform).
- Módulo 4: Operações e Segurança: Monitoramento (Prometheus/Grafana), DevSecOps, Segurança em Pipelines e Mercado de Trabalho.
Cronograma (16 Aulas)
Módulo 1: Fundamentos de DevOps
- Aula 01: Introdução ao DevOps e Cultura
- Aula 02: Cultura Ágil e Metodologias
- Aula 03: Controle de Versão com Git
- Aula 04: Repositórios Remotos e GitHub
Módulo 2: Integração Contínua e Automação
- Aula 05: Integração Contínua (CI) e GitHub Actions
- Aula 06: Entrega Contínua (CD) e Deploy Automatizado
- Aula 07: Containers e Virtualização (VM vs Container)
- Aula 08: Docker na Prática (Dockerfile e Imagens)
Módulo 3: Cloud Computing
- Aula 09: Fundamentos de Cloud (IaaS, PaaS, SaaS)
- Aula 10: Principais Provedores (AWS, Azure, GCP)
- Aula 11: Deploy em Cloud e Custos
- Aula 12: Infraestrutura como Código (IaC) com Terraform
Módulo 4: Monitoramento e Segurança
- Aula 13: Monitoramento e Observabilidade (Grafana)
- Aula 14: Segurança em DevOps (DevSecOps)
- Aula 15: Projeto Prático Integrador
- Aula 16: Mercado de Trabalho e Certificações
Avaliação
- Exercícios: 16 listas de exercícios teóricos e práticos.
- Projetos: 16 mini-projetos de fixação.
- Quizzes: 16 testes de conhecimento imediato.
- Setup: Guia de configuração do ambiente.
- Projeto Final: Implementação de um pipeline completo com containerização e deploy em nuvem.
Aulas
Módulo 1 - Fundamentos
Aula 01 - Introdução ao DevOps e Cultura ♾️
Objetivo
Objetivo: Compreender o que é o movimento DevOps, sua origem cultural e como ele resolve os conflitos históricos entre times de Desenvolvimento (Dev) e Operações (Ops).
1. O que é DevOps? 🤔
DevOps não é apenas um cargo ou uma ferramenta. É uma cultura e uma série de práticas que unem o Desenvolvimento de Software (Dev) e as Operações de TI (Ops).
O objetivo principal é encurtar o ciclo de vida de desenvolvimento do sistema e fornecer entrega contínua com alta qualidade de software.
🏢 O Modelo Tradicional (Silos)
Antigamente, os times trabalhavam de forma isolada (em "silos"): - Desenvolvimento: Focado em criar novas funcionalidades rapidamente. - Operações: Focado em manter a estabilidade do sistema e evitar mudanças que pudessem causar erros.
Isso gerava o famoso "Muro da Confusão", onde o Dev "jogava" o código por cima do muro e o Ops tinha que se virar para fazê-lo rodar.
2. O Muro da Confusão 🧱
graph LR
Dev["Desenvolvimento"] -- "Joga o Código" --> Muro(["Muro da Confusão"])
Muro --> Ops["Operações"]
style Muro fill:#f66,stroke:#333,stroke-width:4px
Problemas do modelo tradicional:
- Lentidão: Deploy demorado e burocrático.
- Conflitos: Acusações mútuas quando algo quebra ("Na minha máquina funciona!").
- Baixa Qualidade: Bugs descobertos apenas em produção.
3. Os 3 Pilares do DevOps 🏗️
O DevOps se sustenta em três pilares fundamentais:
- Cultura: Colaboração, confiança e responsabilidade compartilhada.
- Processos: Automação de tarefas repetitivas e feedback rápido.
- Ferramentas: Tecnologias que facilitam a integração e o monitoramento.
O Ciclo de Vida DevOps (O Infinito)
graph LR
subgraph "Dev"
Plan(["Planejar"]) --> Code(["Codar"])
Code(["Codar"]) --> Build(["Buildar"])
Build(["Buildar"]) --> Test(["Testar"])
end
subgraph "Ops"
Release(["Release"]) --> Deploy(["Deploy"])
Deploy(["Deploy"]) --> Operate(["Operar"])
Operate(["Operar"]) --> Monitor(["Monitorar"])
end
Test --> Release
Monitor --> Plan
4. Benefícios Práticos 🚀
- Velocidade: Entregas mais frequentes.
- Confiabilidade: Menos erros em produção devido à automação.
- Escalabilidade: Capacidade de gerenciar sistemas complexos com menos esforço.
- Colaboração: Times trabalham juntos por um objetivo comum: o valor para o cliente.
5. Visão Geral de Ferramentas 🛠️
Embora o DevOps seja cultura, as ferramentas são o que "lubrificam" as engrenagens:
- Versionamento: Git, GitHub, GitLab.
- CI/CD: GitHub Actions, Jenkins, CircleCI.
- Containers: Docker, Kubernetes.
- Cloud: AWS, Azure, Google Cloud.
- Monitoramento: Prometheus, Grafana.
Exemplo de Fluxo (Termynal) 💻
git push origin main Build in pipeline... OK Deploy to Cloud... OK Systems Online! 🚀
6. Prática Inicial 💻
Antes de começarmos a codar, precisamos entender o ambiente:
- Terminal: Sua maior ferramenta de agora em diante.
- Conta no GitHub: Onde seu código viverá e será automatizado.
- Mentalidade: Esteja pronto para aprender que "software pronto" é "software rodando bem para o usuário".
7. Exercício de Reflexão 🧠
Pense sobre um site ou app que você usa e que "caiu" ou parou de funcionar recentemente.
- Como essa falha poderia ter sido evitada com melhor comunicação entre quem cria e quem mantém o app?
- Em sua opinião, qual o maior desafio para dois times diferentes trabalharem juntos?
Próxima Aula: Vamos explorar as metodologias que deram origem ao DevOps na aula de Cultura Ágil! 🏗️
Aula 02 - Cultura Ágil e DevOps 🏃♂️
Objetivo
Objetivo: Entender a relação intrínseca entre o DevOps e as metodologias ágeis, explorando como o Scrum e o Manifesto Ágil pavimentaram o caminho para a entrega contínua.
1. Por que Ágil? 🌪️
Antes do Manifesto Ágil (2001), o software era desenvolvido no modelo Cascata (Waterfall): 1. Requisitos (meses) 2. Design (meses) 3. Desenvolvimento (meses) 4. Testes (meses) 5. Entrega (após 1 ano ou mais)
O Problema: Quando o software chegava ao cliente, o mundo já tinha mudado ou as necessidades eram outras.
2. O Manifesto Ágil 📜
O Agile não é um conjunto de regras, mas 4 valores fundamentais:
- Indivíduos e interações mais que processos e ferramentas.
- Software em funcionamento mais que documentação abrangente.
- Colaboração com o cliente mais que negociação de contratos.
- Responder a mudanças mais que seguir um plano.
Introdução ao Agile Alliance
A Agile Alliance é uma organização sem fins lucrativos que promove esses valores globalmente. No DevOps, bebemos dessa fonte para garantir que a automação sirva às pessoas, e não o contrário.
3. DevOps e Scrum 🔄
O Scrum é o framework ágil mais utilizado. O DevOps estende os benefícios do Scrum para além do desenvolvimento.
| Scrum (Foco no Dev) | DevOps (Foco no Ciclo Todo) |
|---|---|
| Sprints (Iterações) | Deploy Contínuo |
| Daily Meetings | Feedback em Tempo Real |
| Product Backlog | Infraestrutura como Código |
| Incremento de Software | Software Rodando em Produção |
Scrum.org e DevOps
A Scrum.org oferece capacitação que integra as práticas de desenvolvimento com a entrega de software. O DevOps é o "braço técnico" que permite ao Scrum entregar valor em cada Sprint.
4. Conceito de Entrega Contínua (Continuous Delivery) 🏗️
A entrega contínua é a capacidade de colocar alterações de qualquer tipo (novas funcionalidades, configurações, correções de bugs) em produção de forma segura, rápida e sustentável.
Os 3 pilares da Entrega Contínua:
- Baixo Risco: Deploys pequenos e frequentes são menos perigosos que um grande deploy anual.
- Automação: Se você faz algo mais de duas vezes, automatize!
- Qualidade: O software deve estar sempre em um estado "implantável" (deployable).
5. Visualizando o Fluxo Ágil-DevOps 🌊
graph LR
subgraph "Ágil (Planejamento)"
Backlog(["Backlog"]) --> Sprint(["Sprint"])
Sprint(["Sprint"]) --> Feature(["Funcionalidade"])
end
subgraph "DevOps (Entrega)"
Feature --> Build(["Build"])
Build --> Test(["Teste"])
Test --> Deploy(["Deploy"])
end
Deploy --> Feedback(["Feedback"])
Feedback --> Backlog
Automação Ágil (Termynal) 💻
npm run sprint-check Verificando Backlog... OK Validando incrementos... OK Status: Pronto para Deploy! 🚀
6. Prática Inicial 🛠️
Para ser ágil, você precisa de visibilidade. No mundo DevOps, usamos ferramentas de gestão como: * GitHub Projects: Para organizar tarefas (To Do, Doing, Done). * Trello / Jira: Para fluxos mais complexos.
Sua tarefa: Pense em um projeto simples (ex: criar um site pessoal). Divida ele em 3 tarefas pequenas que possam ser feitas em 1 hora cada. Isso é desconstruir em partes ágeis!
7. Exercício de Fixação 🧠
- Explique com suas palavras a diferença entre o modelo Cascata e o Ágil.
- Como a prática de DevOps ajuda um time a ser verdadeiramente ágil?
- O que significa dizer que um software deve estar sempre em estado "deploiável"?
Próxima Aula: Vamos aprender a ferramenta base de qualquer DevOps: o Git Essencial! 📡
Aula 03 - Controle de Versão com Git 📜
Objetivo
Objetivo: Compreender o conceito de versionamento de código, aprender os comandos fundamentais do Git e entender como ele permite que múltiplos desenvolvedores trabalhem no mesmo projeto sem caos.
1. O que é Versionamento? 🕰️
Imagine que você está escrevendo um TCC. Você salva como TCC_final.docx, depois TCC_final_v2.docx, depois TCC_final_agora_vai.docx.
O Controle de Versão (VCS) resolve isso de forma profissional, permitindo que você: * Mantenha um histórico de todas as alterações. * Volte no tempo se algo quebrar. * Trabalhe em equipe sem sobrescrever o trabalho do colega.
O Git é o sistema de controle de versão distribuído mais popular do mundo.
2. A Estrutura do Git (Os 3 Estados) 🏗️
O Git trabalha com três áreas principais:
- Working Directory: Onde você edita seus arquivos.
- Staging Area (Index): Onde você marca os arquivos que quer salvar no próximo "print" (commit).
- Repository (.git): Onde o Git guarda permanentemente as fotos (snapshots) do seu código.
graph LR
WD(["Working Directory"]) -- "git add" --> SA(["Staging Area"])
SA -- "git commit" --> RP(["Local Repository"])
RP -- "git push" --> Remote(["Remote Repository"])
3. Comandos Básicos (Mão na Massa) 🛠️
Abra seu terminal e prepare-se para usar os comandos sagrados:
Comandos de Fluxo (Termynal) 💻
git init Initialized empty Git repository... git add . git commit -m "Meu primeiro commit" [main (root-commit) 1a2b3c4] Meu primeiro commit git status nothing to commit, working tree clean
4. Branches: Linhas do Tempo 🌿
Uma Branch é uma ramificação do seu projeto. Você pode criar uma branch para testar uma funcionalidade nova sem estragar a versão principal (main).
git branch: Lista as branches.git checkout -b nova-feature: Cria e muda para uma nova branch.git merge nova-feature: Junta as alterações da branch namain.
5. Boas Práticas de Commits 📝
Um bom desenvolvedor DevOps escreve mensagens de commit que fazem sentido:
* ❌ git commit -m "ajuste"
* ❌ git commit -m "foi"
* ✅ git commit -m "Adiciona validação de e-mail no formulário de login"
Dica: Use o presente e seja descritivo: "Adiciona X", "Corrige Y", "Remove Z".
6. Prática Sugerida 💻
- Crie uma pasta chamada
meu-primeiro-git. - Inicie o git nela (
git init). - Crie um arquivo
index.html. - Adicione e commite (
git add .egit commit). - Crie uma branch chamada
ajuste-texto, mude o arquivo e faça o merge.
7. Exercício de Fixação 🧠
- Qual a diferença entre a Staging Area e o Repositório Local?
- Para que serve o comando
git merge? - Por que é importante usar uma branch diferente para cada nova funcionalidade?
Próxima Aula: Vamos levar nosso código para o mundo com o GitHub Colaborativo! 👥
Aula 04 - Repositórios Remotos e GitHub 👥
Objetivo
Objetivo: Entender o papel do GitHub como plataforma de colaboração, aprender a trabalhar com repositórios remotos, dominar o fluxo de Pull Requests e o Git Flow simplificado.
1. O que é o GitHub? ☁️
Enquanto o Git é o software que controla as versões na sua máquina, o GitHub é um serviço de nuvem que hospeda esses repositórios. Pense nele como uma "Rede Social para Programadores", mas com ferramentas poderosas de automação.
Por que usar?
- Backup: Seu código está seguro na nuvem.
- Colaboração: Muitos desenvolvedores podem contribuir no mesmo projeto.
- Portfólio: Uma vitrine para empresas verem o que você sabe fazer.
- Automação (DevOps): Onde os pipelines de CI/CD (GitHub Actions) acontecem.
2. Trabalhando com Remotos 📡
Para conectar seu Git local ao GitHub, usamos os comandos de "sincronização":
git remote add origin [URL]: Conecta sua pasta local a um repositório no GitHub.git push -u origin main: Envia seus commits locais para o GitHub.git pull: Traz as novidades que seus colegas enviaram para o GitHub.git clone [URL]: Baixa um projeto inteiro para sua máquina.
3. Fluxo de Trabalho: Pull Requests (PR) 📥
No DevOps, nunca enviamos código diretamente para a branch prinicipal (main) sem revisão. Usamos o fluxo de Pull Request:
- Você cria uma Branch para sua tarefa (
feature-login). - Faz os commits e o Push.
- No GitHub, você abre um Pull Request.
- Seus colegas revisam seu código, fazem comentários e sugerem mudanças.
- Quando tudo estiver OK, o código é "mergeado" na
main.
4. Git Flow Simplificado 🌊
O Git Flow é uma estratégia de organização de branches. Para iniciantes, usamos este modelo simples:
- main: Código estável que está rodando para o usuário (em "produção").
- develop: Onde as funcionalidades novas são integradas antes de irem para a main.
- features/: Branches temporárias para criar algo novo (ex:
feature/ajuste-fonte).
graph LR
Main(["main"]) --- Develop(["develop"])
Develop --- F1(["feature/A"])
Develop --- F2(["feature/B"])
F1 -- "PR" --> Develop
Develop -- "Release" --> Main
Comandos de Sincronização (Termynal) 💻
git remote add origin https://github.com/usuario/repo.git git push -u origin main Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Writing objects: 100% (5/5), 450 bytes | 450.00 KiB/s, done. To https://github.com/usuario/repo.git * [new branch] main -> main branch 'main' set up to track 'origin/main'.
5. Colaboração Profissional 🤝
- Issues: Para relatar bugs ou pedir novas funcionalidades.
- Code Review: O ato de ler o código do colega para garantir qualidade e aprender.
- README.md: O arquivo mais importante! Explica o que o projeto faz e como rodar.
6. Prática Sugerida 🚀
- Crie um repositório público no seu GitHub chamado
lab-devops-01. - Suba os arquivos que criamos na aula anterior (
git push). - Crie um arquivo chamado
README.mddireto pelo site do GitHub. - Dê um
git pullna sua máquina para ver o arquivo aparecer lá. - Crie uma branch, mude algo e abra seu primeiro Pull Request para você mesmo.
7. Exercício de Fixação 🧠
- Diferencie Git de GitHub.
- O que é um Pull Request e por que ele é vital para a cultura DevOps?
- Qual o comando para baixar um repositório existente do GitHub pela primeira vez?
Fim do Módulo 1! Você agora entende a cultura e a base técnica. No próximo módulo, iniciaremos a Integração Contínua e Automação! ⚙️
Módulo 2 - CI/CD e Automação
Aula 05 - Integração Contínua (CI) ⚙️
Objetivo
Objetivo: Entender o conceito de Integração Contínua (CI), por que ela é fundamental para o DevOps e como as ferramentas automatizam o processo de build e teste cada vez que um commit é feito.
1. O que é Integração Contínua (CI)? 🔄
A Integração Contínua é a prática de integrar o código de todos os desenvolvedores em um repositório compartilhado várias vezes ao dia.
Cada integração é verificada por um Build Automatizado e por Testes Automatizados, permitindo que as equipes detectem problemas rapidamente.
O Problema do "Integration Hell" 😵💫
Antes do CI, os desenvolvedores trabalhavam isolados por semanas. Na hora de juntar tudo (merge), o sistema quebrava de tantas formas que levava dias para consertar. O CI resolve isso ao integrar pequenas mudanças constantemente.
2. O Pipeline de CI 🏗️
Um pipeline de CI geralmente segue este fluxo:
graph LR
Code(["Código"]) --> Commit(["Commit/Push"])
Commit --> Build(["Build/Compilação"])
Build --> Unit(["Testes Unitários"])
Unit --> Static(["Análise Estática"])
Static --> Artifact(["Artefato Gerado"])
Automação de CI (Termynal) 💻
git push origin develop Iniciando Pipeline... Rodando Pytest... [PASSED] Análise de Lint... [SUCCESS] Geração de Imagem: v1.0.5 Status: Pipeline Completo! ✅
- Commit/Push: O gatilho que inicia o processo.
- Build: O servidor baixa as dependências e o código é transformado em algo executável (se necessário).
- Testes Unitários: Scripts que testam as menores partes do código (funções e classes).
- Análise Estática (Lint): Verifica se o código segue boas práticas e padrões de estilo.
- Artefato: O resultado final (um arquivo .bin, uma imagem Docker, etc) pronto para ser testado mais a fundo.
3. Benefícios do CI 💎
- Feedback Rápido: O desenvolvedor sabe em minutos se quebrou algo.
- Qualidade do Código: Erros não chegam a branches estáveis.
- Confiança: O time sabe que o código no repositório está "saudável".
- Documentação Viva: Os testes automatizados explicam como o sistema deveria funcionar.
4. Ferramentas Populares de CI 🛠️
Existem muitas ferramentas no mercado. As mais usadas hoje são:
- GitHub Actions: Integrado diretamente no GitHub (vamos focar nele!).
- Jenkins: O "vovô" do CI, muito poderoso e customizável.
- GitLab CI: Integrado ao GitLab.
- CircleCI / Travis CI: Soluções de mercado focadas em facilidade de uso.
5. Prática Sugerida: O Primeiro Pipeline 🚀
Imagine que você tem um projeto Python. Um arquivo de workflow do GitHub Actions (.github/workflows/main.yml) seria assim:
name: CI Pipeline
on: [push] # Gatilho
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Instalar Dependências
run: pip install -r requirements.txt
- name: Rodar Testes
run: pytest
6. Exercício de Fixação 🧠
- Qual a diferença entre um Build Manual e um Build de CI?
- O que acontece se um teste falhar durante o pipeline de CI?
- Por que o feedback rápido é considerado a maior vantagem do CI?
Próxima Aula: Agora que o código está integrado e testado, como levamos ele para o usuário? Vamos falar de Entrega Contínua (CD)! 🚚
Aula 06 - Entrega Contínua (CD) 🚚
Objetivo
Objetivo: Compreender a diferença entre Entrega Contínua (Continuous Delivery) e Implantação Contínua (Continuous Deployment), e entender como o código sai do repositório e chega ao ambiente de produção.
1. O que é Entrega Contínua (CD)? 📦
Se o CI é sobre integrar código, o CD é sobre entregar esse código.
Existem duas variações do CD:
- Continuous Delivery (Entrega Contínua): O pipeline automatiza todo o processo de deploy, mas a decisão final de "apertar o botão" e colocar no ar é humana. É o modelo mais comum em empresas grandes.
- Continuous Deployment (Implantação Contínua): Todo commit que passa nos testes de CI vai automaticamente para produção, sem intervenção humana. Exige altíssima confiança nos testes.
2. O Pipeline de CD 🏗️
O CD começa onde o CI termina. Após a geração do artefato:
graph LR
Artifact(["Artefato"]) --> Staging(["Ambiente de Homologação"])
Staging --> Manual(["Aprovação Humana"])
Manual --> Prod(["Ambiente de Produção"])
Automação de CD (Termynal) 💻
git push origin main Build... OK Testes... OK Aguardando aprovação para Produção... approve-deploy --env prod Deploying to AWS... Status: Site Online! 🚀
- Staging (Homologação): Um ambiente idêntico ao real onde o time testa a nova versão.
- Testes de Aceitação: Testes automatizados (end-to-end) que simulam o usuário final.
- Deploy em Produção: A atualização final do sistema para os usuários reais.
3. Estratégias de Deploy 🛡️
Para evitar que o sistema fique fora do ar durante a atualização, usamos estratégias como:
- Blue-Green Deployment: Você tem dois ambientes idênticos. O "Green" está no ar. Você sobe a versão nova no "Blue". Se tudo estiver ok, você vira a chave do roteador para o "Blue".
- Canary Release: Você libera a versão nova para apenas 5% dos usuários. Se não houver erros, libera para o restante.
- Rolling Update: Atualiza um servidor por vez, gradualmente, até que todos estejam na versão nova.
4. O papel da Infraestrutura como Código (IaC) 💻
No CD moderno, não configuramos servidores clicando em janelas. Usamos código para descrever a infraestrutura. Isso garante que o ambiente de teste seja exatamente igual ao de produção.
5. Prática Sugerida: Deploy no GitHub Pages 🚀
Um exemplo simples de CD é o que estamos fazendo neste curso!
Sempre que fazemos um push para a branch main, o GitHub Actions:
1. Gera o site (MkDocs).
2. Publica automaticamente na internet (GitHub Pages).
Este é um exemplo de Continuous Deployment.
6. Exercício de Fixação 🧠
- Explique a diferença entre Continuous Delivery e Continuous Deployment.
- O que é um ambiente de "Staging" e por que ele é crucial?
- Qual a vantagem da estratégia "Canary" em comparação com atualizar todos os servidores de uma vez?
Próxima Aula: Como garantimos que o código rode exatamente igual na minha máquina e no servidor? Vamos entrar no mundo dos Containers e Virtualização! 🐳
Aula 07 - Containers e Virtualização 🐳
Objetivo
Objetivo: Entender o que são containers, como eles se diferenciam das Máquinas Virtuais (VMs) tradicionais e por que eles se tornaram o padrão da indústria para Deploy de aplicações.
1. O Problema: "Na minha máquina funciona!" 🤷♂️
Um dos maiores desafios do desenvolvimento é garantir que o software rode da mesma forma no computador do desenvolvedor e no servidor de produção. Diferenças de sistema operacional, bibliotecas e versões causam erros inesperados.
A Conteinerização resolve isso empacotando a aplicação com tudo o que ela precisa para rodar.
2. Containers vs Máquinas Virtuais (VMs) ⚔️
Antigamente, usávamos VMs para isolar aplicações. Mas as VMs são pesadas.
| Característica | Máquina Virtual (VM) | Container (Docker) |
|---|---|---|
| Peso | Pesada (Gigas) | Leve (Megas) |
| Velocidade | Minutos para ligar | Segundos para ligar |
| Isolamento | Completo (Hardware virtual) | Processos isolados no SO |
| Sistema Operacional | Possui um SO completo dentro | Compartilha o Kernel do Host |
Estrutura de Container vs VM
graph TD
subgraph VM["Máquina Virtual (VM)"]
APP1["App"] --> LIB1["Biliotecas"]
LIB1 --> OS1["SO Convidado"]
OS1 --> HYP["Hipervisor"]
end
subgraph CT["Container (Docker)"]
APP2["App"] --> LIB2["Bibliotecas"]
LIB2 --> DE["Docker Engine"]
DE --> OS2["SO Host (Kernel)"]
end
Rodando seu primeiro Container (Termynal) 💻
docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world Digest: sha256:d37adae... Status: Downloaded newer image for hello-world:latest Hello from Docker! 🐳
3. O que é um Container? 📦
Pense em um container como uma "caixa" que contém: * O código da sua aplicação. * O runtime (ex: Node.js, Python, Java). * As bibliotecas dependentes. * Variáveis de ambiente e arquivos de configuração.
Tudo o que está dentro da caixa é imutável e portável. Se rodar no seu PC, vai rodar igual em qualquer lugar que tenha Docker.
4. Como funciona o Docker? 🏗️
O Docker é a ferramenta que popularizou os containers. Ele trabalha com três conceitos básicos:
- Dockerfile: A "receita do bolo". Um arquivo de texto com as instruções para criar a imagem.
- Imagem: O "bolo pronto e congelado". É o arquivo que contém a aplicação pronta para rodar.
- Container: O "bolo sendo servido". É a imagem em execução (um processo vivo).
5. Benefícios para o DevOps 💎
- Padronização: O ambiente é o mesmo em Dev, Teste e Prod.
- Escalabilidade: Você pode subir 100 containers em segundos se o tráfego aumentar.
- Eficiência: Mais aplicações rodando no mesmo hardware comparado a VMs.
- Microserviços: Facilita a divisão de uma aplicação grande em partes menores e independentes.
6. Exercício de Fixação 🧠
- Por que os containers são considerados mais eficientes que as Máquinas Virtuais?
- O que significa dizer que um container é "portável"?
- Qual a função do Dockerfile no processo de criação de um container?
Próxima Aula: Vamos colocar a mão na massa e criar nosso primeiro container! Docker na Prática 🚀
Aula 08 - Docker na Prática 🚀
Objetivo
Objetivo: Aprender os comandos essenciais do Docker, construir sua primeira imagem personalizada e rodar um container conectando portas e volumes.
1. Instalando o Docker 🛠️
Para começar, você precisa do Docker Desktop (Acesse docker.com).
Após instalado, abra o terminal e digite:
2. Comandos Básicos do Dia a Dia ⌨️
docker images: Lista as imagens que você tem baixadas no PC.
Ciclo de Comandos Docker
graph LR
DF(["Dockerfile"]) -- "docker build" --> IMG(["Imagem"])
IMG -- "docker run" --> CT(["Container"])
CT -- "docker stop" --> ST(["Parado"])
ST -- "docker rm" --> RM(["Removido"])
Prática: Build e Run (Termynal) 💻
docker build -t meu-site . Sending build context... OK Step 1/3 : FROM nginx:alpine... Successfully tagged meu-site:latest docker run -d -p 8080:80 meu-site f1a2b3c4d5e6... Status: Container rodando em localhost:8080! 🚀
3. Criando sua Própria Imagem (Dockerfile) 📝
Imagine que temos um arquivo index.html. Queremos criar uma imagem que já venha com um servidor web e nossa página dentro.
Crie um arquivo chamado Dockerfile (sem extensão):
# 1. Definir a imagem base
FROM nginx:alpine
# 2. Copiar os arquivos do seu PC para dentro da imagem
COPY index.html /usr/share/nginx/html/index.html
# 3. Informar qual porta o container vai usar
EXPOSE 80
Para gerar a imagem, use:
4. Portas e Mapeamento 🚪
Por padrão, um container é isolado. Para acessá-lo do seu navegador, você precisa mapear uma porta do seu PC para a porta dele.
*-d: Roda em "background" (você continua usando o terminal).
* -p 8080:80: Mapeia a porta 8080 do seu computador para a porta 80 do container.
Agora, acesse localhost:8080 no seu navegador! 🎉
5. Persistência de Dados (Volumes) 💾
Se você apagar um container de banco de dados, os dados somem. Os Volumes permitem que o container escreva dados diretamente em uma pasta do seu computador, garantindo que eles não se percam.
6. Exercício de Fixação 🧠
- Qual a diferença entre
docker runedocker start? - O que o comando
docker buildfaz exatamente? - Se mapearmos a porta
-p 3000:80, qual endereço devemos digitar no navegador para acessar a aplicação?
Próxima Aula: Concluímos o Módulo 2! Agora vamos para as nuvens. Módulo 3: Fundamentos de Cloud Computing ☁️
Módulo 3 - Cloud Computing
Aula 09 - Fundamentos de Cloud Computing ☁️
Objetivo
Objetivo: Entender o que é Computação em Nuvem, quais são seus principais modelos (IaaS, PaaS, SaaS) e por que ela é a base de quase todos os sistemas modernos.
1. O que é "A Nuvem"? 🤔
Muitas pessoas pensam que a nuvem é algo abstrato, mas o ditado popular no TI diz: "A nuvem é apenas o computador de outra pessoa".
A Computação em Nuvem é a entrega de recursos de TI (processamento, armazenamento, bancos de dados) sob demanda, via internet, com pagamento por uso.
2. Benefícios da Nuvem 💎
- Custo: Você não precisa comprar servidores caros. Você "aluga" e paga só pelo que usa.
- Escalabilidade: Seu site cresceu? Em segundos você aumenta a capacidade.
- Elasticidade: O tráfego diminuiu de madrugada? A nuvem reduz os recursos automaticamente para economizar.
- Globalidade: Você pode colocar seu site para rodar em um servidor no Japão com apenas um clique.
3. Modelos de Serviço (O Triângulo da Cloud) 📐
A nuvem é dividida em três camadas principais:
- SaaS (Software como Serviço): Você usa o software pronto via navegador. Ex: Gmail, Google Drive, Netflix.
Modelo de Responsabilidade Compartilhada
graph TD
subgraph SaaS["SaaS (Gmail/Netflix)"]
S1["Provedor cuida de TUDO"]
end
subgraph PaaS["PaaS (Heroku/App engine)"]
P1["Você cuida do APP"]
P2["Provedor cuida do RESTO"]
end
subgraph IaaS["IaaS (AWS EC2/Azure VM)"]
I1["Você cuida do APP e do SO"]
I2["Provedor cuida do HARDWARE"]
end
Explorando a Nuvem (Termynal) 💻
aws ec2 describe-instances --region us-east-1 Fetching instances... { "Instances": [ { "InstanceId": "i-0987654321", "State": "running" } ] } Status: 1 servidor rodando na Virgínia! ☁️
4. Modelos de Implantação 🏠
- Nuvem Pública: Os recursos são compartilhados por várias empresas (AWS, Azure, GCP).
- Nuvem Privada: Recursos dedicados exclusivamente a uma única organização.
- Nuvem Híbrida: Uma mistura das duas (dados sensíveis na privada, site na pública).
5. Por que Cloud e DevOps andam juntos? 🤝
O DevOps prega a agilidade e a automação. A nuvem fornece as "peças" (APIs) para que possamos automatizar a criação de servidores, redes e bancos de dados via código. Sem a nuvem, o DevOps seria muito mais lento.
6. Exercício de Fixação 🧠
- Explique a diferença entre Escalabilidade e Elasticidade.
- Dê um exemplo de um serviço SaaS que você usa no dia a dia.
- Se você quer ter controle total sobre o Sistema Operacional do seu servidor na nuvem, qual modelo você escolheria: IaaS, PaaS ou SaaS?
Próxima Aula: Quem são os gigantes que dominam este mercado? Principais Provedores (AWS, Azure, GCP) 🏢
Aula 10 - Principais Provedores de Cloud (AWS, Azure, GCP) 🏢
Objetivo
Objetivo: Conhecer os três maiores provedores de computação em nuvem do mundo, entender seus principais serviços e aprender como escolher o melhor para cada projeto.
1. O Mercado de Cloud 📊
Embora existam dezenas de empresas de nuvem, o mercado é dominado pelo "Big Three": AWS, Microsoft Azure e Google Cloud.
pie title Market Share Cloud (Estimativa 2024)
"AWS" : 31
"Azure" : 25
"Google Cloud" : 11
"Outros" : 33
2. AWS (Amazon Web Services) 🟠
A pioneira e atual líder de mercado. É conhecida por ter a maior variedade de serviços. * Carro-chefe: EC2 (Servidores virtuais). * S3: Armazenamento de arquivos super barato e seguro. * Perfil: Ideal para empresas que precisam de ferramentas muito específicas e maduras.
3. Microsoft Azure 🔵
A favorita das grandes empresas que já usam Windows e Office. Integração total com o ecossistema Microsoft. * Carro-chefe: Azure App Service. * Active Directory: Gerenciamento de usuários e logins empresariais. * Perfil: Escolha padrão para o mundo corporativo e usuários de .NET.
4. Google Cloud Platform (GCP) 🔴
Conhecida pela sua excelência em ferramentas de Dados, Inteligência Artificial e Kubernetes. * Carro-chefe: GKE (Google Kubernetes Engine). * BigQuery: Banco de dados para análise de trilhões de linhas em segundos. * Perfil: Preferida por startups e empresas focadas em inovação e IA.
5. Comparação de Serviços (Nomes diferentes, mesma função) 🔄
| Função | AWS | Azure | GCP |
|---|---|---|---|
| Servidor CPU | EC2 | Virtual Machines | Compute Engine |
| Containers | ECS / EKS | AKS | GKE |
| Arquivos | S3 | Blob Storage | Cloud Storage |
| Banco SQL | RDS | Azure SQL | Cloud SQL |
| Sem Servidor | Lambda | Azure Functions | Cloud Functions |
6. Como escolher? 🤔
- Conhecimento Técnico: Sua equipe já conhece alguma? Comece por ela.
- Tecnologia: Usa .NET? Vá de Azure. Usa Docker/K8s pesado? Considere GCP. Precisa de tudo e mais um pouco? AWS.
- Localização: Onde estão seus usuários? Escolha o servidor mais próximo deles (Brasil tem regiões de todas as 3).
Verificando Latência (Termynal) 💻
ping sa-east-1.amazonaws.com 64 bytes from ... icmp_seq=1 ttl=245 time=15.2 ms 64 bytes from ... icmp_seq=2 ttl=245 time=14.8 ms Região: São Paulo (Baixa Latência) ✅
7. Exercício de Fixação 🧠
- Se uma empresa usa massivamente o ecossistema Microsoft (Office 365, Active Directory), qual nuvem ela provavelmente escolherá?
- Qual serviço da AWS você usaria para guardar as fotos dos usuários do seu app?
- O Google Cloud é muito respeitado por qual tipo de tecnologia específica citada na aula?
Próxima Aula: Como colocamos nosso código lá dentro? Deploy em Cloud (Simulação e Prática) 🚀
Aula 11 - Deploy em Cloud (Simulação e Prática) 🚀
Objetivo
Objetivo: Entender o que acontece "nos bastidores" quando enviamos nosso código para a nuvem e como usar ferramentas de PaaS para fazer o deploy de aplicações Docker de forma simplificada.
1. O que é Deploy? 📦
Deploy (ou Implantação) é o processo de tirar o seu código da sua máquina de desenvolvimento e colocá-lo em um servidor acessível a todos os usuários via internet.
2. O Fluxo de Deploy com Docker ⛴️
Quando usamos Docker, o deploy fica muito mais seguro e previsível:
graph LR
Dev(["Desenvolvedor"]) -->|Push| Repo(["GitHub"])
Repo -->|Build| Image(["Imagem Docker"])
Image -->|Push| Registry(["Registry"])
Registry -->|Pull| Cloud(["Cloud"])
Simulação de Deploy (Termynal) 💻
docker build -t app:v1 . Building image... Done docker push registry.com/app:v1 Pushing [==========>] 100MB/100MB deploy-to-cloud --image app:v1 Pulling image... OK Starting container... OK Status: Aplicação no Ar! 🚀
- Build: Criamos a imagem da aplicação.
- Push: Enviamos a imagem para um "cartório" de imagens (Registry).
- Run: O servidor na nuvem baixa a imagem e inicia o container.
3. Formas de fazer Deploy na Nuvem 🏗️
Existem diferentes níveis de dificuldade:
- Dificuldade Alta (IaaS): Você cria uma VM, instala o Docker manualmente, configura o firewall e sobe o container. (EC2, Azure VM).
- Dificuldade Média (Managed): Você usa um serviço que gerencia os containers para você. (AWS ECS, Google Cloud Run).
- Dificuldade Baixa (PaaS): Você apenas conecta seu GitHub e a nuvem faz tudo sozinha. (Heroku, Render, Railway).
4. Prática: Conceito de Serverless Containers ⚡
Serviços como o Google Cloud Run ou AWS Fargate são o "estado da arte". Você paga apenas pelos segundos em que seu container está sendo usado. Se ninguém acessa o site, o custo é zero!
5. Variáveis de Ambiente em Produção 🔑
IMPORTANTE: Nunca coloque senhas ou chaves de API direto no código ou no Dockerfile. No deploy em nuvem, usamos as "Environment Variables" (Variaáveis de Ambiente) configuradas no painel do provedor.
6. Diferença entre Deploy e Release 🏁
- Deploy: O código está no servidor.
- Release: O código está disponível para o usuário final. Usando ferramentas modernas, podemos fazer o deploy de uma versão nova mas só liberá-la (release) para os usuários depois de testarmos no ambiente real.
7. Exercício de Fixação 🧠
- Qual a vantagem de usar um Registry (como o Docker Hub) no processo de deploy?
- Por que o modelo "Serverless" (como Cloud Run) é atraente economicamente para pequenas empresas?
- Onde devemos guardar a senha do banco de dados na hora de fazer o deploy na nuvem? No código ou em Variáveis de Ambiente?
Próxima Aula: Como criar toda essa infraestrutura sem clicar em botões? Infraestrutura como Código (IaC) 💻
Aula 12 - Infraestrutura como Código (IaC) 💻
Objetivo
Objetivo: Compreender o conceito de Infraestrutura como Código (IaC), entender a diferença entre provisionamento imperativo e declarativo, e conhecer o Terraform como a ferramenta líder de mercado.
1. O que é Infraestrutura como Código (IaC)? 🏗️
Antigamente, para criar um servidor, um analista precisava entrar no console da AWS/Azure, clicar em vários botões e preencher formulários. Com IaC, nós escrevemos um arquivo de texto (código) que descreve como a infraestrutura deve ser. O software lê esse arquivo e cria tudo automaticamente.
2. Por que usar IaC? 💎
- Velocidade: Criar 100 servidores leva o mesmo tempo que criar 1.
- Versionamento: Sua infraestrutura está no Git. Você sabe quem mudou o quê e quando.
- Padronização: Garante que o ambiente de Teste seja exatamente igual ao de Produção.
- Recuperação: Se um datacenter inteiro pegar fogo, você roda o código e recria tudo em outro lugar em minutos.
O Poder da IaC
graph LR
Code(["Código .tf"]) -- "Terraform Init" --> Providers(["Provedores"])
Providers -- "Terraform Plan" --> Review(["Revisão"])
Review -- "Terraform Apply" --> Infrastructure(["Infraestrutura Real"])
Terraform na Prática (Termynal) 💻
terraform plan Terraform will perform the following actions: + aws_instance.web_server Plan: 1 to add, 0 to change, 0 to destroy. terraform apply --auto-approve aws_instance.web_server: Creating... aws_instance.web_server: Creation complete! ✅
3. Imperativo vs Declarativo ⚖️
- Imperativo (O "Como"): Você dá ordens passo a passo. "Crie uma VM", "Instale o Docker", "Abra a porta 80". (Ex: Shell Script, AWS CLI).
- Declarativo (O "O Que"): Você descreve o estado final desejado. "Eu quero 1 servidor com Docker e a porta 80 aberta". A ferramenta se vira para chegar lá. (Terraform usa este modelo).
4. Terraform: O Gigante da IaC 🌍
O Terraform é a ferramenta mais popular porque é "Cloud Agnostic" (funciona com quase qualquer nuvem).
# Exemplo de código Terraform (Linguagem HCL)
resource "aws_instance" "meu_servidor" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "Servidor-Do-Curso"
}
}
5. O Fluxo de Trabalho do Terraform 🔄
- Write: Escreve o código
.tf. - Init: O Terraform baixa os arquivos necessários para falar com a nuvem escolhida.
- Plan: O Terraform mostra o que ele vai fazer antes de realmente fazer ("Vou criar 2 itens e destruir 0").
- Apply: O Terraform executa as mudanças na nuvem.
6. O arquivo State (.tfstate) 🗂️
O Terraform guarda um arquivo (State) que é o "mapa" da sua infraestrutura atual. Nunca delete ou edite este arquivo manualmente! Ele é a memória do Terraform.
7. Exercício de Fixação 🧠
- Qual a principal diferença entre criar um servidor clicando em botões no navegador e criar usando código?
- O que significa dizer que o Terraform é "Declarativo"?
- Por que é importante colocar o código da infraestrutura em um repositório Git?
Próxima Aula: Como sabemos se o sistema está saudável depois do deploy? Monitoramento e Observabilidade 📊
Módulo 4 - Operações e Segurança
Aula 13 - Monitoramento e Observabilidade 📊
Objetivo
Objetivo: Entender a diferença entre Monitoramento e Observabilidade e por que é impossível gerenciar o que você não consegue medir.
1. Por que monitorar? 🤔
No mundo DevOps, não perguntamos se algo vai falhar, mas quando. O monitoramento nos permite detectar falhas antes que o cliente perceba.
- Disponibilidade: O site está no ar?
- Performance: O site está rápido ou lento?
- Erros: Quantos erros 500 estamos tendo por minuto?
2. Monitoramento vs Observabilidade 🔭
- Monitoramento: "O sistema está funcionando?" (Checks de Sim/Não, CPU, Memória). É o "O Quê".
- Observabilidade: "Por que o sistema não está funcionando?" (Logs, Métricas, Tracing). É o "Por Quê".
3. Os 3 Pilares da Observabilidade 🏛️
- Tracing: O caminho de uma requisição por vários microserviços. Ferramentas: Jaeger, AWS X-Ray.
Fluxo de Observabilidade
graph LR
APP(["Aplicação"]) -- "Eventos" --> LOGS(["Logs (ELK)"])
APP -- "Sinais" --> MET(["Métricas (Prometheus)"])
MET -- "Visualização" --> GRAV(["Grafana"])
GRAV -- "Critério" --> ALERT(["Alert Manager"])
Investigando Métricas (Termynal) 💻
prometheus-query 'up{job="web-server"}' Métrica: up (status do servidor) Valor: 1 (Online) prometheus-query 'http_requests_total{status="500"}' Valor: 42 (Atenção: Aumento de erros!) Status: Alerta enviado para o Grafana! 🚨
4. O que é o Grafana? 🖼️
O Grafana é uma ferramenta de visualização. Ele se conecta ao seu banco de métricas (Prometheus) e transforma números chatos em gráficos lindos e dashboards em tempo real.
5. Alertas: O grito do servidor 🚨
Não adianta ter gráficos se ninguém olha para eles. Precisamos de alertas automáticos: * "Se o erro passar de 5% em 1 minuto, mande um Slack para o time de DevOps." * "Se o servidor atingir 90% de disco, abra um chamado no Jira."
6. Exercício de Fixação 🧠
- Explique a diferença entre uma Métrica e um Log.
- Por que dashboards de monitoramento costumam ficar em TVs nas salas de TI?
- Qual ferramenta você usaria para visualizar gráficos de performance: Grafana ou Elasticsearch?
Próxima Aula: Como manter tudo isso seguro? Segurança e DevSecOps 🛡️
Aula 14 - Segurança em Cloud e DevSecOps 🛡️
Objetivo
Objetivo: Entender que a segurança não deve ser a última etapa (Checkpoint), mas sim uma camada presente em todo o ciclo de desenvolvimento (Shift Left).
1. O Modelo de Responsabilidade Compartilhada 🤝
Na nuvem, a segurança é dividida entre você e o provedor (AWS/Azure/GCP): * Provedor: Cuida da segurança "DA" nuvem (Data centers físicos, rede, hardware). * Você: Cuida da segurança "NA" nuvem (Seus dados, suas senhas, suas configurações de firewall).
2. O que é DevSecOps? 🛡️🔄
É a evolução do DevOps. Significa integrar a segurança desde o primeiro dia do projeto. * Com DevSecOps: Segurança está em cada commit, em cada build e em cada deploy.
O Ciclo DevSecOps
graph LR
Plan(["Plan"]) --> Code(["Code"])
Code --> Scan(["SAST/SCA"])
Scan --> Build(["Build"])
Build --> Test(["Test"])
Test --> Prod(["Release"])
Prod --> Monitor(["Monitor"])
Monitor --> Plan
style Scan fill:#f96,stroke:#333
Verificação de Segurança (Termynal) 💻
npm audit Scanning dependencies... Found 1 high severity vulnerability npm audit fix Fixed 1 vulnerability. 0 vulnerabilities remaining. Status: Código Seguro para Deploy! 🛡️
3. Práticas Essenciais de DevSecOps 🛠️
- SAST (Static Application Security Testing): Analisa o código fonte em busca de vulnerabilidades antes mesmo dele rodar.
- SCA (Software Composition Analysis): Verifica se as bibliotecas que você baixou (npm, pip) têm vulnerabilidades conhecidas.
- Secret Scanning: Ferramentas que impedem você de subir senhas e chaves de API para o GitHub por acidente.
4. O Princípio do Menor Privilégio 🔑
Nunca dê permissão total para tudo. * Ruim: Dar permissão de "ADMIN" para o servidor web. * Bom: O servidor web só pode ler o banco de dados e escrever na pasta de logs.
5. Criptografia: Dados em Repouso e em Trânsito 🔐
- Em Trânsito: Use sempre HTTPS (TLS). Os dados devem viajar criptografados pela internet.
- Em Repouso: Os dados salvos no banco de dados e nos discos da nuvem também devem estar criptografados.
6. Exercício de Fixação 🧠
- O que significa "Shift Left" na segurança?
- No modelo de responsabilidade compartilhada, quem é responsável por garantir que o banco de dados tem uma senha forte?
- Qual a diferença entre SAST e SCA?
Próxima Aula: Conclusão do Curso e Próximos Passos! Finalização 🎓
Aula 15 - Projeto Prático Integrador 🏗️🚀
Objetivo
Objetivo: Integrar todos os conhecimentos adquiridos (Git, Docker, Cloud, IaC e Monitoramento) para colocar uma aplicação real no ar seguindo as melhores práticas DevOps.
1. O Desafio: A esteira de produção 🏎️
Ao longo do curso, vimos as peças separadas. Agora, vamos montar o quebra-cabeça. O objetivo é criar o fluxo completo desde o seu computador até a nuvem:
- Monitoramento: Validar se os logs e métricas estão subindo.
A Jornada do Projeto
graph TD
APP(["APP Local"]) -- "Dockerize" --> IMG(["Imagem"])
IMG -- "Git Push" --> GH(["GitHub Actions"])
GH -- "Terraform" --> INFRA(["Cloud Infra"])
GH -- "Deploy" --> RUN(["App no Ar"])
RUN -- "Metrics" --> MON(["Grafana"])
Orquestrando o Lab Final (Termynal) 💻
git push origin main Triggering Integration... Terraform apply: Done (12 resources) Docker push: Done (v1.0.0) Cloud Run deploy: Done Link: https://projeto-final.a.run.app 🚀
2. Passo 1: O Repositorio 📦
Crie um novo repositório no GitHub. Organize as pastas de forma clara:
* /src: Código da aplicação.
* /infra: Arquivos do Terraform.
* /.github/workflows: Arquivos de CI/CD.
* Dockerfile: Receita do container.
3. Passo 2: A Automação (CI) 🤖
Configure o GitHub Actions para que, a cada push, ele: * Rode os testes unitários. * Analise o código com uma ferramenta de Lint. * Gere a imagem Docker e envie para o Docker Hub.
4. Passo 3: Provisionamento (IaC) 💻
Use o Terraform para criar os recursos necessários na Cloud de sua escolha (AWS/Azure/GCP). * Lembre-se de configurar o State File em um bucket remoto (S3/Cloud Storage). * Não suba senhas para o Git! Use variáveis do GitHub Secrets.
5. Passo 4: Deploy e Monitoramento 📊
No último passo do seu pipeline de CD, o código deve ser atualizado no servidor. * Valide o acesso via URL pública. * Acesse o dashboard de monitoramento e veja os gráficos de consumo de CPU aumentarem durante o deploy.
6. Checkpoint de Entrega ✅
Para considerar seu projeto concluído, responda:
1. Sua aplicação está rodando via container?
2. Consigo deletar toda a infraestrutura e recriar com um único comando terraform apply?
3. O deploy acontece automaticamente ao dar git push na branch main?
Próxima Aula: Como entrar neste mercado? Carreira e Próximos Passos 🏃♂️
Aula 16 - Mercado, Carreira e Próximos Passos 🏃♂️💼
Objetivo
Objetivo: Entender o panorama do mercado de trabalho para profissionais DevOps e como continuar evoluindo após a conclusão deste curso.
1. O Mercado de Trabalho para DevOps 📈
A demanda por profissionais que entendem de automação e nuvem nunca foi tão alta. Atualmente, o DevOps não é apenas um cargo, mas uma cultura necessária em qualquer empresa que queira escalar.
- Cargos Comuns: Analista DevOps, Engenheiro de Confiabilidade de Sites (SRE), Engenheiro de Cloud, Arquiteto de Soluções.
- Segmentos: De startups a bancos tradicionais, todos precisam de esteiras de CI/CD eficientes.
2. O Perfil do Profissional T-Shaped 📐
- Vertical (Especialista): Domínio profundo em uma área específica (ex: Especialista em Kubernetes ou AWS).
O Profissional T-Shaped
graph TD
subgraph Horizontal["Conhecimento Amplo"]
A(["Linux"]) --- B(["Redes"])
B --- C(["Segurança"])
C --- D(["Dev"])
end
D --- E(["Cloud & Automação"])
E --- F(["Especialista"])
style E fill:#f9f,stroke:#333
Explorando o Mercado (Termynal) 💻
devops-jobs --search "remoto" Searching LinkedIn, Glassdoor, Indeed... Found: 1,250 open positions for DevOps Engineer Skills required: Docker, K8s, Terraform, AWS Ready to apply? [Y/n] Y Boa sorte na sua jornada! 🚀🎯
3. Próximos Passos na Jornada 🚀
Este curso foi a sua porta de entrada. Para onde ir agora? 1. Kubernetes (K8s): O padrão de mercado para orquestração de containers. 2. Certificações Cloud: AWS Certified Solutions Architect, Azure Fundamentals, Google Associate Cloud Engineer. 3. Python/Go: Aprender a criar automações mais complexas usando linguagens de programação. 4. Engenharia de Plataforma (Platform Engineering): O próximo nível do DevOps.
4. Como montar um portfólio incrível? ✨
- GitHub Ativo: Documente seus projetos práticos (como o da Aula 15).
- Blog Posts: Escreva sobre o que você aprendeu (ex: "Como Dockerizei meu primeiro app").
- LinkedIn: Conecte-se com a comunidade e compartilhe suas conquistas.
5. Mensagem Final 🌟
Parabéns por chegar até aqui! Você agora tem a base sólida para construir, rodar e proteger sistemas modernos na nuvem. O DevOps é uma jornada de aprendizado constante.
"A automação sem propósito é apenas complexidade. O verdadeiro valor do DevOps está nas pessoas e na colaboração."
Obrigado por fazer parte desta turma! 🎓🚀 Desejamos muito sucesso na sua carreira como profissional Cloud & DevOps!
Exercícios
Listas de Exercícios 🏋️
Pratique o que aprendeu com desafios graduais para cada aula.
-
Módulo 1: Fundamentos de DevOps ---
-
Módulo 2: CI/CD e Automação ---
-
Módulo 3: Cloud Computing ---
-
Módulo 4: Monitoramento e Segurança ---
Exercícios 01 - Introdução a Microsserviços 🧩
🟢 Fáceis
- Definição: Explique com suas palavras o que é um microsserviço.
- Diferenciação: Cite 3 desvantagens de um sistema Monolítico em relação a uma arquitetura de Microsserviços.
🟡 Médios
- Cenário: Uma startup de delivery começou com um monólito e agora está sofrendo para atualizar o sistema de pagamentos sem quebrar o rastreamento de pedidos. Qual vantagem dos microsserviços resolveria esse problema? Justifique.
- Conectividade: O que é uma API e por que ela é fundamental na integração de sistemas distribuídos?
🔴 Desafio
- Análise de Arquitetura:
Imagine o sistema do "Netflix". Ele possui milhões de usuários acessando simultaneamente filmes, perfis e faturas.
- Se o serviço de "Busca" falhar, o usuário deve ser impedido de assistir aos filmes que já estão na sua lista "Continuar Assistindo"? Como a arquitetura de microsserviços ajuda nesse isolamento?
- Desenhe/Escreva como seria a divisão básica: Quais seriam os pelo menos 4 serviços independentes que você criaria para o Netflix?
Exercícios 02 - Arquitetura e Gateway 🏗️
🟢 Fáceis
- Conceitos: Explique o que é um API Gateway com uma analogia da vida real (ex: uma recepção de hotel).
- Síncrono vs Assíncrono: Diferencie os dois modelos de comunicação em uma frase cada.
🟡 Médios
- Resiliência: O que acontece com um sistema distribuído que só usa comunicação síncrona se o serviço de banco de dados ficar muito lento? Como isso afeta o usuário final?
- Segurança: Por que é melhor colocar a lógica de autenticação no API Gateway do que repetir em cada um dos 20 microsserviços?
🔴 Desafio
- Cenário de Falha Crítica:
O serviço de "Notificação" (envio de e-mail e SMS) está fora do ar.
- Se o seu sistema for síncrono, o usuário conseguirá finalizar uma compra?
- Como a abordagem assíncrona com filas resolveria esse problema, garantindo que o e-mail seja enviado quando o serviço voltar?
- Cite um exemplo de serviço que precisa ser síncrono (não pode esperar).
Exercícios 03 - Modelagem REST 📡
🟢 Fáceis
- URI Design: Corrija as URIs abaixo para seguirem as boas práticas REST:
GET /listar_todos_usuariosPOST /criarNovoPedidoDELETE /remover-produto-por-id/123
- Verbos: Qual o verbo HTTP mais adequado para atualizar a senha de um usuário? Por que?
🟡 Médios
- Status Codes: Escolha o código de status ideal para as situações:
- Usuário tentou deletar um arquivo, mas ele não tem permissão de administrador.
- O cadastro foi realizado com sucesso e o sistema retornou os dados do novo usuário.
- O servidor caiu por falta de memória.
- Idempotência: Explique por que o
POSTnão é idempotente e oGETé.
🔴 Desafio
- Design de Contrato:
Desenhe as rotas para um sistema de E-commerce.
- Como seria a URI para listar todos os itens de um carrinho específico?
- Como seria a URI para adicionar um item a este carrinho?
- Escreva o JSON que representaria um "Item de Carrinho" com:
produto_id,nome,quantidadeepreco_unitario.
Exercícios 04 - Documentação e Mocks 📝
🟢 Fáceis
- Conceitos: O que é OpenAPI e qual a relação dela com o Swagger?
- Mocks: Explique com suas palavras por que um desenvolvedor Frontend desejaria usar um Mock Server.
🟡 Médios
- Análise de YAML: Analise o trecho OpenAPI abaixo e responda: Qual o endpoint? Qual o verbo? O que ele retorna no sucesso?
- Developer Experience (DX): Imagine que você recebeu uma documentação que diz apenas:
POST /login - Envie os dados do usuário. Por que essa documentação é ruim sob a ótica de DX?
🔴 Desafio
- Cenário de Desenvolvimento:
Você é o arquiteto de um projeto onde o Backend vai demorar 3 semanas para liberar a primeira API, mas o Frontend precisa começar amanhã.
- Como você organizaria o trabalho usando Mocks?
- Como garantir que, quando o Backend ficar pronto, a integração ocorra sem precisar mudar nada no código do Frontend?
- Cite uma ferramenta que você usaria para subir esse Mock Server rapidamente.
Exercícios 05 - Implementação de APIs ⚙️
🟢 Fáceis
- Responsabilidade: Qual a principal função de um Controller em uma arquitetura de camadas?
- Mapeamento: O que é um "Handler" no contexto de rotas backend?
🟡 Médios
- Parâmetros: Diferencie, com exemplos de URIs, o uso de Path Params e Query Params.
- Erros: Por que o Controller nunca deve retornar uma resposta sem um Status Code explícito?
🔴 Desafio
- Cenário Real:
Imagine que você está implementando a rota de
PUT /produtos/123.- Como você capturaria o
123? - Como você capturaria o novo nome do produto?
- Em qual objeto (
req.params,req.queryoureq.body) cada um desses dados estaria? - O que você faria se o cliente enviasse o
idno Body diferente doidna URL?
- Como você capturaria o
Exercícios 06 - Services e Regras de Negócio 🧠
🟢 Fáceis
- Conceito: Explique por que não é uma boa prática colocar lógica de cálculo ou validação dentro do Controller.
- Responsabilidade: Cite 3 exemplos de tarefas que devem ser feitas na camada de Service.
🟡 Médios
- Tratamento de Erros: Por que o Service deve lançar (throw) um erro em vez de retornar um Status Code (ex: 404)?
- Reutilização:
Imagine que você tem um
EmailService. Cite dois Controllers diferentes que poderiam usar esse mesmo serviço.
🔴 Desafio
- Lógica de Negócio:
Escreva o pseudocódigo para um
PedidoService.finalizar(pedidoId).- Quais validações você faria? (Estoque, status do pedido, limite de crédito do cliente).
- Como você lidaria com o caso de "Produto Sem Estoque"?
- Qual tipo de dado (DTO) o Service deveria retornar para o Controller após o sucesso?
Exercícios 07 - Repositories e Banco de Dados 🗄️
🟢 Fáceis
- Fundamentos: O que significa a sigla SQL e para que ela serve?
- CRUD: Escreva o comando SQL para inserir um novo produto (nome "Mouse", preço 50.00) na tabela
produtos.
🟡 Médios
- Relacionamentos: Explique a diferença entre uma Primary Key (PK) e uma Foreign Key (FK). Por que a FK é essencial para bancos relacionais?
- Isolamento: Por que usamos o padrão Repository em vez de escrever o código SQL diretamente dentro do Service?
🔴 Desafio
- Modelagem Real:
Imagine um sistema de Blog. Temos
EscritoreseArtigos.- 1:N: Como você modelaria a ligação entre um Escritor e seus Artigos?
- SQL: Escreva uma query que retorne o título de todos os artigos escritos pelo autor com
id = 5. - Repository: Como ficaria a assinatura (nome e parâmetros) da função no
ArtigoRepositoryresponsável por essa busca?
Exercícios 08 - Boas Práticas e Validação de Dados ✅
🟢 Fáceis
- Conceito: Por que nunca devemos confiar 100% nos dados vindos do frontend?
- Validação: Dê um exemplo de uma regra de validação para um campo de "Senha".
🟡 Médios
- Sanitização: Qual a diferença prática entre validar um campo e sanitizar um campo? Quando usamos cada um?
- Clean Code: Refatore o nome da função abaixo para seguir as boas práticas:
🔴 Desafio
- Tratamento de Erros:
Imagine que o banco de dados caiu. O Service lança um erro técnico.
- Como o Middleware Global de Erros deve reagir?
- O que ele deve enviar para o usuário final? (Erro 500 com mensagem técnica ou mensagem genérica?)
- Por que é importante logar o erro real apenas no console do servidor?
Exercícios 09 - Segurança e Autenticação com JWT 🔐
🟢 Fáceis
- Conceito: Qual a principal diferença entre Autenticação e Autorização?
- JWT: Quais são as 3 partes de um token JWT?
🟡 Médios
- Segurança: Por que nunca devemos incluir informações sensíveis (como a senha do usuário) dentro do Payload do JWT?
- Stateless: Quais as vantagens de uma arquitetura "Stateless" em sistemas que precisam escalar para milhões de usuários?
🔴 Desafio
- Análise de Token:
Imagine que você interceptou um token JWT.
- Como você faria para ler o nome do usuário que está dentro dele sem saber a chave secreta?
- Agora, imagine que você tentou mudar o
iddo usuário para burlar o sistema. Por que o servidor vai rejeitar esse token quando você tentar usá-lo? - Onde o frontend deve armazenar o token para que ele não suma quando a página for recarregada?
Exercícios 10 - Controle de Acesso (RBAC) 🛡️
🟢 Fáceis
- Conceito: No sistema RBAC, o que é uma "Role"?
- Status Code: Se um usuário comum tenta acessar uma área de administrador, qual o código de erro HTTP (Status Code) mais apropriado?
🟡 Médios
- Diferença: Explique a diferença fundamental entre erro 401 e erro 403. Em qual desses casos o usuário deve ser redirecionado para a tela de login?
- Middleware:
Imagine que você tem uma rota
/admin/dashboard. Quais seriam os dois middlewares (nesta ordem) que o usuário deveria passar antes de chegar no Controller final?
🔴 Desafio
- Hierarchy (Hierarquia):
Implemente (em pseudocódigo) uma lógica onde a função
autorizar(['EDITOR', 'ADMIN'])permita a passagem se o usuário logado tiver QUALQUER um desses dois perfis.- Como você garantiria que um
ADMINsempre consiga acessar rotas deUSEReEDITORsem precisar listar oADMINem todas as rotas do sistema? - Qual a vantagem dessa abordagem centralizada?
- Como você garantiria que um
Exercícios 11 - Refresh Token e Segurança Avançada 🏗️
🟢 Fáceis
- Conceito: Por que Access Tokens costumam ter vida curta?
- Bibliotecas: Para que serve a biblioteca Helmet em um aplicativo Express?
🟡 Médios
- CORS: Explique por que o CORS é uma segurança do Navegador e não do servidor. O que acontece se você tentar chamar uma API sem CORS a partir de um script no Terminal (cURL)?
- Flow: Desenhe o fluxo de uma requisição que retorna erro 401 por token expirado e como o frontend deve agir para usar o Refresh Token.
- Headers: Cite três informações sensíveis que o Helmet ajuda a esconder nos cabeçalhos HTTP.
🔴 Desafio
- Segurança de Refresh Tokens:
Se o Refresh Token permite gerar novos Access Tokens, por que ele é considerado mais seguro?
- Onde ele deve ser armazenado preferencialmente no navegador (LocalStorage ou Cookies HttpOnly)? Por quê?
- O que é o "Refresh Token Rotation"?
Exercícios 12 - Introdução ao React ⚛️
🟢 Fáceis
- Conceito: O que significa a sigla SPA e qual sua principal vantagem?
- Sintaxe: No React, usamos
classNameouclasspara definir classes CSS? Por quê?
🟡 Médios
- Componentes: Por que dizemos que a arquitetura do React é baseada em "LEGO"? Como isso ajuda na organização do código?
- Vite: Qual a função do Vite no desenvolvimento de um projeto React moderno?
- Props:
Explique como as
propspermitem que um mesmo componente (ex: um Botão) seja usado em vários lugares com textos e cores diferentes.
🔴 Desafio
- JSX vs HTML:
O código abaixo é Javascript ou HTML? Justifique sua resposta mencionando pelo menos duas diferenças sutis que o JSX impõe.
- O que acontece se eu esquecer de fechar a tag
<br>? - Como eu faria para exibir o valor de uma variável
nomedentro doh1?
- O que acontece se eu esquecer de fechar a tag
Exercícios 13 - Estado e Reatividade (Hooks) 🎣
🟢 Fáceis
- Conceito: Por que uma variável comum (ex:
let x = 0) não serve para atualizar um contador na tela do React? - Sintaxe: O que faz o comando
const [valor, setValor] = useState(0);? Explique cada um dos 3 elementos.
🟡 Médios
- Eventos: Como passamos uma função que deve ser executada apenas quando o usuário clica em um botão? Mostre um exemplo de código.
- Imutabilidade:
Por que não podemos fazer
lista.push(item)e depoissetLista(lista)no React? Qual o jeito correto de adicionar um item a um array no estado? - Inputs:
O que é um "Input Controlado" e como o atributo
valuee o eventoonChangetrabalham juntos?
🔴 Desafio
- Toggle de Visibilidade:
Crie a lógica para um componente que esconde ou mostra um texto secreto.
- Qual tipo de dado você usaria no
useState(Boolean, String ou Number)? - Como ficaria a expressão JSX para mostrar o texto apenas se o estado for verdadeiro?
- Qual tipo de dado você usaria no
Exercícios 14 - Efeitos e Chamadas de API 🌐
🟢 Fáceis
- Conceito: O que é um "Efeito Colateral" (Side Effect) no desenvolvimento Frontend?
- useEffect: O que acontece se passarmos um array de dependências vazio
[]para ouseEffect?
🟡 Médios
- Dependências:
Se eu quiser que o
useEffectrode sempre que a variávelusuarioIDmudar, como deve ficar o array de dependências? - Fetch: Explique a ordem de execução do código abaixo:
- Estados de Rede:
Por que é importante ter um estado de
loading(carregando) em aplicações que buscam dados na internet?
🔴 Desafio
- Ciclo de Efeitos:
Imagine que seu efeito faz um
fetche, dentro do.then(), você chama umsetData(dados).- O que acontece se você NÃO passar o array
[]? Explique o loop infinito que isso gera. - Como você faria para exibir uma mensagem "Nenhum resultado encontrado" caso a API retorne um array vazio?
- O que acontece se você NÃO passar o array
Exercícios 15 - Navegação com React Router 🚦
🟢 Fáceis
- Conceito: Por que usamos o React Router em vez de links
<a>comuns em uma SPA? - Componentes: Para que servem os componentes
<BrowserRouter>e<Routes>?
🟡 Médios
- Navegação:
Qual a diferença entre usar o componente
<Link>e o hookuseNavigate? Em quais situações você usaria cada um? - Rota 404: Como configuramos uma rota que deve ser exibida quando o usuário digita uma URL que não existe no site?
- Parâmetros:
Dada a rota
<Route path="/usuario/:nome" element={<Perfil />} />, como o componentePerfilpode descobrir qual o nome que foi digitado na URL?
🔴 Desafio
- Proteção de Rotas:
Imagine que você tem uma página
/adminque só pode ser acessada se o usuário estiver logado.- Como você usaria o
useNavigatedentro de umuseEffectpara redirecionar o usuário para a página de/logincaso ele não tenha um token salvo nolocalStorage? - O que acontece se o usuário clicar no botão "Voltar" do navegador após ser redirecionado?
- Como você usaria o
Exercícios 16 - Planejamento do Projeto Final 🏆
🟢 Fáceis
- Escolha do Tema: Qual dos temas sugeridos (Tarefa Cloud, E-commerce, Rede Social, Helpdesk) você escolheu para o seu projeto final? Se for um tema autoral, descreva-o em uma frase.
- Tecnologias: Enumere pelo menos 3 tecnologias do Frontend e 3 do Backend que você usará no seu TCC.
🟡 Médios
- Arquitetura: Desenhe um diagrama simples (ou explique em texto) como os dados fluirão da sua API Node.js até a tela do usuário no React.
- Segurança: Como você planeja proteger as informações sensíveis (senhas, segredos JWT) no seu projeto final?
- CORS: Por que você precisará configurar o CORS no seu servidor para que o projeto funcione?
🔴 Desafio
- Plano de Entrega:
Crie um cronograma de 3 passos para a construção do seu projeto:
- Passo 1: O que será feito primeiro no Backend?
- Passo 2: Como será a integração inicial?
- Passo 3: Qual a funcionalidade de "brilho" (extra) que você quer adicionar?
Projetos
Projetos Práticos 🚀
Transforme teoria em prática com desafios progressivos que compõem seu portfólio.
-
Módulo 1: Fundamentos de DevOps ---
-
Módulo 2: CI/CD e Automação ---
-
Módulo 3: Cloud Computing ---
-
Módulo 4: Monitoramento e Segurança ---
Projeto 01 - Cinto de Utilidades Backend 🛠️
Objetivo: Validar a instalação das ferramentas e testar a comunicação básica com uma API pública.
O Desafio
- Instale o Postman ou Insomnia.
- Realize uma requisição do tipo
GETpara a API pública do GitHub:https://api.github.com/users/github. - Analise a resposta (JSON). Identifique os campos
login,idepublic_repos. - Instale o Docker Desktop e rode o comando
docker run hello-worldno terminal para garantir que a virtualização está ativa. - Crie uma conta no GitHub (se não tiver) e instale o Git.
O que entregar?
- Print (screenshot) da resposta JSON no Postman/Insomnia.
- Print do terminal com a mensagem de sucesso do Docker "Hello from Docker!".
Projeto 02 - Modelagem de Fluxo de Gateway 🏗️
Objetivo: Entender o roteamento e a agregação de dados em um Gateway.
O Desafio
Imagine que você tem dois serviços:
- Serviço A (User): Retorna { "id": 1, "nome": "Ricardo" }
- Serviço B (Orders): Retorna [ { "id": 101, "valor": 50.0 }, { "id": 102, "valor": 30.0 } ]
- Desenhe um diagrama (pode ser no Mermaid ou papel) onde um API Gateway recebe uma chamada em
/dashboard/1e busca os dados nos dois serviços. - Escreva o JSON final que o Gateway entregaria para o Frontend, unindo as informações do usuário e seus pedidos.
- Pesquisa: Liste 3 ferramentas famosas de API Gateway de mercado (ex: Kong, AWS API Gateway, etc).
O que entregar?
- O diagrama de fluxo.
- O JSON de resposta agregada.
- A lista de ferramentas pesquisadas.
Projeto 03 - Contrato de API de Rede Social ⚡
Objetivo: Aplicar os conceitos de recursos, verbos e JSON na modelagem de uma rede social.
O Desafio
Você deve projetar a API para o recurso "Postagens" (Posts).
- Liste as 5 rotas principais (CRUD) para gerenciar postagens, indicando o Verbo, a URI e o Status Code de sucesso esperado.
- Crie um exemplo de JSON para uma postagem que contenha:
idautor_idconteúdo(texto)data_publicacaotags(lista de strings)
- Simulação de Erro: Qual seria a URI e o Verbo para dar um "Like" em uma postagem? Projete isso.
O que entregar?
- Tabela com as 5 rotas (Verbo, URI, Status).
- Bloco de código com o JSON de exemplo.
- Proposta da rota de "Like".
Projeto 04 - Criando o Primeiro Mock 🧱
Objetivo: Dominar o fluxo de documentação de contrato e simulação de servidor.
O Desafio
Você deve criar um servidor de Mock para uma API de Lista de Tarefas (ToDo).
- Use o Postman (Mock Server) ou o Mockoon para criar 2 rotas:
GET /tarefas: Deve retornar uma lista com pelo menos 3 tarefas.POST /tarefas: Deve aceitar uma nova tarefa e retornar201 Created.
- Documente os campos de uma tarefa (ex:
id,titulo,concluida). - Teste as rotas e garanta que o servidor responda corretamente no formato JSON.
O que entregar?
- Print (screenshot) do Swagger UI ou da tela do Mock Server rodando.
- O JSON de exemplo retornado pelo
GET /tarefas. - Print do teste da rota
POST /tarefascom sucesso.
Projeto 05 - Meu Primeiro Controller ⚙️
Objetivo: Praticar a criação de rotas e a captura de diferentes tipos de parâmetros.
O Desafio
Crie a estrutura de um Controller para um sistema de Gestão de Tarefas (To-Do). Você deve definir (em pseudocódigo ou na linguagem que preferir):
- Uma rota para listar todas as tarefas, permitindo um filtro opcional por
status(ex: concluída ou pendente). - Uma rota para buscar uma única tarefa pelo seu
id. - Uma rota para criar uma tarefa, recebendo
tituloedescricao. - Sinalize qual seria o Status Code de sucesso para cada uma das rotas acima.
O que avaliar?
- Uso correto de Path Params vs Query Params.
- Escolha dos verbos HTTP adequados.
- Padronização das respostas de sucesso.
Projeto 06 - Implementando a Lógica de Negócio 🧠
Objetivo: Aplicar a separação de camadas criando um Service para validação de dados.
O Desafio
Você deve criar o UsuarioService para um sistema de cadastro.
- Função
validarSenha(senha): Deve garantir que a senha tenha no mínimo 8 caracteres e contenha pelo menos um número. - Função
criarUsuario(dados):- Chama a validação de senha.
- Verifica se o e-mail já está sendo usado (simule um erro se estiver).
- Retorna o usuário criado (sem a senha!).
- Simule o Controller chamando esse Service e tratando o erro de "Senha Insegura" com um Status Code 400.
O que observar?
- O Service não deve usar objetos globais como
reqoures. - As mensagens de erro devem ser claras e informativas.
- Uso de DTOs (retornar objeto filtrado).
Projeto 07 - Modelagem de Banco de Dados 🗄️
Objetivo: Praticar a criação de esquemas relacionais e comandos SQL básicos.
O Desafio
Modele o banco de dados para um sistema de Aluguel de Filmes:
- Tabelas: Crie as tabelas
ClienteseFilmes. - Campos:
Clientesdeve terid,nomeeemail.Filmesdeve terid,tituloegenero.
- Relacionamento: Crie uma terceira tabela
Alugueisque ligue um cliente a um filme (incluindo adata_aluguel). - SQL: Escreva uma query que liste o nome do cliente e o título do filme para todos os aluguéis feitos hoje.
O que avaliar?
- Definição correta das Chaves Primárias.
- Uso de Chaves Estrangeiras para conectar as tabelas.
- Clareza na estrutura das colunas.
Projeto 08 - Schema de Validação Profissional ✅
Objetivo: Praticar a criação de regras de validação para garantir a integridade da API.
O Desafio
Crie o esquema de validação (em pseudocódigo ou usando uma biblioteca como Zod/Joi) para um Cadastro de Eventos:
- Campos Obrigatórios:
titulo(mín. 10 char),data(deve ser futura),capacidade_maxima(número positivo). - Campos Opcionais:
descricao(máx. 500 char),link_inscricao(formato de URL). - Sanitização: O título não deve conter espaços em branco sobrando no início ou no fim (trim).
- Simulação: Mostre qual seria a mensagem de erro retornada se o usuário enviasse uma capacidade negativa.
O que avaliar?
- Clareza e rigor das regras de validação.
- Escolha dos tipos de dados corretos.
- Mensagens de erro amigáveis ao desenvolvedor (DX).
Projeto 09 - Sistema de Login (Simulado) 🔐
Objetivo: Implementar a lógica de geração de tokens JWT para autenticação.
O Desafio
Crie uma API de simulação de login:
- Entrada: Receba um JSON com
emailesenha. - Validação: Verifique se a senha tem mais de 6 caracteres.
- JWT: Use uma biblioteca (ou pseudocódigo) para gerar um token que contenha o
iddo usuário e suapermissão(ex: 'aluno'). - Expiração: Configure o token para ser válido por apenas 24 horas.
- Resposta: Retorne para o cliente um objeto contendo o
tokene onomedo usuário.
O que avaliar?
- Tratamento correto de erro caso a senha seja curta.
- Estrutura limpa do Payload do JWT.
- Escolha de uma chave secreta segura (simulada).
Projeto 10 - Gerenciador de Permissões 🛡️
Objetivo: Implementar a lógica de proteção de rotas baseada em perfis de usuário.
O Desafio
Crie a estrutura de autorização para um Sistema de RH:
- Roles: Defina três tipos:
ADMIN,GESTOReFUNCIONARIO. - Regras:
- Todos podem ver o próprio perfil (
GET /me). - Apenas
GESTOReADMINpodem ver a lista de salários (GET /salarios). - Apenas
ADMINpode deletar um registro (DELETE /colaboradores/:id).
- Todos podem ver o próprio perfil (
- Middleware: Desenhe (em desenho técnico ou código) como seria o "fluxo da cancela" (Authentication Middleware -> Authorization Middleware).
O que avaliar?
- Separação clara entre quem é você e o que você pode fazer.
- Uso correto dos Status Codes em caso de bloqueio.
- Lógica de hierarquia (Admin pode tudo).
Projeto 11 - Blindagem de API 🏗️
Objetivo: Implementar camadas avançadas de segurança e renovação de tokens.
O Desafio
Fortaleça sua API de login:
- Helmet: Instale e configure o Helmet para proteger os Headers.
- CORS: Restrinja o acesso à API para que apenas o domínio
http://localhost:3000possa consultá-la. - Refresh Token: Implemente uma rota
/refreshque receba um refresh token, valide-o no banco (ou lista em memória) e gere um novoaccessToken. - Rate Limit: Adicione uma trava para que ninguém possa tentar logar mais de 5 vezes em 1 minuto.
O que avaliar?
- Configuração correta das origens no CORS.
- Lógica de expiração do Refresh Token (ele deve durar muito mais que o Access Token).
- Verificação se o Helmet está realmente escondendo o header
X-Powered-By.
Projeto 12 - Primeiro App React ⚛️
Objetivo: Criar e organizar componentes básicos usando React e Vite.
O Desafio
Crie uma página de Perfil de Usuário:
- Componente
FotoPerfil: Exibe uma imagem circular. - Componente
InfoUsuario: Recebenomeebiovia props e exibe na tela. - Componente
BotaoSeguir: Um botão simples que, por enquanto, apenas exibe um alerta ao ser clicado. - Layout: Organize esses componentes dentro do
App.jsxusando CSS simples para centralizar o conteúdo.
O que avaliar?
- Separação correta dos componentes em arquivos diferentes (ou funções separadas).
- Uso correto de Props para personalizar o nome do usuário.
- Sintaxe JSX correta (tags fechadas, className, etc).
Projeto 13 - Lista Dinâmica de Contatos 📱
Objetivo: Aplicar o uso de useState e gerenciamento de listas.
O Desafio
Crie um mini-gerenciador de contatos:
- Inputs: Dois campos de texto (Nome e Telefone).
- Botão Adicionar: Quando clicado, deve validar se os campos estão preenchidos e adicionar o contato em um Estado de Array.
- Lista: Exiba todos os contatos adicionados abaixo do formulário.
- Botão Limpar: Um botão que limpa toda a lista de contatos.
O que avaliar?
- Uso correto do
useStatepara os inputs e para a lista. - Uso do
.map()para renderizar a lista de contatos. - Limpeza dos campos de input após a adição com sucesso.
Projeto 14 - Buscador de Repositórios 🔍
Objetivo: Consumir uma API real e gerenciar estados de carregamento.
O Desafio
Crie um app que busca repositórios do GitHub de um usuário:
- Input: Campo para digitar o nome do usuário do GitHub.
- Botão Buscar: Ao clicar, deve disparar a busca.
- Loading: Enquanto a API não responde, deve aparecer o texto "Buscando repositórios...".
- Lista: Exiba o nome de todos os repositórios públicos encontrados.
- Erro: Se o usuário não existir, exiba "Erro: Usuário não encontrado".
O que avaliar?
- Uso do
useEffectpara carregar dados (pode ser ao carregar a página ou via clique). - Tratamento correto dos estados:
null,loading,dataeerror. - Renderização limpa usando
.map().
Projeto 15 - Sistema de Multi-Páginas 🚦
Objetivo: Implementar a navegação completa em uma SPA.
O Desafio
Transforme seu app de repositórios ou contatos em um site completo com 3 páginas:
- Home (/): Uma página de boas-vindas com links para as outras seções.
- Dashboard (/app): Onde fica a funcionalidade principal (ex: a busca de repositórios).
- Sobre (/sobre): Uma página contando quem criou o projeto.
- 404: Uma página personalizada para links quebrados.
Requisito Extra (Parâmetro)
Crie uma página de Perfil de Repositório (/repo/:id) que deve ser aberta ao clicar em um item da lista. Essa página só precisa exibir o ID que foi clicado por enquanto.
O que avaliar?
- Configuração correta do
BrowserRouternomain.jsxouApp.jsx. - Uso exclusivo de
<Link>para navegação em menus. - Funcionamento correto dos parâmetros de URL com
useParams.
Projeto 16 - App Final Full-Stack Integrador 🏆
Objetivo: O "TCC (Trabalho de Conclusão de Curso)" do desenvolvedor Full-Stack.
O Tema
Escolha um tema que resolva um problema real integrando o que você construiu no Backend (Módulos 1-3) com o que aprendeu no Frontend (Módulo 4).
Requisitos Mínimos
- Backend (Express): Uso obrigatório de rotas protegidas por JWT e validação de dados.
- Frontend (React): Componentização clara, uso de Hooks (
useState,useEffect) e navegação comReact Router. - Integração: O Frontend deve consumir a sua própria API de forma assíncrona.
- UX/UI: Interface amigável, com tratamento de estados de carregamento e erro.
- Segurança: Configuração correta de CORS e Headers de segurança (Helmet).
Documentação ✨
Seu repositório no GitHub deve ter um README.md impecável, com imagens (prints) da aplicação, explicação das tecnologias usadas e instruções claras de como rodar o servidor e o cliente. Este projeto será o seu maior cartão de visitas!
Boa sorte e bom código! 🚀🚀🚀
Quizzes
Quizzes Interativos 🧠
Teste seus conhecimentos rapidamente ao final de cada módulo.
-
Módulo 1: Fundamentos de DevOps ---
-
Módulo 2: CI/CD e Automação ---
-
Módulo 3: Cloud Computing ---
-
Módulo 4: Monitoramento e Segurança ---
Quiz 01 - Introdução
Quiz 02 - Introdução
Quiz 03 - Introdução
Quiz 04 - Introdução
Quiz 05 - Introdução
Quiz 06 - Introdução
Quiz 07 - Introdução
Quiz 08 - Introdução
Quiz 09 - Introdução
Quiz 10 - Introdução
Quiz 11 - Introdução
Quiz 12 - Introdução
Quiz 13 - Introdução
Quiz 14 - Introdução
Quiz 15 - Introdução
Quiz 16 - Introdução
Slides
Slides 📺
Material visual para acompanhamento das vídeo-aulas.
-
Módulo 1 ---
-
Módulo 2 ---
-
Módulo 3 ---
-
Módulo 4 ---
Aula 01 - Introdução a Microsserviços 🌐
De Monólitos a Sistemas Distribuídos
Agenda de Hoje 📅
- Panorama do Software Moderno
- Monólitos vs Microsserviços
- A Economia das APIs
- Escalabilidade Vertical vs Horizontal
- Cinto de Utilidades (Ferramentas)
- Setup do Ambiente
1. O Mundo Cloud-Native ☁️
- Sistemas globais exigem disponibilidade 24/7.
- Milhões de requisições por segundo.
- Deploy contínuo (várias vezes ao dia).
2. A Evolução da Arquitetura 🏛️➡️🏗️
2.1 O Monólito 🏛️
- Um único projeto, um único deploy.
- Tudo ou nada: erro em um lugar afeta tudo.
- Difícil de escalar partes específicas.
- Ideal para: Projetos pequenos, MVPs rápidos.
2.2 Microsserviços 🏗️
- Conjunto de serviços independentes.
- Comunicação via rede (APIs).
- Cada um com seu banco de dados.
- Ideal para: Sistemas complexos e escaláveis.
3. O Papel das APIs 📡
- Contract-First: Acordo de comunicação.
- REST como padrão dominante.
- JSON: A língua universal.
Escalabilidade: Vertical vs Horizontal
| Vertical (Scale Up) | Horizontal (Scale Out) |
|---|---|
| Aumenta CPU/RAM | Adiciona mais servidores |
| Tem limite físico | Virtualmente ilimitada |
| Causa downtime no upgrade | Zero downtime (Redundância) |
Arquitetura de Microsserviços
graph LR
User[Cliente] --> AGW[API Gateway]
AGW --> S1[Usuários]
AGW --> S2[Pedidos]
AGW --> S3[Pagamentos]
S1 --> DB1[(DB)]
S2 --> DB2[(DB)]
S3 --> DB3[(DB)]
4. Ferramentas Indispensáveis 🛠️
Client HTTP: Postman & Insomnia
- Testar rotas sem Frontend.
- Analisar Headers e Status Codes.
- Simular diferentes cenários de erro.
Containerização: Docker 🐋
- "Roda na minha máquina, roda em qualquer lugar".
- Isola dependências e versões.
- Facilita a subida de múltiplos serviços locais.
5. Estrutura de Projeto Backend 📂
- Divisão clara de responsabilidades.
- Controllers, Services e Repositories.
- Tratamento global de exceções.
6. Setup do Ambiente 🚀
Requisitos:
- IDE: VS Code ou IntelliJ.
- Postman (Desktop ou Extensão).
- Docker Desktop.
- Git & GitHub.
Resumo da Aula ✅
- Microsserviços trazem resiliência e escala.
- APIs são o coração da comunicação moderna.
- Ferramentas como Docker mudaram o jogo.
- Começamos nossa jornada Fullstack!
Próxima Aula: Arquitetura e Gateway 🏗️
- Como os serviços conversam?
- O que é Service Discovery?
- Protegendo a porta de entrada.
Dúvidas? 🤔
"A arquitetura de hoje é o legado de amanhã. Escolha com sabedoria."
Aula 02 - Arquitetura e Gateway 🏗️
Orquestrando Microsserviços
Agenda 📅
- Comunicação entre Serviços
- Síncrono vs Assíncrono
- O Papel do API Gateway
- Service Discovery
- Load Balancing
- Padrões de Resiliência
1. Como os Serviços Conversam? 💬
- Microsserviços são ilhas que precisam de pontes.
- Dois mundos: Sync e Async.
1.1 Comunicação Síncrona 🔄
- Cliente bloqueia até a resposta.
- Uso de HTTP/REST ou gRPC.
- Risco: Acoplamento temporal e gargalos.
1.2 Comunicação Assíncrona 📬
- Envia e esquece (Eventos).
- Uso de Filas e Tópicos (Broker).
- Vantagem: Escalabilidade e desacoplamento.
2. API Gateway: O Porteiro 🚪
- Única entrada para o mundo exterior.
- Esconde a complexidade interna.
Gateway Responsibilities
- Roteamento:
/p-> Pagamento,/e-> Estoque. - Segurança: Autenticação centralizada.
- Rate Limit: Proteção contra flood.
- Logs & Monitoramento.
3. Service Discovery 🔎
- Onde está o servidor de pagamentos?
- Agenda dinâmica de IPs e Portas.
- Ferramentas: Netflix Eureka, Consul.
4. Load Balancing ⚖️
- Distribuição inteligente da carga.
- Evita que um container "morra" de trabalho.
graph TD
GW[Gateway] --> LB[Load Balancer]
LB --> S1[Serviço A]
LB --> S2[Serviço B]
LB --> S3[Serviço C]
5. Resiliência: Circuit Breaker 🔌
- Detecta serviços lentos ou falhos.
- Abre o circuito para proteger o resto do sistema.
- Evita o cascateamento de erros.
Comparativo: Sync vs Async
| Característica | Síncrono 🔄 | Assíncrono 📬 |
|---|---|---|
| Resposta | Imediata | Eventual |
| Desempenho | Limitado pelo destino | Alto débito |
| Uso comum | Cadastro/Login | Geração de Relatórios |
6. Prática: O "Dashboard" Agregador 💻
- Como o Gateway une dados de 3 serviços?
- Agregação de respostas (Aggregation Pattern).
Desafio Relâmpago ⚡
O que acontece se o seu API Gateway cair? Ele é um ponto único de falha?
Resumo ✅
- Sync é fácil, Async é escalável.
- API Gateway protege e organiza.
- Service Discovery é essencial em containers.
- Resiliência não é opcional!
Próxima Aula: Modelagem REST 📡
- Verbos HTTP.
- Status Codes.
- O contrato ideal.
Dúvidas? 🏗️
Aula 03 - Modelagem de APIs RESTful 📡
Recursos, Verbos e Contratos
Agenda 📅
- O que é REST?
- Recursos e URIs
- Verbos HTTP (GET, POST, PUT...)
- Status Codes
- JSON: A Linguagem das APIs
- Boas Práticas de Design
1. REST: A "Língua" da Web 🌐
- Style arquitetural para sistemas distribuídos.
- Baseado no protocolo HTTP.
- Independência entre Client e Server.
Princípios REST
- Stateless: Cada requisição é única.
- Uniform Interface: Padrões compartilhados.
- Cacheable: Melhore a performance.
2. Identificando Recursos 📍
- Um recurso é qualquer coisa que expomos.
- URI: O endereço do recurso.
O que NÃO fazer:
GET /obterUsuarios ❌
O que fazer:
GET /usuarios ✅ (Sempre substantivos no plural!)
3. Os Verbos HTTP 🛠️
Eles definem a intenção da chamada:
- GET: Buscar dados.
- POST: Criar novo dado.
- PUT: Atualizar (Trocar tudo).
- PATCH: Atualizar (Apenas um pedaço).
- DELETE: Remover dado.
Idempotência e Segurança
| Verbo | Seguro? | Idempotente? |
|---|---|---|
| GET | Sim ✅ | Sim ✅ |
| POST | Não ❌ | Não ❌ |
| PUT | Não ❌ | Sim ✅ |
| DELETE | Não ❌ | Sim ✅ |
4. Status Codes: A Resposta 🚦
- 2xx: Deu certo! (200, 201, 204).
- 4xx: Você (cliente) errou algo (400, 401, 404).
- 5xx: Eu (servidor) quebrei (500, 503).
5. O Formato JSON 🏗️
- Leve, legível e universal.
6. Design de URIs Complexas
Como buscar os pedidos de um usuário específico?
GET /usuarios/123/pedidos ✅
- Hierarquia lógica e limpa.
7. Prática: Postman em Ação 💻
- Testando verbos em APIs reais.
- Analisando Headers e Body.
Desafio REST ⚡
Se você quer mudar apenas o e-mail de um usuário, qual verbo deve usar: PUT ou PATCH?
Resumo ✅
- REST é sobre recursos e padrões.
- URIs usam substantivos no plural.
- Status codes guiam o frontend.
- JSON é o padrão de facto.
Próxima Aula: Swagger e Mocks 📝
- Documentação automática.
- Como trabalhar sem o backend pronto?
Dúvidas? 📡
Aula 04 - Documentação e Mocks 📝
Developer Experience e Contratos
Agenda 📅
- Por que documentar?
- OpenAPI vs Swagger
- Swagger UI e Editor
- O Poder dos Mocks
- Developer Experience (DX)
- Ferramentas de Simulação
1. Documentação é DX 🚀
- Sua API é seu produto.
- Documentar economiza tempo de suporte.
- Facilita a integração com Front/Mobile.
2. OpenAPI (OAS) 📜
- O padrão mundial.
- Arquivo YAML ou JSON descritivo.
- Agnóstico de linguagem.
3. Swagger: O Canivete Suíço 🛠️
- Editor: Escreva e valide o contrato.
- UI: Gere a página visual de testes.
- Codegen: Gere código (client/server) automaticamente.
Swagger UI em Ação
- Permite testar endpoints no próprio navegador.
- Mostra exemplos de JSON de entrada e saída.
- Exibe todos os Status Codes possíveis.
4. O Poder dos Mocks 🎭
- Development in Parallel: Front não espera pelo Back.
- Servidor "Fake" que retorna dados reais.
- Valide a experiência antes da implementação complexa.
5. Developer Experience (DX) 👨💻
Como ser amado por outros devs:
- Nomes de rotas claros.
- Erros descritivos no Body.
- Exemplos de requisição.
- Documentação atualizada (ou gerada pelo código).
6. Ferramentas Recomendadas 🧰
- Swagger Editor: Online ou Local.
- Mockoon: Mock local amigável.
- Prism: Mock via CLI.
- Postman: Collections documentadas.
7. Prática: Editando um YAML 💻
- Desenhando um endpoint
GET /tarefas. - Definindo parâmetros de entrada.
- Criando esquemas de dados.
Desafio: Mock vs Stubs ⚡
Qual a principal vantagem de um Mock Server online (como Postman) em relação a um Mock rodando apenas no computador do desenvolvedor?
Resumo ✅
- OpenAPI é o contrato.
- Swagger UI é a vitrine da sua API.
- Mocks destravam o desenvolvimento da equipe.
- DX é o diferencial de uma boa API.
Próxima Aula: Implementação Backend! 💻
Módulo 2: Manipulação de Dados
- Controllers e Services.
- Repositories e Banco de Dados.
- Mão na massa com código real!
Dúvidas? 📝
Aula 05 - Implementação de APIs ⚙️
Controllers e Rotas
Agenda 📅
- Camadas do Backend
- O Papel do Controller
- Rotas e Handlers
- Capturando Dados (Params/Body)
- Status Codes na Prática
- Injeção de Dependência
1. Organização em Camadas 🧱
- Controller: Trata a entrada (HTTP).
- Service: Regras de negócio.
- Repository: Acesso ao banco.
2. O Papel do Controller 🎮
- Ele é o ponto de entrada.
- Não deve ter lógica complexa!
- Deve apenas orquestrar a execução.
Controller = Garçom 🤵 Service = Cozinheiro 👨🍳
3. Rotas e Handlers 📍
- Rota: Verbo HTTP + Path.
- Handler: Função executada.
4. Capturando Dados 📥
- Path Params:
/id/123(Identificação). - Query Params:
?q=busca(Filtro). - Body: Enviando JSON (Criação/Update).
5. Respostas de Qualidade 📤
- Nunca esqueça o Status Code!
- Sucesso: 200, 201, 204.
- Erro: 400, 401, 404, 500.
6. Injeção de Dependência 💉
- Receber serviços prontos.
- Facilita testar o Controller "isolado".
7. Prática: O Primeiro Endpoint 💻
- Mapeando um
GET /ping. - Retornando um
pongem JSON. - Testando no Insomnia/Postman.
Desafio: Params vs Query ⚡
Se você quer listar todos os alunos de uma sala com o nome "Pedro", qual tipo de parâmetro você usaria para o nome?
Resumo ✅
- Controllers são a porta de entrada.
- Devem ser leves e objetivos.
- Capturam dados e retornam status/JSON.
- Seguem as rotas definidas.
Próxima Aula: Regras de Negócio! 🧠
Services e Validações
- Onde o cálculo acontece.
- Isolando o código do "mundo externo".
Dúvidas? ⚙️
Aula 06 - Services e Regras de Negócio 🧠
O Cérebro da Aplicação
Agenda 📅
- Por que separar as coisas?
- Responsabilidades do Service
- O Fluxo: Controller -> Service
- Tratamento de Erros Profissional
- DTOs: Protegendo os Dados
- Service vs ViewModel (Mobile)
1. O Problema: "Controller Gordo" 🍔
- Lógica de negócio misturada com HTTP.
- Código impossível de reutilizar.
- Difícil de testar.
2. A Solução: Layered Architecture 🧱
- Controller: Trata o transporte (HTTP).
- Service: Trata a regra (O QUE fazer).
3. O que vai no Service? ⚖️
- Validações complexas.
- Cálculos de valores.
- Envio de e-mails/notificações.
- Integração com repositórios.
4. Tratamento de Erros ⚠️
- O Service Lança (Throws).
- O Controller Captura (Catches).
// Service
if (!saldo) throw new Error("Saldo Insuficiente");
// Controller
try { ... } catch (e) { res.status(400)... }
5. DTOs: Filtrando a Saída 📦
- Nunca envie "tudo" do banco para o cliente.
- Proteja campos sensíveis (Ex:
senha_hash). - Melhore a performance (menos dados trafegados).
6. Service vs ViewModel 🆚
- No Backend: Service é o cérebro.
- No Mobile/Front: ViewModel é o cérebro.
- Ambos servem para "limpar" a camada de visualização.
7. Prática: Validando um Cadastro 💻
- Verificando se o e-mail é válido.
- Verificando se o usuário já existe.
- Lançando erros específicos.
Desafio: Onde colocar? ⚡
Se uma regra diz: "Usuários VIP ganham 20% de desconto", essa regra deve ficar no Controller ou no Service?
Resumo ✅
- Controllers recebem, Services processam.
- Mantenha seus Controllers "finos" (Slim Controllers).
- Centralize as regras para facilitar a manutenção.
- DTOs são as fronteiras dos dados.
Próxima Aula: Onde os dados vivem! 🗄️
Repositories e Banco de Dados
- PostgreSQL e SQL básico.
- Camada de persistência.
Dúvidas? 🧠
Aula 07 - Repositories e Banco de Dados 🗄️
Onde a informação descansa
Agenda 📅
- Por que Bancos de Dados?
- PostgreSQL: O Robusto
- SQL Básico (SELECT, INSERT...)
- Relacionamentos (1:N, N:N)
- Camada de Persistence
- O Padrão Repository
1. Persistência de Dados 💾
- Sem banco, o servidor esquece tudo ao reiniciar.
- Precisamos de segurança e integridade.
- Estritamente Tipado: O banco garante o formato.
2. Por que PostgreSQL? 🐘
- Código Aberto (Open Source).
- Extremamente confiável (ACID).
- Suporta dados complexos (JSONB).
3. SQL: A Linguagem Universal 🗣️
- DDL: Define a estrutura (Tabelas).
- DML: Manipula os dados (Linhas).
4. O Coração: Relacionamentos 🔗
- 1:N: Um cliente, muitos pedidos.
- N:N: Muitos alunos, muitos cursos.
- Foreign Key: A âncora que liga tudo.
5. Camada de Persistence 🧱
- O código que conversa com o driver do banco.
- Onde as queries são traduzidas para o código.
6. Padrão Repository 📥
- "Não me diga como, diga O QUE você quer".
- Isola o SQL da regra de negócio.
7. Migrations 📜
- Controle de versão para o Banco.
- Permite "voltar no tempo" se algo quebrar.
- Mantém o time em sincronia.
Desafio SQL ⚡
Qual comando você usaria para mudar o preço de todos os produtos da categoria 'Games' para 99.90?
Resumo ✅
- Bancos de dados dão memória ao sistema.
- PostgreSQL é o padrão da indústria.
- SQL é habilidade obrigatória para backend.
- Repository Pattern traz flexibilidade.
Próxima Aula: Integridade! ✅
Validação e Boas Práticas
- Garantindo que dados "sujos" não entrem no banco.
- Tratamento de exceções de banco.
Dúvidas? 🗄️
Aula 08 - Boas Práticas e Validação ✅
Qualidade e Segurança no Backend
Agenda 📅
- Por que Validar Tudo?
- Validação vs Sanitização
- Schema Validation (Ex: Zod)
- Clean Code (Código Limpo)
- Tratamento de Erros Profissional
- Middlewares Globais
1. Regra de Ouro: Desconfiança 🛡️
- O cliente é o "lado perigoso" da aplicação.
- Validações evitam dados corrompidos.
- Defesa em Profundidade: Garanta a regra no banco E no código.
2. Validar vs Sanitizar 🧼
- Validar: Checar (Idade > 18?).
- Sanitizar: Limpar (Remover
<script>).
3. Schema Validation 📐
- Crie "moldes" para seus dados.
- Validação centralizada e reutilizável.
4. O Backend Elegante (Clean Code) ✨
- DRY: Don't Repeat Yourself (Não repita lógica).
- KISS: Keep It Simple, Stupid (Mantenha o simples).
- Nomes de funções que explicam o que está acontecendo.
5. Tratamento de Erros 🚨
- Controller trata o fluxo, não o detalhe técnico.
- Try/Catch Global: Evite crashes.
- Mensagens amigáveis para o cliente.
6. Logs vs Mensagens 📜
- Terminal/Log: Detalhe técnico completo.
- Cliente (JSON): Apenas o que ele precisa saber.
"Ocorreu um erro interno" (Cliente) ✅ "Query failed at line 42 due to NULL constraint" (Logs) ✅
7. Prática: O Schema Perfeito 💻
- Validando um produto complexo.
- Tratando erros de tipo (String no lugar de Number).
Desafio: Limpeza ⚡
Se você recebe um texto de um post com muitos espaços em branco no final, você deve Validar ou Sanitizar?
Resumo ✅
- Backend robusto exige validação rigorosa.
- Limpe os dados antes de salvar (Sanitize).
- Middleware Global centraliza a gestão de falhas.
- Código limpo economiza meses de manutenção.
Próxima Aula: Módulo 3! 🔐
Segurança e Autenticação
- Quem é você? (Authentication).
- O que você pode fazer? (Authorization).
Dúvidas? ✅
Aula 09 - Segurança e Autenticação com JWT 🔐
Portas trancadas e Crachás Digitais
Agenda 📅
- Autenticação vs Autorização
- O Fim das Sessões (Stateful)
- O que é JWT?
- Estrutura: Header, Payload, Signature
- Fluxo de Login completo
- Melhores Práticas de Segurança
1. Quem é Você? (Autenticação) 🚦
- Validar a identidade do usuário.
- Login e Senha.
- Autorização: O que você PODE fazer? (Níveis de acesso).
2. Por que JWT? 🤔
- Abordagem Stateless (Sem estado).
- O servidor não guarda sessão na memória (escalável!).
- Perfeito para Microserviços e Mobile.
3. Estrutura do Token 🎫
- Header: Algoritmo (ex: HS256).
- Payload: Os dados (id, role, nome).
- Signature: O lacre de segurança.
4. O Coração do JWT: A Assinatura 🖋️
- Usa uma
SECRET_KEYno servidor. - Garante que o token não foi "hackeado" ou alterado.
5. Fluxo de Login 🌊
- Envia credenciais -> 2. Servidor valida -> 3. Gera JWT -> 4. Frontend guarda o Token -> 5. Envia no Header em cada requisição.
6. Segurança em Mobile 📱
- Nunca guarde em arquivos de texto!
- Use EncryptedSharedPreferences (Android) ou Keychain (iOS).
7. Melhores Práticas 🏆
- Use chaves secretas longas e seguras.
- Defina tempo de expiração (
expiresIn). - Protocolo HTTPS é obrigatório!
Desafio de Segurança ⚡
O Payload do JWT é criptografado ou apenas codificado? Posso guardar a senha do usuário lá?
Resumo ✅
- JWT permite autenticação rápida e escalável.
- Header + Payload + Signature.
- Stateless = Servidor mais leve.
Próxima Aula: Controle de Acesso 🛡️
Quem manda aqui? (RBAC)
- Middlewares de autorização.
- Protegendo rotas por nível de usuário.
Dúvidas? 🔐
Aula 10 - Controle de Acesso (RBAC) 🛡️
Hierarquia e Segurança em Camadas
Agenda 📅
- O que é RBAC? (Roles)
- Autenticação vs Autorização
- O Fluxo do Middleware
- Erros 401 vs 403
- Protegendo rotas na prática
- Hierarquia de Perfis
1. Role-Based Access Control 👑
- Permissões ligadas a Perfis (Roles).
- Ex: ADMIN, EDITOR, VIEWER.
- Facilita a gestão de milhares de usuários.
2. A Cancela (Middleware) 🚧
- O middleware checa se o usuário tem a "chave" certa.
- Se não tiver -> 403 Forbidden.
- Se tiver ->
next().
3. O Fluxo de Segurança 🌊
graph LR
Req[Request] --> Auth[Autenticação]
Auth --> |OK| Role[Autorização]
Role --> |OK| Controller[Recurso Final]
4. 401 vs 403: Não confunda! ❌
- 401 (Unauthorized): "Quem é você?". Token inválido ou ausente.
- 403 (Forbidden): "Eu sei quem você é, mas não deixo entrar". Falta de permissão.
5. Implementação Dinâmica 🔒
// Middleware genérico
router.delete('/usuario/:id',
autenticar,
autorizar(['ADMIN']),
userController.remover
);
6. Hierarquia de Acesso 🏛️
- Um Admin deve poder acessar rotas de User?
- Design de sistema: Roles "Pai" e "Filho".
7. Melhores Práticas 🏆
- Centralize a lógica em Middlewares.
- Nunca exponha permissões sensíveis no frontend (segurança do lado do servidor).
Desafio: Segurança ⚡
Em um sistema escolar, o Diretor e o Professor podem ver notas. O Aluno só vê as dele. Como você configuraria a Role da rota GET /notas?
Resumo ✅
- RBAC organiza permissões por grupos.
- Middlewares são os guardiões das rotas.
- Diferenciar 401 de 403 é vital para Debug.
Próxima Aula: Segurança Avançada 🏗️
Session vs Token e Refresh Tokens
- O que fazer quando o token expira?
- Protegendo contra ataques comuns (XSS, CSRF).
Dúvidas? 🛡️
Aula 11 - Refresh Token e Segurança Avançada 🏗️
Blindando sua API contra o mundo
Agenda 📅
- O Problema do Token Curto ⏰
- Refresh Tokens (O que são?)
- CORS: Origens e Destinos
- Helmet: Headers de Aço
- Rate Limit: Contra Brute Force
- Ataques Comuns (XSS, Injection)
1. Por que Tokens Expiram? ⏰
- Segurança! Se roubarem o token, ele dura pouco.
- Problema: O usuário odeia fazer login toda hora.
2. Refresh Token 🔁
- Um token de longa duração (7 dias+).
- Serve apenas para trocar por um novo Access Token.
- Deve ser invalidado se o usuário deslogar.
3. CORS: Cross-Origin Resource Sharing 🌍
- "Quem pode me chamar?".
- Resolvido via Headers no Servidor.
- Nunca use
origin: '*'em ambientes reais!
4. Helmet: Proteção de Headers 🪖
- Remove o
X-Powered-By(não diz que é Express). - Adiciona proteção contra Clickjacking e XSS.
5. Rate Limiting 🔨
- 5 tentativas de login por minuto? Sim.
- Evita que robôs tentem descobrir senhas via "força bruta".
6. Onde salvar os Tokens? 🛡️
- Frontend: LocalStorage? Seguro?
- Melhor Prática: Cookies
HttpOnly+Secure.
7. Melhores Práticas de Segurança 🏆
- Use HTTPS sempre.
- Valide TODAS as entradas do usuário.
- Mantenha as bibliotecas atualizadas.
Desafio de Segurança ⚡
Qual a diferença entre 401 e 403 no contexto de Refresh Tokens? Se eu recebo 401, eu tento o refresh ou deslogo o usuário?
Resumo ✅
- Refresh Token equilibra UX e Segurança.
- CORS e Helmet são as portas do seu castelo.
- Proteja-se contra robôs com Rate Limit.
Próximo Módulo: Front-End Moderno 🎨
Saindo das APIs e indo para a Web!
- Introdução ao React/Vite.
- Consumindo nossas APIs no navegador.
Dúvidas? 🏗️
Aula 12 - Introdução ao React ⚛️
O Poder dos Componentes Modernos
Agenda 📅
- O que são SPAs?
- Por que React?
- Vite: A Ferramenta Rápida
- JSX: JS + HTML
- Componentes e LEGO
- Props: O Coração Dinâmico
1. Single Page Applications (SPA) 📄
- O site que nunca recarrega.
- Navegação fluida e instantânea.
- Ex: Gmail, Facebook, Spotify Web.
2. Por que o React venceu? ⚔️
- Componentização (Foco no Reuso).
- Virtual DOM (Foco na Performance).
- Gigantesco Ecossistema (Foco no Emprego).
3. Vite: O Novo Padrão ⚡
- Inicia o projeto em segundos.
- Feedback instantâneo durante o código.
4. JSX: A Mistura Perfeita 🧪
- Parece HTML, mas tem o poder do Javascript.
5. Componentes = LEGO 🧩
- Pequenas partes isoladas.
- Facilita testes e trabalho em equipe.
6. Props: Passando o Bastão 🎁
- Permite que componentes recebam dados do "pai".
- Torna componentes genéricos e reutilizáveis.
Resumo ✅
- SPA torna a Web parecida com Apps.
- React organiza sua UI em componentes.
- Vite é seu melhor amigo no desenvolvimento.
Próxima Aula: Dinâmica e Estado 🎣
O que acontece quando o usuário clica?
- Hooks:
useState. - Reatividade na prática.
Dúvidas? ⚛️
Aula 13 - Estado e Hooks 🎣
Tornando seu App Interativo
Agenda 📅
- O que é o Estado (State)?
- Hook
useState - Lidando com Cliques e Eventos
- Inputs Controlados
- Imutabilidade e Arrays
1. O Problema da Estática 🧱
- Variáveis comuns mudam nos bastidores...
- ...mas a tela continua a mesma!
- O React precisa de um sinal para re-desenhar.
2. useState: O Motor de Mudança 🚀
- cont: O valor atual.
- setCont: A função que atualiza.
- 0: O ponto de partida.
3. Eventos no React ⚡
onClick={funcao}onChange={(e) => ...}- Sempre em CamelCase!
4. Inputs Controlados ⌨️
- O React é quem manda no valor do input.
value={estado}+onChange.- Facilita validação e limpeza de campos.
5. Imutabilidade (Muito Importante!) 💎
- Nunca altere o estado original:
lista.push(x)❌ - Sempre crie uma cópia nova:
setLista([...lista, x])✅
6. Fluxo de Dados 🌊
- O estado flui do Pai para o Filho via Props.
- Se o estado do Pai muda, todo mundo abaixo dele atualiza.
Desafio de Estado ⚡
Se eu tenho um botão que soma +1 ao contador, o que acontece com a interface se eu esquecer de importar o useState e usar uma variável global let contador = 0?
Resumo ✅
useStatetraz vida aos componentes.- Mudança de estado = Re-renderização.
- Use sempre funções disparadoras (
set...).
Próxima Aula: Efeitos e APIs 🌐
Buscando dados no mundo real!
- Hook:
useEffect. - Consumindo nossa API Backend.
Dúvidas? 🎣
Aula 14 - Efeitos e APIs 🌐
Conectando seu App ao Mundo Real
Agenda 📅
- O que são Side Effects?
- Hook
useEffect - O Array de Dependências
- Buscando dados com
fetch - Estados de Carregamento e Erro
1. Além da Interface 🧪
- Efeitos colaterais são ações que tocam o mundo externo ao componente.
- Ex: Buscar usuários, mudar o título da aba, iniciar um cronômetro.
2. useState vs useEffect 🥊
- useState: Para dados que o usuário vê mudando.
- useEffect: Para ações que o componente faz "sozinho".
3. Os 3 Momentos do useEffect 🕒
- Montagem: Quando o componente nasce.
- Atualização: Quando um dado monitorado muda.
- Desmontagem: Quando o componente morre (Cleanup).
4. O Array de Dependências [] 🗃️
[]-> Roda só uma vez.[cont]-> Roda sempre quecontmudar.Sem array-> Roda em toda atualização (Perigo!).
5. Chamadas de API (Fetch) 📨
useEffect(() => {
fetch("https://api...")
.then(res => res.json())
.then(data => setData(data));
}, []);
6. UX: Estados de Rede 🛡️
- Loading: Mostre um Spinner enquanto espera.
- Error: Avise se a internet caiu ou o usuário não existe.
- Empty: Diga se não há resultados.
Desafio de Efeito ⚡
Se você colocar um alert("Olá") dentro de um useEffect sem o array [], quantas vezes o alerta vai aparecer se o usuário ficar digitando em um campo de texto que atualiza o estado?
Resumo ✅
useEffectorganiza as ações assíncronas.- Controle quando rodar via array de dependências.
- Trate sempre o carregamento e erros para uma boa UX.
Próxima Aula: Navegação 🚦
Multi-páginas com React Router!
/home,/perfil,/contato.- Links e Navegação Programática.
Dúvidas? 🌐
Aula 15 - React Router 🚦
Criando Apps Multi-Página
Agenda 📅
- O que são SPAs?
- Multi-páginas (Simuladas)
- Componentes de Rota
- Navegação (
LinkeuseNavigate) - Parâmetros dinâmicos (
:id)
1. O Mundo do SPA ⚛️
- O site é uma única página HTML.
- O Javascript "troca" a tela sem recarregar.
- UX rápida e fluida.
2. React Router Dom ⚙️
- A biblioteca padrão para web.
- Permite que a URL combine com o que aparece na tela.
3. A Estrutura Básica 🏗️
- BrowserRouter: O container principal.
- Routes: O seletor de rotas.
- Route: Define o caminho (
path) e o componente (element).
4. Navegando sem Recarregar! 🏃♂️
- Use
<Link to="/contato"> - NUNCA use
<a href="...">para rotas internas.
5. Navegação Programática 🚀
- Ideal para redirecionar após ações (Login, Clique em Card).
6. Rotas Dinâmicas (URL Params) 🆔
path="/perfil/:username"- Hook
useParams()captura o valor. - Uma única página que se adapta a mil perfis.
7. Página 404 (Not Found) 👻
path="*"- Garante que o usuário nunca caia em uma tela em branco.
Desafio de Roteamento ⚡
Se eu digitar www.meusite.com/asdfg e não tiver uma rota configurada para isso, o que o usuário vai ver se eu NÃO colocar uma rota com o path="*"?
Resumo ✅
- Roteamento traz a sensação de um site real.
- Hooks
useNavigateeuseParamssão essenciais. - SPAs são o padrão da indústria moderna.
Próxima Aula: O Grande Final 🏆
Projeto Integrado: Backend + Frontend!
- Conectando nossa API Node ao site React.
- O Projeto Final do Curso!
Dúvidas? 🚦
Aula 16 - Projeto Final e Conclusão �
De aluno a Desenvolvedor Full-Stack
Agenda 📅
- O Desafio Final 🔗
- Requisitos Técnicos
- Portfólio no GitHub
- Onde continuar estudando?
- Mensagem de Encerramento
1. O Desafio Final 🚀
Você deve entregar um projeto integrado contendo: - Frontend: SPA em React com rotas. - Backend: API segura em Node.js. - Integração: Conexão real entre os dois. - Design: CSS moderno e responsivo.
2. Sugestões de Temas 💡
- Gerenciador de Tarefas �
- Mini E-commerce 🛒
- Rede Social Simplificada 💬
- Dashboard de Monitoramento 📊
3. O README de Elite ✨
- Prints ou Vídeos do site funcionando.
- Lista detalhada de tecnologias.
- Guia: "Como rodar o Projeto".
4. Onde ir agora? 📚
- TypeScript: Segurança de tipos.
- Bancos SQL: Postgres e MySQL.
- Next.js: O rei do mercado React.
- Docker: Infraestrutura moderna.
5. Soft Skills 🤝
- Não é só saber programar!
- Trabalho em equipe.
- Resolução de problemas reais.
6. O Mercado Full-Stack 📈
- Demanda altíssima por devs completos.
- Salários excelentes.
- Dashboards e Sistemas Web movem o mundo!
7. Mensagem Final 🌟
"Programar é a arte de criar soluções onde antes só havia problemas."
- Você construiu a base sólida.
- O código é sua ferramenta de transformação.
Parabéns pela Jornada! 🎓🚀
Vá e construa o futuro da Web.
Dúvidas Finais? 🤔
Sobre
Sobre o Curso
🎓 APIs e Microsserviços Profissionais
Este curso foi projetado para capacitar desenvolvedores na criação de arquiteturas distribuídas modernas, focando na integração entre backends escaláveis e frontends dinâmicos do tipo SPA.
🎯 Objetivos do Curso
-
Arquitetura Distribuída --- Compreender a transição de monólitos para microsserviços e a importância da comunicação eficiente entre serviços.
-
Domínio de APIs REST --- Dominar a modelagem, implementação e documentação de APIs seguindo as melhores práticas do mercado.
-
Segurança Avançada --- Implementar sistemas de autenticação e autorização robustos utilizando JWT e controle de acesso baseado em perfis.
-
Frontend Moderno (SPA) --- Desenvolver interfaces ricas e reativas, conectando-as perfeitamente ao ecossistema de APIs backend.
📚 O Que Você Vai Aprender
Módulo 1 – Serviços e Microsserviços
- Conceitos de Microsserviços vs Monólitos
- Arquitetura e API Gateways
- Modelagem de APIs RESTful
- Documentação com Swagger e Mocks
Módulo 2 – Manipulação de Dados
- Implementação de Endpoints (Backend)
- Persistência com ORM e SQL
- Testes Unitários com Mocks
- Testes Integrados e Deploy
Módulo 3 – Autenticação e Segurança
- Estratégias Web (Cookies vs Tokens)
- Implementação de JWT
- Criptografia e Proteção de Rotas
- Autorização RBAC (Perfis)
Módulo 4 – Aplicações Web SPA
- Conceitos de SPA e Renderização
- Componentização e Templates
- Gerenciamento de Estados e Eventos
- Roteamento e Projeto Integrador
🛠️ Metodologia
Foco 100% prático e orientado a projetos. Cada módulo culmina em uma etapa funcional de um sistema completo, garantindo que ao final do curso você tenha um portfólio robusto de arquitetura fullstack.
Pronto para dominar o Backend? Começar Agora
Roadmap do Projeto: APIs e Microsserviços 🚀
Este documento rastreia a evolução do curso.
✅ Fase 1: Planejamento (Concluído)
- [x] Definição Syllabus (16 Aulas)
- [x] Estrutura Backend-first com integração SPA
- [x] Configuração MkDocs Material
✅ Fase 2: Conteúdo Base (Concluído)
- [x] Criação das 16 Aulas (Markdown)
- [x] Criação dos 16 Quizzes (HTML)
- [x] Criação dos 16 Conjuntos de Exercícios
- [x] Criação dos 16 Slides (RevealJS)
✅ Fase 3: Projetos e UX (Concluído)
- [x] Definição dos 16 Projetos práticos
- [x] Documentação Swagger/OpenAPI integrada
- [x] Diagramação Mermaid de arquitetura de serviços
🚀 Fase 4: Lançamento e Manutenção
- [x] Deploy GitHub Pages (GitHub Actions)
- [ ] Atualização para novas versões de frameworks (Spring/Node/React)
- [ ] Inclusão de exemplos de mensageria (RabbitMQ/Kafka)
Status Atual: Finalizado / Manutenção Última Atualização: 19/02/2026
Materiais Complementares 📚
Bem-vindo à seção de materiais complementares do curso de DevOps e Cloud. Aqui você encontra recursos adicionais para apoiar seus estudos e aprofundar seu conhecimento técnico.
-
- Acompanhe o conteúdo teórico com slides dinâmicos.
-
- Pratique a implementação de microsserviços e rotas REST.
-
- Valide seu aprendizado com testes rápidos por módulo.
-
- Construa um ecossistema completo para seu portfólio.
-
- Guias de instalação (Docker, IDEs, Postman).
Versão para Impressão
Esta página foi gerada automaticamente para impressão.