<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rodrigo Ferraz</title>
    <description>The latest articles on DEV Community by Rodrigo Ferraz (@rodrigoscferraz).</description>
    <link>https://dev.to/rodrigoscferraz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F614406%2Fc6796180-39e5-4ad0-8954-22df869003a7.jpeg</url>
      <title>DEV Community: Rodrigo Ferraz</title>
      <link>https://dev.to/rodrigoscferraz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rodrigoscferraz"/>
    <language>en</language>
    <item>
      <title>GitOps com Flux v2 - Parte 1 - O que é GitOps e quem é Flux?</title>
      <dc:creator>Rodrigo Ferraz</dc:creator>
      <pubDate>Sat, 01 Jan 2022 12:01:39 +0000</pubDate>
      <link>https://dev.to/rodrigoscferraz/gitops-com-flux-v2-parte-1-o-que-e-gitops-e-quem-e-flux-4f76</link>
      <guid>https://dev.to/rodrigoscferraz/gitops-com-flux-v2-parte-1-o-que-e-gitops-e-quem-e-flux-4f76</guid>
      <description>&lt;h2&gt;
  
  
  O que é GitOps?
&lt;/h2&gt;

&lt;p&gt;GitOps é um termo que foi criado pela WeaveWorks em 2017 (sim, aquela do plugin de rede para Kubernetes o Weave Net) para descrever, nas palavras da própria WeaveWorks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Um modelo operacional para infraestrutura como código, que fornece um conjunto de práticas recomendadas que unificam a implantação, o gerenciamento e o monitoramento de aplicativos em contêineres.&lt;/p&gt;

&lt;p&gt;Um caminho para uma experiência de desenvolvimento para gerenciar aplicativos; onde pipelines CI/CD ponta a ponta e fluxos de trabalho Git são aplicados a operações e desenvolvimento.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Básicamente aqui a coisa toda significa que é uma forma de você usar Infraestrutura como código não só para a sua arquitetura mas também para o seu deployment.&lt;/p&gt;

&lt;p&gt;Isso trás muitas vantagens, como padronização, facilidade de replicação, compartilhamento, etc. Tudo isso ainda aplicado ao Git nos permite ter uma única fonte de verdade para todos os nossos códigos além da facilidade de acompanhar a evolução do repositório hostóricamente atráves de cada commit.&lt;/p&gt;

&lt;p&gt;Dito isso chegamos então ao cara que visa implementar essa idéia para facilitar nosso dia a dia.&lt;/p&gt;

&lt;p&gt;Se você entender um pouco de inglês pode conferir o artigo da própria WeaveWorks sobre GitOps na íntegra &lt;a href="https://www.gitops.tech/#what-is-gitops"&gt;aqui&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E &lt;a href="https://dev.to37074631-ffea-4d2a-bc31-7e8605bc9d5b"&gt;aqui&lt;/a&gt; temos as definições de GitOps.&lt;/p&gt;




&lt;h2&gt;
  
  
  Flux
&lt;/h2&gt;

&lt;p&gt;O Flux é uma ferramenta criada também pela WeaveWorks no intuito de fazer a idéia do GitOps ser implementada na comunidade, ela o descreve como:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Uma ferramenta para manter clusters Kubernetes sincronizados com a origem de suas configurações(como repositórios Git) e automatizar atualizações de configuração quando há um novo código para implantar.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ou seja, o Flux nos permite usar uma única fonte de verdade(o repositório Git) para nosso cluster kubernetes.&lt;/p&gt;

&lt;p&gt;De maneira simplória o Flux age como uma espécie de mediador entre nosso cluster Kubernetes e nosso repositório Git, ele olha para nosso repositório Git pega os manifestos do Kubernetes e verifica se estão aplicados em nosso cluster, caso não estejam, ele automaticamente aplica esses manifestos no cluster e caso hajam alterações pendentes ele também as aplica.&lt;/p&gt;

&lt;p&gt;Tudo isso agiliza muito o desenvolvimento pois tenho um "Cluster como código" pronto pra ser replicado pra um ambiente de staging, dev ou prod. Posso fazer o rollback do meu commit com um simples&lt;code&gt;git revert&lt;/code&gt; caso algo dê errado, num piscar de olhos, o código aplicado ao cluster sempre será o disponível no Git(esse é o comportamento padrão) assim não temos aquela história de "ahh eu já apliquei a alteração no cluster mas não subi pro Git ainda", entre outras coisas.&lt;/p&gt;

