Mateus Müller

O carinha do Linux

Ementa do Comunidade DevOps

Introdução

→ Comece por aqui!

Módulo 1 - Introdução


  • Introdução à plataforma
  • Acesso ao grupo privado
  • Como usar o canal no Discord?
  • Gerenciamento do seu plano
  • Ordem recomendada dos cursos

Base

→ Introdução ao DevOps

Módulo 1 - Introdução ao DevOps


  • Introdução
  • O problema de não utilizar DevOps!
  • O que é DevOps?
  • Como são organizados os times de DevOps (Squads/Plataforma)?
  • Pilares do DevOps...
  • Source Control Management (SCM)
  • Configuration Management
  • Infrastructure as Code (IaC)
  • Observability
  • Continuous Integration (CI)
  • Continuous Deployment & Continuous Delivery (CD)
  • Lead Time?
  • ChatOps!
  • Scrum: Desenvolvimento ágil
  • Blameless Post-mortem
  • On-call rotation :'(
  • Chaos Engineering: Derrubando a produção
  • DevSecOps... Qual a diferença?

Módulo 2 - Mentoria & Respondendo dúvidas


  • Especialista ou Generalista na área de DevOps?
  • Como começar uma mudança DevOps?
  • O que um DevOps faz no dia a dia?
  • Qual certificação fazer para DevOps?
  • Qual o escopo do Júnior, Pleno e Sênior?
  • Conselho: Encontra a ferramenta certa para o problema
→ Formação Linux

Módulo 1 - Introdução


  • Introdução ao curso!

Módulo 2 - Linux e distribuições


  • O que são distribuições? Quais são as principais do mercado?

Módulo 3 - Instalação do Linux


  • Instalação do CentOS 7 usando VirtualBox
  • Configurar placa de rede
  • Instalação do CentOS 7 usando o Vagrant
  • Tarefa

Módulo 4 - Estrutura de diretórios do Linux (FHS)


  • Introdução ao File System Hierarchy
  • FHS na prática!

Módulo 5 - Processo de boot


  • Processo de Boot do Linux - O que acontece por trás dos panos?
  • Configuração do Grub2

Módulo 6 - systemd


  • systemd vs SysV & target vs runlevel
  • systemd vs SysV & target vs runlevel - Prática
  • systemctl
  • Tarefa

Módulo 7 - Partições e sistema de arquivos


  • Criação de partições
  • Criação de partições - Prático
  • Formatar partições
  • Montar partições automaticamente ao longo do boot
  • Recuperar sistemas de arquivos com fsck
  • Tarefa

Módulo 8 - LVM


  • Criar partições com LVM
  • Criar partições com LVM - Prático
  • Tarefa

Módulo 9 - Gerenciamento de pacotes


  • Introdução ao gerenciamento de pacotes
  • RPM
  • Yum
  • Tarefa

Módulo 10 - Bash


  • Arquivos de inicialização do Bash
  • Tarefa
  • Aspas simples e aspas duplas
  • Tarefa
  • Gerenciar arquivos e diretórios (cp & touch)
  • Gerenciar arquivos e diretórios (mv & mkdir)
  • Processamento de texto - parte 1
  • Processamento de texto - parte 2
  • Processamento de texto - parte 3
  • Processamento de texto - parte 4
  • Processamento de texto - parte 5
  • Tarefa
  • Expressões Regulares e file globbing
  • Expressões Regulares e file globbing - parte 2
  • Expressões Regulares e file globbing - parte 3
  • Tarefa
  • Redirecionamento de comandos
  • Tarefa

Módulo 11 - Documentações


  • Comando man

Módulo 12 - Compactação e compressão


  • Compactação e compressão
  • Comandos tar, gzip, bzip2, xz

Módulo 13 - Gerenciamento de processos


  • Teoria sobre processos
  • Obter informações de processos - parte 1
  • Obter informações de processos - parte 2
  • Obter informações de processos - parte 3
  • Finalizar processos
  • Tarefa

Módulo 14 - Hardware e módulos


  • Obter informações sobre hardware PCI
  • Obter informações sobre hardware USB
  • Gerenciar módulos (drivers)
  • Gerenciar módulos (drivers) - Prático