&lt;p&gt;Somado à tudo isso vem a facilidade de implementação que só precisa da instalação de um binário de linha de comando e pronto, você já pode começar a usar o Flux.&lt;/p&gt;

&lt;p&gt;Outra coisa super interssante é que o Flux é um projeto incubado pelo CNCF onde temos outros grandes nomes como o próprio Kubernetes, Helm, Prometheus, e por ai vai. Então pode ficar tranquilo que não é qualquer programa de fundo de boteco que você vai utilizar é uma ferramenta em constante desenvovimento, com uma grande empresa por trás, uma comunidade super ativa e um futuro bem promissor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OxZqca24--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c2eo8wb1ha12y5q2hteb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OxZqca24--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c2eo8wb1ha12y5q2hteb.png" alt="Flux CNCF" width="880" height="618"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentação do Flux: &lt;a href="https://fluxcd.io/docs/"&gt;https://fluxcd.io/docs/&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/fluxcd/flux2#flux-version-2"&gt;https://github.com/fluxcd/flux2#flux-version-2&lt;/a&gt;&lt;br&gt;
Apresentação detalhada(inglês): &lt;a href="https://www.youtube.com/watch?v=nGLpUCPX8JE"&gt;https://www.youtube.com/watch?v=nGLpUCPX8JE&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curtiu o Flux e a idéia de usar GitOps até nos seus projetos particulares?&lt;br&gt;
Então fica atento pras próximas postagens! Valeu!&lt;/p&gt;

</description>
      <category>gitops</category>
      <category>devops</category>
      <category>flux</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Branches e Repositórios Remotos- Parte 3</title>
      <dc:creator>Rodrigo Ferraz</dc:creator>
      <pubDate>Sun, 20 Jun 2021 11:41:34 +0000</pubDate>
      <link>https://dev.to/rodrigoscferraz/branches-e-repositorios-parte-3-2bp0</link>
      <guid>https://dev.to/rodrigoscferraz/branches-e-repositorios-parte-3-2bp0</guid>
      <description>&lt;p&gt;Finalmente chegou a hora de falarmos de Branches e Repositórios. Se você não acompanhou as outras postagens da série, é bom que as leia antes de começar essa aqui, por fim, vamos lá.&lt;/p&gt;

&lt;h2&gt;
  
  
  Branches
&lt;/h2&gt;

&lt;p&gt;Entenda branches como uma linha de desenvolvimento independente. Algo similar à você ter um modelo de Slide para apresentações, fazer uma cópia dele, e começar a fazer suas alterações nessa cópia. &lt;br&gt;
Ok...mas quais as vantagens disso? Muitas. Se por acaso as alterações que você fizer ficarem ruins, ou não estiverem do gosto que você esperava? Caso tenha feito a cópia pode excluir e começar daquele slide modelo novamente, caso contrário, lamento muito. Dito isso acho que ficou claro que as branches criam "cópias" de uma linha de desenvolvimento, para uma outra linha, onde você possa trabalhar em novas features, corrigir problemas, alterar algum campo, sem causar danos no código principal. Agora chega de lenga lenga e vamos è mão na massa. &lt;/p&gt;

&lt;p&gt;Primeiro de tudo, pra ficar mais visual essa história de branch, vou usar o site &lt;a href="https://learngitbranching.js.org/?locale=pt_BR" rel="noopener noreferrer"&gt;learn-git&lt;/a&gt; pra gente testar os comandos.&lt;/p&gt;

&lt;p&gt;Como crio a branch?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git branch branch-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lá no learn-git vai aparecer assim:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8npkek29n2bmy4pj8jq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8npkek29n2bmy4pj8jq.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repare no &lt;code&gt;*&lt;/code&gt; ao lado da branch &lt;code&gt;main&lt;/code&gt;(mais comumente chamada de "master"), isso quer dizer que aquela é sua &lt;code&gt;HEAD&lt;/code&gt;(guarde essa palavra na mente pois é ela que aparece no terminal) que nada mais é do que a branch na qual você esta fazendo suas alterações no momento. Vamos fazer um commit na branch main:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "commit branch main"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Se ainda ficou um pouco complexo entender as branches pense nelas também como "pastas" com cópias dos arquivos de uma pasta principal, na qual você vai adicionando novos arquivos e fazendo alterações, cada alteração salva é o equivalente à um commit. No momento, só criamos a branch, ou seja, uma "cópia" identica à da pasta principal, então do ponto de vista do Git, elas estão "no mesmo ponto", com os mesmos arquivos e conteúdos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E agora nossa imagem ficou assim:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flynsaa3r317acggqs70n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flynsaa3r317acggqs70n.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Visualmente fica claro que os commits estão sendo gerados na branch main, a cada commit uma snapshot é tirada e nossa branch avança. Agora vamos mudar pra &lt;code&gt;branch-1&lt;/code&gt; e fazer um commit nela, o comando pra mudar é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout branch-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o comando que fiz pra gerar o commit foi o:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "commit branch-1"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito isso nossas duas linhas de desenvolvimento agora ficam bem visuais.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n8d25ta21tmpss3qpa8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0n8d25ta21tmpss3qpa8.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ai você pode brincar e ir criando commits e branches e ver como funciona visualmente, esse site é ótimo pra entender esses conceitos.&lt;/p&gt;

&lt;p&gt;Um último comando que na verdade é um atalho para criar a branch e já utilizá-la é o:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout -b branch-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Repositórios
&lt;/h2&gt;

&lt;p&gt;Algumas das vantagens de usar o git como um repositório distribuído ao invés de um centralizado são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Segurança em caso de perda de dados. Já que geralmente os dados ficam em um servidor que não seja sua máquina os dados ficam menos suscetíveis a se perderem, ainda mais se estiverem em algum serviço de nuvem como Github, Gitlab, etc;&lt;/li&gt;
&lt;li&gt;É menos burocrático. Você pode criar branches, commits e merges sem acessar o repositório remoto;&lt;/li&gt;
&lt;li&gt;Permite à você colaborar com desenvolvedores remotos sem a necessidade de alterar o repositório principal(fazendo um fork, por exemplo).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bom, um repositório remoto é o que o próprio nome diz (dãaaaar rsrs), é uma cópia do seu código em outra máquina ou serviço. Nos casos mais comuns é no Github, então vamos enviar nosso repositório local para ele.&lt;/p&gt;

&lt;p&gt;Primeiro, obviamente faça uma conta no &lt;a href="https://github.com/signup" rel="noopener noreferrer"&gt;Github&lt;/a&gt;. Feito isso vamos já criar nosso primeiro repositório no Github clicando em "New", lá no canto esquerdo em verde.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkace9p7hehj412c66phl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkace9p7hehj412c66phl.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora temos alguns pontos para preencher:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp99txz16i7t4rh3i85tp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp99txz16i7t4rh3i85tp.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O nome do repositório;&lt;/li&gt;
&lt;li&gt;Uma descrição(opcional);&lt;/li&gt;
&lt;li&gt;Visibilidade - Pública ou Privada;&lt;/li&gt;
&lt;li&gt;Arquivos que você quer adicionar já na criação do seu repositório;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dê um nome ao seu repositório, deixe-o como Público e vamos adiante. Você já deve estar vendo uma tela igual à abaixo, com os comandos necessários para inserir esse repositório remoto na sua máquina.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5rfgz2x7rwz73xjos4q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5rfgz2x7rwz73xjos4q.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eu vou usar os 3 comandos da parte debaixo da imagem, respectivamente o que eles fazem é:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adicionar o repositório remoto do Github ao nosso git com o apelido de "origin";&lt;/li&gt;
&lt;li&gt;Renomear nossa branch &lt;code&gt;master&lt;/code&gt; para &lt;code&gt;main&lt;/code&gt;(pra isso serve o &lt;code&gt;-M&lt;/code&gt;);&lt;/li&gt;
&lt;li&gt;Enviar nossos arquivos do nosso repositório LOCAL e branch ATUAL(no caso a &lt;code&gt;main&lt;/code&gt;) para o repositório REMOTO(que apelidamos de &lt;code&gt;origin&lt;/code&gt;) na branch também de nome &lt;code&gt;main&lt;/code&gt; e "rastrear"(opção &lt;code&gt;-u&lt;/code&gt;) as mudanças que ocorrerem na branch remota.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa última linha é importante pois cria um relacionamento entre nossa branch &lt;code&gt;main&lt;/code&gt; local e a &lt;code&gt;main&lt;/code&gt; remota(Github), assim, nosso git conseguirá nos dizer caso exista alguma mudança lá que ainda não foi aplicada aqui. Veremos isso  em outro post.&lt;/p&gt;