Módulo 15 - Vim


  • Editor de texto VIM
  • Tarefa

Módulo 16 - Gerenciamento de permissões


  • Gerenciar permissões normais - parte 1
  • Gerenciar permissões normais - parte 2
  • Gerenciar permissões normais - parte 3
  • Gerenciar permissões especiais - parte 1
  • Gerenciar permissões especiais - parte 2
  • Umask - parte 1
  • Umask - parte 2
  • Tarefa

Módulo 17 - Link simbólico e Link físico


  • Link físico e link simbólico (hardlink e softlink)
  • Link físico e link simbólico (hardlink e softlink) - parte 2
  • Tarefa

Módulo 18 - Encontrar arquivos e diretórios


  • Utilitários para encontrar arquivos e diretórios
  • Utilitários para encontrar arquivos e diretórios - parte 2
  • Utilitários para encontrar arquivos e diretórios - parte 3
  • Tarefa

Módulo 19 - Introdução ao Shell Script


  • Introdução ao Shell Script
  • Condicionais
  • Loops
  • Tarefa

Módulo 20 - Agendamento de tarefas com Cron


  • Agendar tarefas com Cron - parte 1
  • Agendar tarefas com Cron - parte 2
  • Tarefa

Módulo 21 - Gerenciamento de usuários


  • Gerenciar usuários
  • Gerenciar usuários - Parte 2
  • Gerenciar usuários (sudo)
  • Gerenciar grupos e senhas
  • Tarefa

Módulo 22 - Redes


  • Fundamentos de redes
  • Arquivos importantes
  • Configuração de IP, máscara e rota - Não persistente
  • Configuração de IP, máscara e rota
  • Ferramentas de redes - parte 1 (nc)
  • Ferramentas de redes - parte 2 (ss)
  • Ferramentas de redes - parte 3 (nmtui)
  • Ferramentas de redes - parte 4 (outros)
  • Tarefa

Módulo 23 - SSH


  • Configurar OpenSSH
  • Configurar OpenSSH - parte 2
  • Configurar autenticação com chaves assimétricas
  • Configurar autenticação com chaves assimétricas - parte 2
  • Tarefa

Módulo 24 - NTP


  • Configurar chronyd
  • Configurar chronyd - parte 2

Módulo 25 - RAID


  • Introdução ao RAID
  • Níveis de RAID
  • RAID prático com mdadm
  • RAID prático com mdadm - parte 2

Módulo 26 - DNS


  • Introdução ao DNS
  • Atributos DNS e Zonas
  • Configurar DNS Cache
  • Configurar DNS Autoritativo e integrar com DNS Cache
  • Configurar DNS Autoritativo e integrar com DNS Cache - parte 2
  • Configurar DNS Slave

Módulo 27 - FTP


  • Introdução ao FTP
  • FTP Ativo vs FTP Passivo
  • FTP anônimo
  • Restringir usuários FTP

Módulo 28 - NFSv4


  • Configurar NFS
  • Configurar NFS - parte 2

Módulo 29 - HTTP (Servidor Web)


  • Introdução ao HTTP
  • Configurar Servidor Web Apache
  • Configurar Virtual Host no Apache
  • Configurar Proxy Reverso com NGINX
  • Integrando Proxy Reverso + Virtual Host + DNS

Módulo 30 - Squid


  • Introdução ao SQUID
  • Configurar SQUID como servidor de cache
  • Configurar SQUID como servidor de cache (client)
  • Restringir acesso ao SQUID (ACL)

Módulo 31 - DHCP


  • Introdução ao DHCP
  • Configurar DHCPD
  • Configurar cliente DHCP

Módulo 32 - Rsyslog


  • Introdução ao Rsyslog
  • Configurar Rsyslog

Módulo 33 - Rsync


  • Introdução ao Rsync
  • Configurar Rsync com SSH
  • Criando script de back-up com Rsync
  • Agendar back-up do Rsync no Cron