&lt;p&gt;No nosso terminal(Git Bash, no meu caso), dentro da pasta do nosso projeto, vamos copiar e colar nossos comandos.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftm8s38x33wj275sm8old.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftm8s38x33wj275sm8old.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui pode ser que seja solicitado à você fazer login no Github.&lt;/p&gt;

&lt;p&gt;Por fim basta voltar na tela do nosso repositório no github e dar um F5 ou atualizar a página que nosso commit já vai aparcer lá!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmoqel3lwz7zcwcnzvl1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmoqel3lwz7zcwcnzvl1l.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fim de mais uma parte, logo mais vem as outras!&lt;/p&gt;

</description>
      <category>git</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Repositório e Commit - Parte 2</title>
      <dc:creator>Rodrigo Ferraz</dc:creator>
      <pubDate>Wed, 16 Jun 2021 13:03:10 +0000</pubDate>
      <link>https://dev.to/rodrigoscferraz/basico-pra-comecar-com-o-git-parte-2-13df</link>
      <guid>https://dev.to/rodrigoscferraz/basico-pra-comecar-com-o-git-parte-2-13df</guid>
      <description>&lt;p&gt;Essa segunda parte vai guiar você à como iniciar um repositório no Git e fazer seu primerio commit, além de te mostrar como verificar o status dos arquivos, adicionar e remover arquivos do Staging,  conforme conversamos na parte 1.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalando Git
&lt;/h2&gt;

&lt;p&gt;Antes de mais nada acesse a página do Git &lt;a href="https://git-scm.com/book/pt-br/v2/Come%C3%A7ando-Instalando-o-Git" rel="noopener noreferrer"&gt;aqui&lt;/a&gt; e instale o Git conforme seu sistema operacional.&lt;/p&gt;

&lt;p&gt;Se você estiver usando o Windows recomendo utilizar o Git Bash para fazer os comandos, pois irei usar comandos que funcionam apenas no terminal Linux e o Git Bash nos dá essa facilidade.&lt;/p&gt;

&lt;p&gt;Feito isso basta digitar o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git --help
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o retorno deve ser algo parecido com isso:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4c9pv2x3xg8hssgsblvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4c9pv2x3xg8hssgsblvy.png" alt="git_help"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Criando nosso primeiro Repositório
&lt;/h2&gt;

&lt;p&gt;Com o Git instalado agora vamos criar nosso repositório. Crie uma pasta como nome que você preferir(no meu caso será &lt;strong&gt;primeiro-repo&lt;/strong&gt;), acesse ela e digite o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls -la
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O nosso retorno deve ser dois diretórios, &lt;code&gt;.&lt;/code&gt; e &lt;code&gt;..&lt;/code&gt; que no Linux arremetem à respectivamente o diretório atual e ao diretório anterior(apenas para fins de curiosidade).&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0vlip57b8mpxi9fr9w0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0vlip57b8mpxi9fr9w0.png" alt="image"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Resumindo, não há nada em nossa pasta recém criada. Agora vamos criar nosso repositório.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No meu caso, como estou usando o Git Bash eu tive o seguinte retorno:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4qy67ijdtk15agi68sz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4qy67ijdtk15agi68sz.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repare no &lt;strong&gt;master&lt;/strong&gt; que aparece em azul no fim da linha, ele quer dizer básicamente que nosso repositório foi iniciado e que estamos na &lt;em&gt;branch&lt;/em&gt; master. Falaremos sobre branches mais adiante, mas é nosso ramo principal de desenvolvimento no momento.&lt;/p&gt;