Módulo 34 - SMTP


  • Introdução ao SMTP
  • Configurar Postfix
  • Configurar Postfix como RelayServer para Gmail

Módulo 35 - IMAP


  • Introdução ao IMAP
  • Configurar o Dovecot
  • Integrando Dovecot + Postfix + Bind (MX) + Thunderbird

Módulo 36 - Firewall


  • Introdução a Firewall
  • Configurar Firewalld
  • Configurar Firewalld - parte 2

Módulo 37 - LDAP


  • Introdução ao LDAP e ACLs
  • Introdução ao LDAP e ACLs - parte 2
  • Schemas e ACLs
  • Schemas e ACLs - parte 2
  • Configuração de Log
  • Autenticação no LDAP
  • Apache Directory Studio
  • Squid e Postfix com LDAP
  • Squid e Postfix com LDAP - parte 2

Módulo 38 - SAMBA


  • Introdução ao SAMBA & ID mapping
  • Introdução ao SAMBA & ID mapping - parte 2
  • Arquitetando uma Infraestrutura
  • Instalação do SAMBA AD no CentOS 7
  • Configurando clientes para autenticar no AD
  • Configurando clientes para autenticar no AD (cliente)
  • RSAT
  • Configurando servidor de arquivos SAMBA
  • BÔNUS: Vagrantfiles para DHCP & NTP
→ Shell Script para DevOps

Módulo 1 - Introdução


  • Introdução ao Treinamento

Módulo 2 - Base de Bash


  • Introdução ao Bash
  • Primeiro Script
  • O que acontece quando você executa um Script?
  • Dígitos especiais
  • Exit Code
  • Exit Code: Prático
  • Operadores AND e OR
  • File Descriptor
  • Redirecionamento de comandos
  • Explorando um File Descriptor
  • Pipe!
  • Pipe na prática
  • Como evitar o uso do pipe

Módulo 3 - Estruturas de Shell


  • Variáveis
  • Variáveis reservadas
  • Condicionais
  • For
  • While
  • Functions
  • Tarefa

Módulo 4 - Funções Nativas


  • Builtin vs External
  • Comparando desempenho: Builtin vs External
  • Trap
  • Expansões: Tilde e brace
  • Expansões: Parameter expansion
  • Expansões: String slice
  • Expansões: Arrays
  • Expansões: Variable indirection
  • Expansões: String cut
  • Expansões: Susbtitution
  • Expansões: Lower and uppercase
  • Expansões: Command substitution
  • Expansões: Process substitution
  • Expansões: Arithmetic
  • Expansões: Word splitting
  • Expansões: Pattern matching
  • Paralelizando processos

Módulo 5 - Redirecionamento


  • Here document
  • Here string

Módulo 6 - Complementos


  • Debugando
  • Regex
  • Boas práticas

Módulo 7 - Projeto prático: Construindo uma CLI


  • Iniciando o projeto
  • Testes e dependências
  • Subindo Fedora para testar
  • Instalar kind
  • Instalar kubectl
  • Instalar Docker
  • Importando código com source
  • Criando cluster
  • Alguns ajustes...
  • Lendo parâmetros
  • Deploy Ingress
  • Deploy MetalLB
  • Menu de help
  • ERRO
  • Adicionando uma trap
  • Cleanup e teste final
  • Cabeçalho
  • Encerramento
→ Fundamentos de Redes para DevOps

Módulo 1 - Camada de Aplicação (L7)


  • Introdução ao Treinamento!
  • Como instalar o Linux?
  • Introdução ao TCP/IP
  • A vida de um pacote...
  • HTTP Message (Request vs Response)
  • Developer Mozilla - A bíblia do HTTP
  • HTTP Persistent vs Non-persistent
  • Como instalar o wireshark?
  • O que é e para que serve um arquivo HAR?
  • Cookies!
  • O que é e para que serve um Proxy?
  • O que é e para que serve uma API?
  • Compreendendo como consumir uma API
  • Um projeto de API que desenvolvi...
  • Ferramenta curl pt. 1
  • Ferramenta curl pt. 2 - Interagindo com API usando curl
  • Para que serve o DNS?
  • A estrutura gigantesca do DNS
  • Como funciona uma busca DNS?
  • DNS records
  • Ferramenta de troubleshooting DNS: dig
  • Como funciona o TLS handshake?
  • Explorando TLS no Wireshark
  • SSL Labs
  • Resolvendo problemas no TLS handshake

Módulo 2 - Camada de Transporte (L4)


  • Qual a diferença entre Camada 4 e Camada 3?
  • 3-Way TCP handshake
  • MTU vs MSS
  • TCP header
  • UDP header
  • Ferramenta para troubleshooting: ss
  • Ferramenta de troubleshooting: nc
  • Comunicação socket TCP usando Python | pt. 1
  • Comunicação socket TCP usando Python | pt. 2
  • Olhando a comunicação no Wireshark!

Módulo 3 - Camade de Rede (L3)


  • Introdução ao IP
  • Subnets
  • Dividindo subnets
  • Roteamento
  • NAT: Network Address Translation
  • Ferramenta de troubleshooting: tcpdump
  • Ferramenta de troubleshooting: MTR
  • Ferramenta de troubleshooting: traceroute
  • O que é um Firewall?
  • Introdução ao Iptables
  • ARP
  • ARP: Prática!
  • O que é uma Bridge?
  • Bridge: Prática | pt. 1
  • Bridge: Prática | pt. 2

Especialidades

→ Terraform para AWS

Módulo 1 - Introdução


  • Introdução ao Treinamento
  • Criação da conta na AWS
  • Configuração da awscli

Módulo 2 - AWS mão na massa!


  • Arquitetura do Projeto
  • VPC
  • Subnets (privada e pública)
  • Tags nas Subnets para AWS Load Balancer Controller
  • Internet Gateway e Route Table
  • Auto Assign Public IP
  • Bastion Host para confirmar ;)
  • NAT Gateway e Route Table
  • Cluster IAM role
  • Criação do cluster EKS
  • Node IAM role
  • Managed Node Group
  • OIDC provider
  • Deploy AWS Load Balancer Controller
  • Clean up: Limpando tudo!

Módulo 3 - Introdução ao Terraform e início do projeto


  • Arquitetura do Terraform
  • Instalação do Terraform
  • Terraform Workflow
  • Setup do repositório no GitHub
  • Providers
  • Primeiro recurso: VPC
  • Terraform State
  • Migrando o backend do tfstate
  • $ terraform fmt
  • Pre-commit hooks para Terraform
  • $ terraform validate
  • $ terraform console
  • $ terraform destroy
  • Subnets
  • Variables
  • terraform.tfvars (valores para variáveis)
  • Region dinâmica e tags para ALB
  • Desacoplando tags usando locals
  • Private Subnets
  • Variable "project_name"
  • Internet Gateway e Route Table
  • NAT Gateway & EIP
  • Private Route Tables

Módulo 4 - Introdução ao Terraform Modules


  • Introdução ao Terraform Modules
  • E nasce o módulo de Networking!
  • Output do módulo

Módulo 5 - Módulo do Cluster


  • EKS Cluster IAM role
  • Criação do cluster EKS
  • Alterando regra de HTTPS para API server
  • Entendendo o Fingerprint do OIDC
  • Criação do OIDC provider

Módulo 6 - Módulo do Managed Node Group


  • Configuração do kubeconfig para kubectl
  • IAM role do MNG
  • Managed Node Group

Módulo 7 - Módulo do AWS Load Balancer Controller


  • IAM policy do Controller
  • Commitando arquivos :)
  • IAM role do Controller | pt. 1
  • IAM role do Controller | pt. 2
  • Provider do Kubernetes
  • Deploy da ServiceAccount
  • Deploy do Helm Chart

Módulo 8 - Finalização do super-módulo!


  • Instalação do terraform-docs
  • Gerando a documentação do módulo e sub-módulos
  • Pre-commit com terraform-docs
  • Modularizando o super-módulo
  • Utilizando o módulo (teste final)!
→ Kubernetes: Do Básico ao Avançado