&lt;p&gt;Outro ponto à se observar é que ao executar o comando &lt;code&gt;ls -la&lt;/code&gt; novamente agora tenho uma pasta &lt;code&gt;.git&lt;/code&gt;(no Linux, pastas que começam com &lt;code&gt;.&lt;/code&gt; são pastas ocultas), nessa pasta é onde ficarão as informações do nosso repositório e por sua vez a pasta que criamos (&lt;strong&gt;primeiro-repo&lt;/strong&gt;) é o nosso &lt;em&gt;Working-Directory&lt;/em&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj3fh2yy6emnt5v56rkm2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj3fh2yy6emnt5v56rkm2.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora com o comando abaixo consigo visualizar as alterações que ocorreram no meu repositório.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como não temos nada obtemos um retorno de que não há nenhum commit nem nada à commitar.&lt;/p&gt;

&lt;p&gt;Agora vamos criar um arquivo sem nada dentro&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyd5zq0onusbvlv8a5f3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyd5zq0onusbvlv8a5f3.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;e por fim vamos verificar o que o nosso &lt;code&gt;git status&lt;/code&gt; tem à dizer&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fur8ldlenahrx40y6wb0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fur8ldlenahrx40y6wb0b.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui o git já nos informa que temos um arquivo não rastreado, que nada mais é que um arquivo que não esta na nossa àrea de Staging (caso não se lembre, olhe &lt;a href="https://dev.to/rodrigoscferraz/basico-pra-comecar-com-o-git-primeira-parte-ea7"&gt;aqui&lt;/a&gt;), e aqui já temos uma dica de qual comando usar para adicioná-lo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add teste.txt
```



Feito isso, eu já rodei um `git status` novamente para ver a situação atual do nosso repositório e seus arquivos
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6ljq0x62ghwgkqtv2b0h.png)

Já podemos ver que o arquivo está na *Staging area* e será incluido no próximo commit, e caso queira removê-lo basta usar `git rm --cached teste.txt`

Antes de criarmos nosso commit temos um ultimo passo que é configurar o git com as informações de usuário, caso contrário, num cenário onde várias pessoas estão alterando o mesmo arquivo de código, nós nunca saberiamos *quem* fez determinada alteração. Para isso é bem simples basta usar os dois comandos à seguir:


```
 git config --global user.email "seu@email.com"
 git config --global user.name "Seu Nome"