Módulo 1 - Criação do Cluster


  • Introdução e Requisitos
  • Como funciona e por que utilizar o Kubernetes?
  • Arquitetura do Kubernetes: Control Plane
  • Arquitetura do Kubernetes: Data Plane
  • kind: Criação de um cluster de testes local
  • kubeadm: Configuração das VMs para criação do cluster no Vagrant
  • kubeadm: Instalação de todos os requisitos nas VMs
  • kubeadm: Criação do cluster Kubernetes (finalmente)
  • kubespray: Planejando um cluster de Alta Disponibilidade
  • kubespray: Criação das VMs no Proxmox com Terraform
  • kubespray: Criação automatizada de um cluster Production-Ready
  • Introdução ao kubectl
  • DICA: alias dos kuberneteiros
  • Como fazer merge de dois kubeconfigs?
  • Debugando a comunicação entre o kubectl e API server
  • Obtendo mais informações do cluster (explorando o get)
  • etcd: Configurando o etcdctl
  • etcd: Back-up e snapshot do etcd

Módulo 2 - YAML


  • O que é YAML?
  • Usando arquivos YAML com Kubernetes
  • Obtendo YAML de objetos (+bônus krew)

Módulo 3 - Namespaces


  • O que é e para que serve uma namespace?
  • Usando namespaces na prática

Módulo 4 - Pods


  • O que é um pod?
  • troubleshooting: Não consigo ler os logs nem dar exec no pod!
  • troubleshooting: Pod só se comunica com pod do mesmo host!
  • Trabalhando com pods (+super dica alterando o command do pod)
  • Init containers
  • Multi-container pods
  • troubleshooting: Acessando um container de um pod sem o "kubectl exec"
  • Static pods
  • lifecycle: Como um pod é terminado?

Módulo 5 - Deployments


  • Introdução aos deployments
  • Criando um deployment
  • Deployment -> ReplicaSet -> Pod
  • Labels e selectors
  • kubectl explain: Obtendo documentação
  • Gerenciando rollouts
  • maxSurge e maxUnavailable: Otimizando deployment
  • Escalando um deployment
  • Resources: Como delimitar recursos computacionais?
  • request & limits na prática
  • goldilocks: Como descobrir o request/limits ideal para a aplicação
  • troubleshooting: Como analisar OOM (Out Of Memory) no cluster Kubernetes?
  • Introdução aos probes (healthchecks) do Kubernetes
  • Readiness vs Liveness: Qual a diferença?
  • Readiness probes na prática
  • Liveness probes na prática
  • Variáveis ambientes

Módulo 6 - DaemonSets


  • Introdução aos DaemonSets
  • DaemonSets na prática

Módulo 7 - StatefulSets


  • Stateful vs Stateless: Qual a diferença?
  • Introdução aos StatefulSets
  • Deploy do local-path-provisioner
  • StatefulSets na prática
  • Pod Disruption Budget (pdb) - Garantindo a disponibilidade da aplicação

Módulo 8 - Jobs e CronJobs


  • Introdução aos "Batch Jobs"
  • Jobs na prática
  • CronJobs na prática

Módulo 9 - Services


  • O que são e para que serem os Services?
  • Tipos de Services (ClusterIP, NodePort, LoadBalancer, ExternalName)
  • ClusterIP na prática
  • $ kubectl expose
  • Service Discovery (DNS no Kubernetes)
  • Como uma requisição chega no Pod?
  • kube-proxy: IPVS mode
  • Alterar o modo de operação do kube-proxy
  • kube-proxy: Iptables mode
  • NodePort
  • Como um LoadBalancer é criado?
  • LoadBalancer
  • Deploy do MetalLB
  • Headless service
  • ExternalName
  • Debugando LoadBalancer no Iptables
  • TrafficPolicies! Diminuindo latência
  • Canary Deployment "raíz"
  • Blue-green deployment "raíz"

Módulo 10 - Ingress


  • Como funciona a comunicação utilizando Ingress?
  • Deploy do NGINX Ingress Controller
  • Primeiro Ingress resource
  • IngressClasses! (Múltiplos controllers)
  • Path rewriting com NGINX
  • Múltiplos services no mesmo Ingress
  • ERRO 503
  • TLS: Configuração da HTTPS

Módulo 11 - ConfigMap & Secrets


  • Introdução a ConfigMaps e Secrets
  • ConfigMaps na prática
  • Diretiva de Subpath
  • Configuração de VirtualHost do NGINX via ConfigMap
  • Secret Types
  • Explorando um pouco mais os Secrets

Módulo 12 - Storage


  • Introdução a Storage no Kubernetes
  • Static Volumes
  • Dynamic Volume
  • Access Modes
  • Reclaim Policy
  • Projected Volumes

Módulo 13 - Autoscaling


  • Introdução a Autoscaling
  • Escala Horizontal vs Escala Vertical
  • Teoria: HPA, kube-controller e metrics APIs
  • HPA na prática
  • Simulando scaling e entendendo o algoritmo
  • Stabilization Window
  • Introdução e Deploy do VPA
  • Simulando scaling do VPA

Módulo 14 - Networking


  • Introdução a CNI (Container Networking Interface)
  • Como funciona a intercomunicação pela CNI? | Flannel
  • Query DNS dentro do cluster | CoreDNS
  • Logs de debug CoreDNS
  • ndots e seu impacto no DNS
  • DNS externo pelo CoreDNS
  • Network Policies
→ Docker: Do Básico ao Avançado

Módulo 1 - Introdução ao Docker


  • Introdução ao treinamento
  • Qual a diferença entre Container e VM?
  • Por que utilizar containers?
  • Open Container Initiative
  • Como Docker é utilizado nas empresas?
  • Linux primitives: chroot
  • Linux primitives: namespaces
  • Linux primitives: cgroups
  • Arquitetura do Docker
  • Docker Engine

Módulo 2 - Primeiros passos


  • Instalação do Docker
  • Imagem vs container
  • Docker Hub

Módulo 3 - Imagens, containers e OverlayFS


  • Comandos: Imagens
  • Comandos: containers
  • Comandos: containers pt. 2
  • Comandos: containers pt. 3
  • Como funciona o OverlayFS?
  • Explorando o OverlayFS na prática
  • Como deve funcionar logs em containers

Módulo 4 - Networking


  • Tipos de redes
  • Bridge
  • Opções para network
  • EXTRA: Introdução ao macvlan
  • EXTRA: Configuração do GNS3
  • EXTRA: Criação do Docker Host e importar no GNS3
  • EXTRA: macvlan na prática com Open vSwitch a VLAN tags

Módulo 5 - Storage


  • Tipos de volumes
  • Gerenciando um volume
  • Volume binding
  • Volume local

Módulo 6 - Build de imagens


  • Como uma imagem é criada?
  • Cache: Como funciona?
  • Primeiro Dockerfile: nodejs
  • Injetando variável ambiente
  • Build arguments
  • Non-privileged users dentro do Dockerfile
  • Mais um motivo pelo qual a ordem importa!
  • Volume
  • Entrypoint
  • Health checks: nodejs
  • Health checks: python (flask)
  • .dockerignore
  • Boas práticas

Módulo 7 - Multistaging e distribuição de imagens


  • Explorando docker build
  • Como funciona multi-staging?
  • Dockerfile: Golang
  • Aplicando multi-staging
  • Por que usar tags?
  • Taggeando!
  • Pushando imagens para o Docker Hub
  • Investigando uma imagem
  • Exportando e importando uma imagem (como .tar)

Módulo 8 - Restart policies e events (+projeto)


  • Restart policies
  • Docker Events
  • Projeto 1: API do Docker
  • Projeto 1: Criando o script
  • Projeto 1: Criando o script pt. 2
  • Projeto 1: Ajustando a data
  • Projeto 1: Integrando com Discord
  • Containers parados

Módulo 9 - Docker Compose


  • Para que serve o Docker Compose?
  • Instalando Docker Compose
  • Docker Compose: Prática
  • Docker Compose: rodando nossa app nodejs
  • Multi-container
  • Aplicação real no compose: Ghost