```


Como o comando esta com o parâmetro `--global` informado, essas configurações definirão usuário e email para **TODOS** os repositórios que você criar daqui pra frente, assim você não precisa ficar inserindo isso a cada novo repositório criado, mas caso você queira fazer isso para cada um, basta omitir o `--global`.

Agora finalmente vamos criar nosso primeiro commit, o parâmetro `-m` abaixo serve para informarmos uma mensagem de commit, isso nos ajuda a entender porque aquele commit foi feito:


```
git commit -m "Primeiro commit"
```


![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6qkj2rbftdr1edwamlxf.png)

Sucesso! Aqui vemos as informações de em qual branch foi feito o commit(master), se foi o primeiro commit do repositório vemos `(root-commit)` e o identificador resumido do commit `ea0434b`. Por fim para ver mais detalhes do seu commit(como autor, hora, etc) use o comando abaixo. Já deixo algumas outras maneiras de visualizar informações de log dos commits como bonus também, e um [site](https://devhints.io/git-log) com diversas outras formas.


```
git log
```



![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0kjqkioe7uy7so7dgv6q.png)

Resumidamente o que fizemos aqui galera, foi inicializar um repositório(Working Directory), criar um novo arquivo e adicioná-lo ao próximo commit(Staging) e de fato salvar nossas alterações, ou como falamos "*commitar*" as alterações no nosso repositório.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i47r9nhhttt83cb7g0i2.gif)

Por hora é isso, espero que tenham gostado!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>git</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Arquitetura e Estados -Parte 1</title>
      <dc:creator>Rodrigo Ferraz</dc:creator>
      <pubDate>Mon, 14 Jun 2021 18:50:31 +0000</pubDate>
      <link>https://dev.to/rodrigoscferraz/basico-pra-comecar-com-o-git-primeira-parte-ea7</link>
      <guid>https://dev.to/rodrigoscferraz/basico-pra-comecar-com-o-git-primeira-parte-ea7</guid>
      <description>&lt;p&gt;Antes de mais nada, todo esse guia é baseado no livro "Pro Git"(incluindo a fonte das imagens) que pode ser baixado na versão PDF &lt;a href="https://github.com/progit/progit2/releases/download/2.1.304/progit.pdf"&gt;aqui&lt;/a&gt; e na versão EPUB &lt;a href="https://github.com/progit/progit2/releases/download/2.1.304/progit.epub"&gt;aqui&lt;/a&gt;. O livro é GRATUITO, então se você sabe inglês e quer se aprofundar mais esse é o caminho.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arquitetura e Funcionamento
&lt;/h2&gt;

&lt;p&gt;O Git é um VCS(Version Control System) utilizado amplamente para o processo de desenvolvimento de software. As ferramentas VCS registram as mudanças em um conjunto de arquivos e são responsáveis principalmente pela edição de arquivos por mais de uma pessoa "ao mesmo tempo", além disso também vem com ferramentas para resolver conflitos de versões e outras mais.&lt;/p&gt;

&lt;p&gt;De maneira bem simplória o Git é uma espécie de Google Drive com versionamento. Diferente de outros VCS de mercado o Git trabalha com o arquivo completo para cada versão diferente criada ao longo do tempo, já os outros trabalham salvando apenas as alterações(também chamada de delta) dos arquivos alterados.&lt;/p&gt;

&lt;p&gt;VCS que usam o delta:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SycU2kO---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2mida4o1alexytgphnr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SycU2kO---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2mida4o1alexytgphnr8.png" alt="deltas"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Git:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VTXt8AMz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u1bcop47arfozh0gswb3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VTXt8AMz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u1bcop47arfozh0gswb3.png" alt="snapshots"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sempre que um &lt;em&gt;commit&lt;/em&gt;(ou "Salvamento do estado", bem feio rsrs) do projeto é feito o Git cria uma snapshot do estado atual de todos os arquivos e grava uma referência desse estado(uma espécie de ID). Se um arquivo tem uma alteração, a cópia é feita, senão, ele não grava novamente o arquivo, ele simplesmente faz uma referência(link) para o arquivo do commit anterior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estado dos arquivos
&lt;/h3&gt;

&lt;p&gt;O ciclo de vida dos arquivos no Git são 3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modified&lt;/strong&gt; - Os arquivos foram alterados mas as mudanças não foram confirmadas;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Staged&lt;/strong&gt; - Mudanças foram confirmadas para estar no próximo commit;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commited&lt;/strong&gt; - Dados estão salvos na base local.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outro ponto importante são as seções de um projeto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Working Directory&lt;/strong&gt; - Representa uma versão das muitas que um projeto pode ter. Os arquivos são descompactados da base de dados do Git e são colocados no disco para você usar;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Staging Area&lt;/strong&gt; - É simplesmente um arquivo dentro do diretório do Git que contém as informações de modificações que serão incluídas no próximo commit, uma espécie de índice;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repository/Git Directory&lt;/strong&gt; - Local onde o Git guarda os metadados e base do projeto. Essa é a parte mais importante e é o que é copiado quando clonamos um repositório.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f_uPnS7n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2wjint59xqbagjho99qf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f_uPnS7n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2wjint59xqbagjho99qf.png" alt="seções do projeto"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basicamente o Workflow fica assim(observando a imagem acima):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Você esta no seu Working tree e faz alterações em alguns arquivos do seu código;&lt;/li&gt;
&lt;li&gt;Você escolhe quais dessas mudanças farão parte do commit e adiciona elas a Staging Area;&lt;/li&gt;
&lt;li&gt;Você faz o commit, que tira uma snapshot dos arquivos da maneira que eles estão na sua Staging Area e os armazena permanentemente ao seu Git Directory.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Depois disso o fluxo se reinicia, com você fazendo novas alterações, escolhendo quais vai &lt;em&gt;commitar&lt;/em&gt; e de fato fazendo o commit.&lt;/p&gt;

&lt;p&gt;Por enquanto é isso nos vemos na próxima!&lt;/p&gt;

</description>
      <category>git</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Aplicação para testes diversos</title>
      <dc:creator>Rodrigo Ferraz</dc:creator>
      <pubDate>Sat, 29 May 2021 12:01:27 +0000</pubDate>
      <link>https://dev.to/rodrigoscferraz/aplicacao-para-testes-diversos-1h40</link>
      <guid>https://dev.to/rodrigoscferraz/aplicacao-para-testes-diversos-1h40</guid>
      <description>&lt;p&gt;As Aplicações abaixo foram desenvolvidas apenas para labs que eu faço em arquiteturas de cloud de forma a testar a comunicação entre zonas de disponibilidades, AutoScaling, deploy com Terraform, etc. Ela será utilizada em uma série de postagens onde vou fazer o deploy dessa aplicação tanto na AWS como no Azure de várias maneiras diferentes, com Ec2, Fargate, EKS e na Azure com os equivalentes.&lt;/p&gt;

&lt;h1&gt;
  
  
  As aplicações de teste
&lt;/h1&gt;

&lt;p&gt;Bom, as aplicações são simples, elas foram escritas em Python e PHP das quais a que eu realmente entendo é a de Python, mas se você não sabe nada sobre nenhuma dessas linguagens, não tem problema, elas foram feitas com base nos exemplos que tem no próprio site. &lt;br&gt;
Basicamente o &lt;strong&gt;APP PHP&lt;/strong&gt; faz um &lt;em&gt;GET&lt;/em&gt; na &lt;strong&gt;APP Python&lt;/strong&gt; que por sua vez conecta no container com o banco Redis e incrementa com +1 a variável &lt;strong&gt;API_COUNTER&lt;/strong&gt;. Para ficar mais visual fiz a imagem abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0jimXD2M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uyisy0x3s5khllizqezf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0jimXD2M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uyisy0x3s5khllizqezf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O Git para download do código está &lt;a href=""&gt;aqui&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  APP Python
&lt;/h2&gt;

&lt;p&gt;A única coisa que usei de diferente aqui foi a biblioteca do &lt;a href="https://pypi.org/project/redis3/"&gt;redis&lt;/a&gt; para fazer a conexão com ele e o Flask como framework pra rodar a aplicação. Apenas para fins de curiosidade essa aplicação foi feita com base nesse &lt;a href="https://kb.objectrocket.com/redis/create-a-simple-task-queue-with-flask-and-redis-1467"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Porta em que a aplicação roda = 9090&lt;/li&gt;
&lt;li&gt;Variáveis de ambiente:

&lt;ul&gt;
&lt;li&gt;FLASK_APP = app.py&lt;/li&gt;
&lt;li&gt;REDIS_URL = redis://redis:6379/0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  APP PHP
&lt;/h2&gt;

&lt;p&gt;Aqui temos uma aplicação bem simples também usando o &lt;a href="https://docs.guzzlephp.org/en/stable/overview.html"&gt;Guzzlehttp&lt;/a&gt; para subir o servidor web e fazer as requisições para o endpoint da APP Python, a aplicação foi baseada no &lt;a href="https://docs.guzzlephp.org/en/stable/quickstart.html"&gt;Quickstart&lt;/a&gt; do Guzzle.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Porta em que a aplicação roda = 8080&lt;/li&gt;
&lt;li&gt;Variáveis de Ambiente:

&lt;ul&gt;
&lt;li&gt;PY_APP_URL = &lt;a href="http://python:9090"&gt;http://python:9090&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Subindo o Ambiente para testes
&lt;/h2&gt;

&lt;p&gt;Caso você queira experimentar essa aplicação em sua máquina é totalmente possível, desde que você tenha o Docker devidamente instalado no seu ambiente como também o Docker Composer.&lt;/p&gt;

&lt;p&gt;Para subir o ambiente basta clonar &lt;a href="https://github.com/rodrigoscferraz/Apps-Example1"&gt;este&lt;/a&gt; repositório do meu Github, acessar a pasta raiz dele e rodar os comandos abaixo.&lt;/p&gt;

&lt;p&gt;Para &lt;em&gt;buildar&lt;/em&gt; as imagens, instalar dependencias e fazer toda a parafernalha do Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;make build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E para subir o ambiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;make up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para acessar as aplicações basta testar acessando pelo seu navegador e deve ver algo como nas imagens abaixo:&lt;br&gt;
Aplicação Python:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--40h4URQY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s9gqlr1nxh7jdjrrtja7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--40h4URQY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s9gqlr1nxh7jdjrrtja7.png" alt="py_app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aplicação PHP:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nBt9MaDn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/grfcjikzsjgms3iockpl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nBt9MaDn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/grfcjikzsjgms3iockpl.png" alt="php_app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em breve teremos o Deploy na AWS!&lt;/p&gt;

</description>
      <category>docker</category>
    </item>
  </channel>
</rss>