Módulo 10 - Docker Swarm


  • O que é Orquestração de Containers?
  • Introdução ao Docker Swarm
  • Criando o primeiro cluster
  • DOCKER_HOST
  • Gerenciando nodes
  • Primeiro service
  • O que é Routing Mesh?
  • Projeto 2: HAProxy com backend em dnsrr (service discovery)
  • Projeto 2: vip vs dnsrr
  • Projeto 2: Aplicando os conceitos
  • Projeto 3: DNS Bind9 com Routing Mesh
  • Projeto 3: Configurando o Bind9
  • Projeto 3: Integrando Bind com o Routing Mesh
  • Overlay Network: Encriptando o tráfego
  • docker plugins
  • Introdução a Stacks
  • Projeto 4: Wordpress em HA com NFS
  • Projeto 4: Configurando NFS
  • Projeto 4: Wordpress em HA com NFS (prática)
  • Configurando o deployment

Módulo 11 - Segurança


  • Capabilities
  • seccomp
  • Docker Content Trust pt. 1
  • Docker Content Trust pt. 2
  • Docker Content Trust pt. 3
  • Docker Content Trust pt. 4
  • Docker Secrets
  • Docker Context (SSH)
  • Docker Context (TLS) pt. 1
  • Docker Context (TLS) pt. 2

Projetos

→ REST API com Flask: Do código ao deploy!

Módulo 1 - (Projeto 1 - PaaS) - Setup do ambiente


  • Introdução ao Projeto
  • Proposta do Projeto
  • Repositório no GitHub e chaves SSH
  • Setup do ambiente de desenvolvimento (venv e pip)
  • Primeira execução do Flask
  • Extensão Flask-RESTful
  • Commitando e flake8!

Módulo 2 - (Projeto 1 - PaaS) - Docker


  • Dockerfile
  • docker-compose
  • Configuração do MongoEngine
  • Recapitulando...
  • Cuidado com a ordem...
  • Makefile
  • Insomnia

Módulo 3 - (Projeto 1 - PaaS) - Flask / Codando


  • Primeiro insert com reqparse
  • Validando o CPF
  • O famoso try catch
  • Obtendo usuários
  • Tratando UserNotFound
  • Application Factory
  • Desacoplando a aplicação pt. 1
  • Desacoplando a aplicação pt. 2
  • Ajustando nossos arquivos Docker
  • Últimas mudanças

Módulo 4 - (Projeto 1 - PaaS) - Flask / Testes unitários


  • Iniciando com testes
  • pytest fixtures!
  • O primeiro teste a gente nunca esquece!
  • Testando o POST
  • Último teste

Módulo 5 - (Projeto 1 - PaaS) - Heroku, MongoDB Atlas & GitHub Actions


  • MongoDB Atlas
  • Configurações do Heroku
  • Deploy no Heroku
  • Configurando o Insomnia para Produção
  • A primeira pipeline no GitHub Actions
  • Configurando secrets da pipeline
  • Finalizando!

Módulo 6 - (Projeto 2 - k8s) - Flask / Codando


  • Introdução ao módulo
  • Proposta do Projeto ²
  • Uso de Branches e melhorias no Dockerfile
  • Rota de patch de usuários
  • Testes da rota de patch
  • Rota de delete de usuários

Módulo 7 - (Projeto 2 - k8s) - Health Checks / Probes


  • HealthChecks / Probes no código
  • Ajuste no HealthCheck para testar comunicação com o banco

Módulo 8 - (Projeto 2 - k8s) - Scans de Qualidade


  • Black! Qualidade de código
  • Bandit! Segurança de código
  • Resolvendo o problema de segurança

Módulo 9 - (Projeto 2 - k8s) - Kubernetes (desenvolvimento)


  • Criando cluster Kubernetes com Kind
  • Makefile: Automatizando criação do cluster local
  • Encontrando o Helm Chart do MongoDB
  • Deploy do Helm Chart do MongoDB
  • Adicionando o MongoDB no Makefile
  • Manifesto de Deploy
  • Alterando a imagePullPolicy
  • Probes e Secret para credenciais
  • Injetando as variáveis ambiente
  • Expondo a aplicação com Service e Ingress
  • Automação do setup completo de desenvolvimento

Módulo 10 - (Projeto 2 - k8s) - Helm (produção)


  • Ajustando os outputs do Terraform
  • Criação do cluster EKS
  • Criação do ECR
  • WARNING: Não esqueça de destruir a infra!
  • Introdução ao Helm
  • Parametrizando o Deployment
  • Parametrizando o Deployment pt. 2
  • Parametrizando Ingress e Service
  • Como gerenciar Secrets no Kubernetes?
  • Instalação do Sealed Secrets e Kubeseal
  • Sealed Secrets no Terraform
  • Encriptando o Secret

Módulo 11 - (Projeto 2 - k8s) - Terraform


  • Arquitetura do Projeto na AWS
  • Portando Sealed Secrets e ECR para o módulo
  • Criação da Keypair
  • Security Group do Bastion
  • Bastion Host
  • Security Group do MongoDB
  • Security Group do MongoDB pt. 2
  • MongoDB Host

Módulo 12 - (Projeto 2 - k8s) - Ansible


  • Provisionando instância de testes com Vagrant
  • Overview Ansible Galaxy
  • Ansible Role: mongodb_linux
  • Ansible Role: mongodb_repository
  • Ansible Role: mongodb_install
  • Ansible Role: mongodb_mongod
  • Ansible Role: mongodb_auth
  • Validando a conexão com banco usando Docker Compose
  • Aplicando playbook via Bastion na AWS

Módulo 13 - (Projeto 2 - k8s) - DNS (Route 53 & External DNS)


  • Atualizando Secrets e subindo a app via Helm!
  • Configurando Ingress (AWS Load Balancer Controller)
  • Testando o funcionamento com curl
  • Deploy do External DNS
  • Registrando domínio automaticamente no Route 53
  • Adicionado TLS no Ingress (ALB)
  • ATENÇÃO! Clean up :)

Módulo 14 - (Projeto 2 - k8s) - GitHub Actions (CI/CD)


  • Introdução ao Open ID
  • IDP do GitHub Actions
  • IAM role do OIDC
  • Autenticação do ECR
  • Reescrevendo step de Build
  • Obtendo o kubeconfig
  • RBAC do Kubernetes | aws-auth
  • Outputs do GitHub Actions
  • Deploy com Helm na pipeline
  • Encerramento

Bônus

→ Mini-cursos

Curso 1 - Cobbler: Servidor PXE no Linux


  • Dependências
  • Arquitetura do Cobbler
  • Criação da VM
  • Instalação do Cobbler
  • Ajustando as diretivas de server e next_server
  • Configuração do Cliente
  • Configuração do DHCP
  • Troubleshooting do TFTP (Connection Timeout)
  • Gerando bootloaders para o TFTP
  • Outros checks do Cobbler
  • Troubleshooting... Não funciona em UEFI!
  • Configuração da Interface gráfica
  • Configuração de usuários da Interface gráfica
  • Overview da Interface gráfica
  • Importando a ISO do Oracle Linux
  • Importando a ISO do Fedora Server
  • Modificando o Kickstart template para inserir chaves SSH
  • Automatizando o deploy do Cobbler com Vagrant + Ansible
  • Sugestões de Estudos!
→ Encontros ao Vivo

Módulo 1


  • Encontro #1 - Imagem Docker do NGINX com Virtual Host
→ Softskill: Habilidades não-técnicas essenciais!

Módulo 1 - LinkedIn


  • Introdução ao LinkedIn
  • Perfil: Headline
  • Perfil: Destaques
  • Perfil: Sobre
  • Perfil: Experiências
  • Perfil: Experiências pt. 2
  • Perfil: Formação, certificados, certificações...
  • Perfil: Competências
  • Perfil: Recomendações
  • Perfil: Projetos
  • Perfil: Reconhecimentos
  • Perfil: Recapitulando tudo
  • Como crescer o meu perfil?
  • Como gerar conteúdo?
  • Como encontrar vagas?
  • Como fazer networking?