<?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: Lorenzo Uriel</title>
    <description>The latest articles on DEV Community by Lorenzo Uriel (@lorenzouriel).</description>
    <link>https://dev.to/lorenzouriel</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%2F2543834%2F989553a8-c438-45a0-be95-afd824962cf1.png</url>
      <title>DEV Community: Lorenzo Uriel</title>
      <link>https://dev.to/lorenzouriel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lorenzouriel"/>
    <language>en</language>
    <item>
      <title>The Git Week: O Básico para Começar</title>
      <dc:creator>Lorenzo Uriel</dc:creator>
      <pubDate>Tue, 04 Feb 2025 00:42:47 +0000</pubDate>
      <link>https://dev.to/lorenzouriel/the-git-week-o-basico-para-comecar-41pa</link>
      <guid>https://dev.to/lorenzouriel/the-git-week-o-basico-para-comecar-41pa</guid>
      <description>&lt;p&gt;A ideia desse artigo é te introduzir no mundo do Git, você vai aprender os principais comandos, como iniciar com um repositório no GitHub e sobre Markdown para começar as suas documentações.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tópicos
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Aprendendo Git

&lt;ul&gt;
&lt;li&gt;Principais Comandos&lt;/li&gt;
&lt;li&gt;Repositórios&lt;/li&gt;
&lt;li&gt;Markdown&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;O que é Versionamento e Tags?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Aprendendo GIT
&lt;/h2&gt;

&lt;p&gt;O Git é um sistema de controle de versão, projetado para rastrear alterações em projetos de software e coordenar o trabalho de várias pessoas neles.&lt;/p&gt;

&lt;p&gt;Desenvolvido por Linus Torvalds em 2005, o Git se destaca por sua eficiência, flexibilidade e capacidade de lidar com projetos de qualquer tamanho.&lt;/p&gt;

&lt;p&gt;Ele registra as alterações no código-fonte, permite que várias ramificações de desenvolvimento existam simultaneamente e facilita a fusão de código de diferentes colaboradores.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principais Comandos
&lt;/h3&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;Commit&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Acontece quando queremos salvar as última atualizações que foram realizadas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Processos relacionados ao Commit:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verificar o status dos arquivos modificados:
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Adicionar os arquivos para o commit:
&lt;/li&gt;
&lt;/ul&gt;

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

git add .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Realizar o commit:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Primeiro Commit"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;code&gt;-m&lt;/code&gt; é utilizado para adicionarmos uma mensagem no commit, em seguida temos o texto &lt;code&gt;"Primeiro Commit"&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;Push&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Acontece quando enviamos as alterações para o repositório - "empurra" as modificações para o repositório remoto&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Processos relacionados ao Push:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Realizar o push para o repositório remoto:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push

&lt;span class="c"&gt;# ou&lt;/span&gt;

git push origin nome-da-branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Se for a primeira conexão e primeiro push:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin nome-da-branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É necessário configurar a relação entre as branches locais e remotas usando o comando acima.&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;-u&lt;/code&gt; estabelece uma relação de acompanhamento, facilitando futuros pushes e pulls.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;Pull&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Atualiza o seu repositório local com as alterções no repositório remoto - "puxa" as alterações do repositório remoto.&lt;/p&gt;

&lt;p&gt;Ele traz todas as alterações do seu repositório remoto para o local.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Processos relacionados ao Pull:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Realizar o pull para obter as alterações mais recentes:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git pull origin nome-da-branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Se você já configurou a relação de acompanhamento durante o git push &lt;code&gt;-u&lt;/code&gt;, pode usar apenas:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git pull
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;code&gt;Tag&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Uma tag no Git é uma referência específica a um ponto na história do seu repositório. É comumente usado para marcar versões estáveis ou importantes do seu projeto. &lt;/p&gt;

&lt;p&gt;As tags são úteis para criar pontos de referência fixos que não se movem à medida que novos commits são feitos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Processos relacionados ao Tag:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Listar as tags existentes:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git tag
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Criar uma nova tag:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git tag &lt;span class="nt"&gt;-a&lt;/span&gt; v1.0 &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Versão 1.0"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Este comando cria uma tag anotada chamada &lt;code&gt;"v1.0"&lt;/code&gt; com uma mensagem descritiva &lt;code&gt;"Versão 1.0"&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1. a: Cria uma tag anotada.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2. v1.0: Nome da tag.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3. -m "Versão 1.0": Mensagem descritiva associada à tag.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Compartilhar a tag no repositório remoto:&lt;br&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push origin v1.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;O repositório é o local onde o projeto fica armazenado. Temos os repositórios locais e remotos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Remoto&lt;/strong&gt; - GitHub, outro CVS ou Servidor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local&lt;/strong&gt; - Própria Máquina&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No repositório temos os &lt;strong&gt;branchs (Ramos)&lt;/strong&gt; originais do projeto que chamamos de &lt;strong&gt;main&lt;/strong&gt;, podemos também criar novos branchs para desenvolver as alterações. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo:&lt;/strong&gt; Crie um branch chamado &lt;strong&gt;dev-task-13&lt;/strong&gt;, nesse branch você vai focar em finalizar a task 13 do seu backlog, quando finalizar você commita e faz um merge com a branch principal. Assim, você não afeta o seu branch principal com alterações que podem quebrar o código.&lt;/p&gt;

&lt;p&gt;Quando trabalhamos com repositórios remotos, temos que citar as &lt;strong&gt;Issues - no contexto do Git, uma "issue" refere-se a uma maneira de rastrear tarefas, melhorias, erros (bugs) ou discussões relacionadas a um projeto específico.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Chamamos de &lt;strong&gt;Working Tree, o local onde os arquivos estão realmente armazenados.&lt;/strong&gt; E temos o &lt;strong&gt;index (índice) que é local onde o Git armazena o que será commitado, entre a Working Tree e o Repositório Git.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arquitetura Git e Comandos:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.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%2F19pjwbugxc8snvhhr1f2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F19pjwbugxc8snvhhr1f2.png" alt="Arquitetura Git e Comandos" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Criando um Repo Local e Remoto:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;1. Vá até o seu GitHub e crie um novo repositório:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.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%2Fq8ykc0eukq3rs88whytc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fq8ykc0eukq3rs88whytc.png" alt="Repo Local e Remoto" width="800" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Navegue até o diretório local onde deseja criar o repositório — use o comando cd para entrar no diretório desejado.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;c:&lt;span class="se"&gt;\p&lt;/span&gt;ath&lt;span class="se"&gt;\v&lt;/span&gt;agrant
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Este comando cria um arquivo chamado README.md e insere o texto #up-website-with-vagrant nele. O &amp;gt;&amp;gt; é um operador de redirecionamento que acrescenta o texto ao final do arquivo, ou cria o arquivo se ele não existir.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"# up-website-with-vagrant"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Inicializa um novo repositório Git no diretório atual.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Adiciona o arquivo README.md ao índice. Isso prepara o arquivo para ser incluído no próximo commit.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6. Adiciona todas as alterações (Se houver)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;7. Cria o primeiro commit no repositório com uma mensagem. O -m permite adicionar a mensagem de commit diretamente na linha de comando.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"first commit"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;8. Renomeia a branch padrão do repositório para main. Este comando é usado para atualizar o nome da branch principal para seguir as práticas mais recentes em relação ao uso de nomes, substituindo a antiga master&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch &lt;span class="nt"&gt;-M&lt;/span&gt; main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;9. Adiciona um repositório remoto chamado "origin". O termo "origin" é um padrão utilizado para referenciar o repositório remoto principal. O URL é o endereço do repositório no GitHub.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git remote add origin https://github.com/lorenzouriel/up-website-with-vagrant.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;10. Envia o repositório local para o repositório remoto ("origin") na branch principal (main). O -u estabelece uma relação de acompanhamento, associando automaticamente a branch local com a branch remota. Isso é útil para futuros git pull  e git push sem a necessidade de especificar a branch.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos verificar o nosso repositório remoto:&lt;br&gt;
&lt;a href="https://media2.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%2Fkmewwy8k3fetuds353m1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fkmewwy8k3fetuds353m1.png" alt="repositorio remoto" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Markdown
&lt;/h3&gt;

&lt;p&gt;No contexto do Git, o Markdown é usado para criar arquivos de documentação, como README.md. Sempre atualize o seu README.md!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Breve resumo sobre Markdown&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cabeçalhos:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Meu Projeto&lt;/span&gt;

&lt;span class="gu"&gt;## Descrição&lt;/span&gt;

Uma breve descrição do meu incrível projeto.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Listas:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;### Funcionalidades&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Funcionalidade 1
&lt;span class="p"&gt;
-&lt;/span&gt; Funcionalidade 2
&lt;span class="p"&gt;
-&lt;/span&gt; Funcionalidade 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Links:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Link para o meu site&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;https://www.exemplo.com&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Imagens:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;![&lt;/span&gt;&lt;span class="nv"&gt;Logo do Projeto&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;imagens/logo.png&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Ênfase (negrito e itálico):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Este é um &lt;span class="gs"&gt;**projeto incrível**&lt;/span&gt; que usa _tecnologias modernas_.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Citações:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gt"&gt;&amp;gt; "Beba água." - Ivysson&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Tabelas:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;| Nome       | Função           |
|------------|------------------|
| João       | Desenvolvedor    |
| Maria      | Designer         |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Código:
&lt;img src="https://media2.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%2Ficlbaghs67s02qe9sogo.png" alt="codes-md" width="800" height="126"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  O que é Versionamento e Tags?
&lt;/h2&gt;

&lt;p&gt;Já trabalhou com lançamento de versões?&lt;/p&gt;

&lt;p&gt;Ou com Tags no Git?&lt;/p&gt;

&lt;p&gt;As tags são bem importantes em nossos projetos - com elas conseguimos identificar em qual momento no tempo ocorreram os principais lançamentos e versões.&lt;/p&gt;

&lt;p&gt;É um meio de organizar e documentar o seu trabalho.&lt;/p&gt;

&lt;p&gt;Mas quando você for adicionar as tags, vai saber a diferença de cada número?&lt;/p&gt;

&lt;p&gt;Vou te explicar a diferença de forma simples e prática:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Major:&lt;/strong&gt; São alterações incompatíveis com as versões anteriores (Reestruturou tudo? Adicione +1 - v2.0.0)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minor:&lt;/strong&gt; São alterações importantes e compativéis com a versão anterior (Adicionou uma nova funcionalidade? Adicione +1 v2.1.0)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Correção:&lt;/strong&gt; Erros e bugs que não afetam a versão (Encontrou um bug e corrigiu? Adicione +1 v2.1.1)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build:&lt;/strong&gt; É um controle interno do Git e do versionamento, ele não fica necessariamente à vista quando você especifica a versão.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Exemplo:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.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%2F4j84gr6z6zf93xsime20.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F4j84gr6z6zf93xsime20.png" alt="versionamento" width="524" height="193"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Obrigado por ler até aqui!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://linktr.ee/lorenzo_uriel" rel="noopener noreferrer"&gt;&lt;em&gt;Fazendo o que precisa ser feito.&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>versioning</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Vagrant Descomplicado: Um Guia Prático</title>
      <dc:creator>Lorenzo Uriel</dc:creator>
      <pubDate>Tue, 04 Feb 2025 00:36:51 +0000</pubDate>
      <link>https://dev.to/lorenzouriel/vagrant-descomplicado-um-guia-pratico-41bi</link>
      <guid>https://dev.to/lorenzouriel/vagrant-descomplicado-um-guia-pratico-41bi</guid>
      <description>&lt;p&gt;A minha ideia é te ensinar a usar as principais funcionalidades do Vagrant em apenas um artigo, de forma simplificada e rápida. Você vai aprender o que é, para que serve, quais as suas funcionalidades e vai subir uma VM comigo no decorrer do artigo!&lt;/p&gt;

&lt;h2&gt;
  
  
  Tópicos
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
Introdução

&lt;ul&gt;
&lt;li&gt;O que é IaC?&lt;/li&gt;
&lt;li&gt;O que é um Hypervisor?&lt;/li&gt;
&lt;li&gt;O que é uma VM?&lt;/li&gt;
&lt;li&gt;O que é o Vagrant?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Instalando o Ambiente&lt;/li&gt;
&lt;li&gt;Iniciando com uma Box&lt;/li&gt;
&lt;li&gt;
Gerenciando uma Box

&lt;ul&gt;
&lt;li&gt;Criando um VagrantFile&lt;/li&gt;
&lt;li&gt;Comandos para Manipular uma VM&lt;/li&gt;
&lt;li&gt;Configurando Redes, Hostname e Liberando Porta na VM&lt;/li&gt;
&lt;li&gt;Scripts Shell para Automatizar Tarefas&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Criando uma BOX&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;h3&gt;
  
  
  O que é IaC?
&lt;/h3&gt;

&lt;p&gt;IaC, ou Infraestrutura como Código, é uma abordagem na qual a infraestrutura de TI é gerenciada e provisionada usando código, em vez de configurações manuais. Sendo assim, facilita a automação e gestão ágil dos ambientes, chega de "na minha máquina funciona".&lt;/p&gt;

&lt;h3&gt;
  
  
  O que é um Hypervisor?
&lt;/h3&gt;

&lt;p&gt;Um hypervisor é um software ou firmware que permite a execução de máquinas virtuais (VMs) em um único hardware físico. Ele age como uma camada de virtualização entre o hardware físico do computador e os sistemas operacionais convidados, permitindo que vários sistemas operacionais compartilhem o mesmo hardware simultaneamente. Nós iremos utilizar VirtualBox para subir as nossas VMs com o Vagrant.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que é uma VM (Virtual Machine)?
&lt;/h3&gt;

&lt;p&gt;É um software que simula um ambiente de computador físico e permite a execução de sistemas operacionais e aplicativos como se estivessem em hardware físico real.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que é o Vagrant?
&lt;/h3&gt;

&lt;p&gt;É uma ferramenta de linha de comando utilizada para agilizar todo o WorkFlow de uma VM, também, controlar todo o LifeCycle da VM. Nós manipulamos um Hypervisor por meio de comandos Vagrant, ele traduz os comandos enviados para os comandos do Hypervisor utilizado. O Vagrant abstrai detalhes específicos do hypervisor, proporcionando uma abordagem consistente e portátil para configuração de ambientes. O uso de arquivos de configuração (Vagrantfiles) permite uma configuração fácil e rápida de ambientes.&lt;/p&gt;

&lt;p&gt;Imagina que você subiu um ambiente de Dev com tudo, quer adicionar esse ambiente em um outro servidor ou enviar para uma pessoa? Compartilhe o VagrantFile.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalando o Ambiente
&lt;/h2&gt;

&lt;p&gt;Você precisa apenas fazer o download e instalar. Depois, podemos avançar para os próximos tópicos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.virtualbox.org/wiki/Downloads" rel="noopener noreferrer"&gt;Hypervisor que utilizo: VirtualBox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.hashicorp.com/vagrant/downloads" rel="noopener noreferrer"&gt;Vagrant&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Iniciando com uma Box
&lt;/h2&gt;

&lt;p&gt;Uma Box é basicamente o sistema operacional que você vai virtualizar. Ou seja, uma Box é uma VM empacotada em um arquivo chamado Box. O Vagrant tem uma comunidade onde as pessoas compartilham as suas Boxes, chamada Vagrant Cloud. Mas você também pode criar uma Box própria.&lt;/p&gt;

&lt;p&gt;Imagine que no seu ambiente você utiliza o SQL Server, Power BI e outras ferramentas. Com o Vagrant, você poderia baixar uma Box com apenas o sistema operacional Windows, instalar o que você precisa e, depois, fechar uma Box sua. Assim, &lt;strong&gt;você iria compartilhar uma Box pronta para os ambientes ou compartilhar com a comunidade!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.vagrantup.com/boxes/search" rel="noopener noreferrer"&gt;Vagrant Cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Comandos:
&lt;/h3&gt;

&lt;p&gt;Vamos imaginar que você quer baixar o Box do windows no seu servidor&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant box add gusztavvargadr/windows-server-2019-standard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Baixou algumas Boxes? Vamos lista-las&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant box list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Listar opções de comando do vagrant box (Você pode usar o -h para todos os comandos)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant box &lt;span class="nt"&gt;-h&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;Geral&lt;span class="o"&gt;)&lt;/span&gt;

vagrant box list &lt;span class="nt"&gt;-h&lt;/span&gt;  &lt;span class="o"&gt;(&lt;/span&gt;Específico&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quer verificar se existe alguma Box desatualizada no seu servidor?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant box outdated &lt;span class="o"&gt;(&lt;/span&gt;No próprio diretório&lt;span class="o"&gt;)&lt;/span&gt;

vagrant box outdated &lt;span class="nt"&gt;--&lt;/span&gt; global &lt;span class="o"&gt;(&lt;/span&gt;Vai verificar todas que tenho no servidor&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quer remover a que está desatualizada?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant box prune &lt;span class="o"&gt;(&lt;/span&gt;Vai remover todas as desatualizadas&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ou... atualizar as mesmas sem danificar?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant box update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso você queira remover apenas uma Box específica.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant box remove vm/name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esses são os comandos principais para você utilizar e baixar uma Box, vou deixar o meu cmd como exemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fp8xqwtjmfmew6yavlfzy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fp8xqwtjmfmew6yavlfzy.png" alt="Image description" width="800" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Gerenciando uma Box
&lt;/h2&gt;

&lt;p&gt;O VagrantFile é a magia do Vagrant, do que adianta ter uma VM se você não consegue manipular a mesma? Bom, isso acabou...&lt;/p&gt;

&lt;p&gt;O VagrantFIle é o local em que adicionaremos/modificaremos todas as configurações necessárias para subir a nossa VM. Você pode configurar opções de rede, hardware e até mesmo Shell Scripts para automatizar instalações. &lt;/p&gt;

&lt;h3&gt;
  
  
  Criando um VagrantFile
&lt;/h3&gt;

&lt;p&gt;Essa é a etapa que interessa, é aqui que vamos iniciar a primeira etapa com o Vagrant.&lt;/p&gt;

&lt;h4&gt;
  
  
  Comandos:
&lt;/h4&gt;

&lt;p&gt;Para criar um VagrantFile, utilize o comando no seu repositório:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant init vm/name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ele vai verificar se a Box já foi instalada (Instalamos com o vagrant box add) Se ela não estiver sido instalada, ele irá instalar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fpaln9wb3ja9wvyf8rqju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fpaln9wb3ja9wvyf8rqju.png" alt="Image description" width="661" height="107"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esse é um exemplo do &lt;strong&gt;VagrantFile&lt;/strong&gt; criado (Ele vem cheio de comentários, eu removi e deixei só o que importa nesse primeiro momento):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Vagrant.configure&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; |config|
  config.vm.box &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"peru/windows-server-2019-standard-x64-eval"&lt;/span&gt; &lt;span class="c"&gt;# Box utilizada &lt;/span&gt;
  config.vm.provider &lt;span class="s2"&gt;"virtualbox"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; |vb| &lt;span class="c"&gt;# Hypervisor utilizado &lt;/span&gt;
      vb.memory &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"1024"&lt;/span&gt; &lt;span class="c"&gt;# Memória disponibilizada&lt;/span&gt;
      vb.cpus &lt;span class="o"&gt;=&lt;/span&gt; 10  &lt;span class="c"&gt;# Configuração de CPUs&lt;/span&gt;
      vb.name &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Article Test 01"&lt;/span&gt; &lt;span class="c"&gt;# Nome da VM no Hypervisor&lt;/span&gt;
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronta para subir a mesma? Só rodar o seguinte comando no diretório:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;E aguardar...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Foimj8cosui7j5olu59h4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Foimj8cosui7j5olu59h4.png" alt="Image description" width="730" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mas em poucos instantes, sua VM está no ar!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F5spcuh90odo9gpw79neu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F5spcuh90odo9gpw79neu.png" alt="Image description" width="730" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Comandos para Manipular uma VM
&lt;/h3&gt;

&lt;p&gt;Vou listar alguns dos comandos principais que você precisa saber para manipular a sua VM no ar.&lt;/p&gt;

&lt;h4&gt;
  
  
  Comandos:
&lt;/h4&gt;

&lt;p&gt;Verificar o Status da VM&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Desligar a VM&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant halt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Subir a VM (Se existir - Liga/Se não - Cria)&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Suspende a VM&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant &lt;span class="nb"&gt;suspend&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reiniciar a VM&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Destruir ou Remover a VM&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant destroy &lt;span class="o"&gt;(&lt;/span&gt;y/n?&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configurando Redes, Hostname e Liberando Porta na VM
&lt;/h3&gt;

&lt;p&gt;Para configurar as redes, nós temos duas opções: &lt;strong&gt;NAT ou BRIDGE.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NAT -&lt;/strong&gt; É uma tecnologia usada para compartilhar uma conexão de internet com vários dispositivos em uma rede local. O roteador recebe um endereço IP público da internet e atribui um endereço privado a cada dispositivo na rede local. Assim, o roteador traduz os endereços IPs privados para os público, permitindo que dispositivos na rede acessem a internet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;BRIDGE -&lt;/strong&gt; É uma tecnologia utilizada para conectar duas ou mais redes locais em uma única rede. Uma ponte (Bridge) é um dispositivo que conecta duas redes e permite que os dispositivos em uma rede se conectem aos dispositivos de outra rede, como se estivessem na mesma rede.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No meu exemplo, eu vou escolher o NAT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplos:&lt;/strong&gt;&lt;br&gt;
Conexão NAT - DHCP.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Vagrant.configure&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; |config| 
  config.vm.network &lt;span class="s2"&gt;"private_network"&lt;/span&gt;, &lt;span class="nb"&gt;type&lt;/span&gt;: &lt;span class="s2"&gt;"dhcp"&lt;/span&gt; 

  config.vm.box &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"peru/windows-server-2019-standard-x64-eval"&lt;/span&gt; &lt;span class="c"&gt;# Box utilizada&lt;/span&gt;

end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conexão NAT - IP Fixo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Vagrant.configure&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; |config| 
    config.vm.network &lt;span class="s2"&gt;"private_network"&lt;/span&gt;, ip: &lt;span class="s2"&gt;"192.168.25.10"&lt;/span&gt; 

    config.vm.box &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"peru/windows-server-2019-standard-x64-eval"&lt;/span&gt; &lt;span class="c"&gt;# Box utilizada&lt;/span&gt;
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após definirmos o tipo da rede, &lt;strong&gt;podemos fornecer um exemplo de porta.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Suponha que a máquina virtual (VM) que você está iniciando seja responsável por um servidor SQL, e que seja necessário estabelecer uma conexão com o SQL Server. Para realizar isso, &lt;strong&gt;é necessário liberar a porta associada ao SQL Server - por padrão é a 1433.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Vagrant.configure&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; |config| 
  config.vm.network &lt;span class="s2"&gt;"forwarded_port"&lt;/span&gt;, guest: 1433, host: 1433

  config.vm.box &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"peru/windows-server-2019-standard-x64-eval"&lt;/span&gt; &lt;span class="c"&gt;# Box utilizada &lt;/span&gt;
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;guest: 1433&lt;/code&gt;&lt;/strong&gt;: Especifica que a porta no ambiente da máquina virtual (o "convidado") é a 1433.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;host: 1433&lt;/code&gt;&lt;/strong&gt;: Indica que a porta no ambiente do host (a máquina física que está executando a VM) é também 1433.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O Hostname é a última etapa que quero abordar neste capítulo, com ele vamos especificar um nome para a conexão em nossa rede local. Por exemplo, nós criamos a nossa rede em NAT, para conectar na máquina remotamente, precisaremos nos conectar pelo IP. O problema disso é: &lt;strong&gt;nosso IP não é fixo!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quando utilizamos o hostname, isso não é necessário. &lt;strong&gt;Podemos nos conectar pelo hostname!&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Vagrant.configure&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; |config|   
  config.vm.box &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"peru/windows-server-2019-standard-x64-eval"&lt;/span&gt; &lt;span class="c"&gt;# Box utilizada&lt;/span&gt;

  config.vm.hostname &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"VMEXARTICLE"&lt;/span&gt;

end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Assim ficou o nosso VagrantFile após os aprendizados deste capítulo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Vagrant.configure&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; |config|
  config.vm.box &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"peru/windows-server-2019-standard-x64-eval"&lt;/span&gt;

  config.vm.network &lt;span class="s2"&gt;"forwarded_port"&lt;/span&gt;, guest: 1433, host: 1433 
  config.vm.network &lt;span class="s2"&gt;"private_network"&lt;/span&gt;, &lt;span class="nb"&gt;type&lt;/span&gt;: &lt;span class="s2"&gt;"dhcp"&lt;/span&gt;

  config.vm.provider &lt;span class="s2"&gt;"virtualbox"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; |vb|
      vb.memory &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"1024"&lt;/span&gt;
      vb.cpus &lt;span class="o"&gt;=&lt;/span&gt; 10
      vb.name &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Article Test 01"&lt;/span&gt; &lt;span class="c"&gt;# Nome da VM no Hypervisor&lt;/span&gt;
  end

  config.vm.hostname &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"VMEXARTICLE"&lt;/span&gt;

end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode reiniciar a VM para aplicar as alterações. Para testar o hostname, faça um &lt;strong&gt;PING VMEXARTICLE&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scripts Shell para Automatizar Tarefas
&lt;/h3&gt;

&lt;p&gt;Isso sem sombra de dúvidas é o que mais amo no Vagrant, você pode rodar Scripts Shell (Ou Bash Scripts se for Linux), de forma totalmente automatizada.&lt;/p&gt;

&lt;p&gt;Nesse exemplo eu vou liberar o Firewall da máquina, você pode fazer de duas maneiras.&lt;/p&gt;

&lt;p&gt;Especificando o comando direto no VagrantFile&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; config.vm.provision &lt;span class="s2"&gt;"shell"&lt;/span&gt;, inline: &lt;span class="o"&gt;&amp;lt;&amp;lt;-&lt;/span&gt;&lt;span class="no"&gt;SHELL&lt;/span&gt;&lt;span class="sh"&gt;
    netsh advfirewall set allprofiles state off
&lt;/span&gt;&lt;span class="no"&gt;  SHELL
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Especificando um path para o comando (Ele precisa estar no mesmo diretório do VagrantFile)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;config.vm.provision &lt;span class="s2"&gt;"shell"&lt;/span&gt;, path: &lt;span class="s2"&gt;"disable_firewall.ps1"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quero que &lt;strong&gt;você dê uma pausa aqui e pense...&lt;/strong&gt; quantas coisas é possível fazer com essa automatização?&lt;/p&gt;

&lt;p&gt;Caso a sua máquina tenha subido, não é necessário reiniciar para que os scripts Shell rodem. Você pode realizar o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant provision
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ele vai identificar qual parte no VagrantFile possue o "config.vm.provision" e rodar todos. Segue exemplo:&lt;br&gt;
&lt;a href="https://media2.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%2Fx7sz3n4o8rcf9g7pu3m2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fx7sz3n4o8rcf9g7pu3m2.png" alt="Image description" width="452" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VagrantFile final:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Vagrant.configure&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"2"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; |config|
  config.vm.box &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"peru/windows-server-2019-standard-x64-eval"&lt;/span&gt;

  config.vm.network &lt;span class="s2"&gt;"forwarded_port"&lt;/span&gt;, guest: 1433, host: 14330

  config.vm.network &lt;span class="s2"&gt;"private_network"&lt;/span&gt;, &lt;span class="nb"&gt;type&lt;/span&gt;: &lt;span class="s2"&gt;"dhcp"&lt;/span&gt;

  config.vm.provider &lt;span class="s2"&gt;"virtualbox"&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; |vb|
      vb.memory &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"1024"&lt;/span&gt;
      vb.cpus &lt;span class="o"&gt;=&lt;/span&gt; 10
      vb.name &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Article Test 01"&lt;/span&gt; 
  end

  config.vm.hostname &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"VMEXARTICLE"&lt;/span&gt;

  config.vm.provision &lt;span class="s2"&gt;"shell"&lt;/span&gt;, inline: &lt;span class="o"&gt;&amp;lt;&amp;lt;-&lt;/span&gt;&lt;span class="no"&gt;SHELL&lt;/span&gt;&lt;span class="sh"&gt;
    netsh advfirewall set allprofiles state off
&lt;/span&gt;&lt;span class="no"&gt;  SHELL

&lt;/span&gt;end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Simples, não? ;)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Criando uma BOX
&lt;/h2&gt;

&lt;p&gt;Imagine esse cenário agora: Você instalou tudo que era necessário para o ambiente do projeto e deseja &lt;strong&gt;escalar o mesmo para o servidor de produção.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O que podemos fazer? Nós podemos &lt;strong&gt;fechar a NOSSA Box - vamos empacotar a Box em um arquivo .box&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Exemplo:
&lt;/h4&gt;

&lt;p&gt;Criando o arquivo .box da nossa VM&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant package &lt;span class="nt"&gt;--output&lt;/span&gt; article_test.box
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;vagrant package&lt;/code&gt;&lt;/strong&gt;: é o comando, você pode adicionar o -h para ver as outras opções do mesmo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--output&lt;/code&gt;&lt;/strong&gt;: Complemento do comando para exportar a Box&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;article_test.box&lt;/code&gt;&lt;/strong&gt;: Nome dado para a nossa Box
&lt;img src="https://media2.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%2Fx1w54et4fsne21t33xos.png" alt="Image description" width="551" height="91"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Após criar o arquivo .box, &lt;strong&gt;você precisa adicionar ela em sua lista de Boxes.&lt;/strong&gt; Igual fizemos no primeiro exemplo, quando puxamos a nossa VM do Vagrant Cloud. Porém, agora vamos buscar localmente!&lt;/p&gt;

&lt;p&gt;Adicionando a nossa Box na lista de Boxes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vagrant box add &lt;span class="nt"&gt;--name&lt;/span&gt; article-test article_test.box
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;vagrant box add&lt;/code&gt;&lt;/strong&gt;: Comando para criar a Box&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;-- name article-test&lt;/code&gt;&lt;/strong&gt;: Nome que você vai dar para a Box&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;article_test.box&lt;/code&gt;&lt;/strong&gt;: Nome que foi dado para o arquivo .Box&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pronto! Você tem uma infra como código agora...&lt;/p&gt;

&lt;p&gt;Se te interessou, pesquise mais sobre o assunto, o Vagrant tem muito mais a oferecer. Garanto que não vai se arrepender!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Obrigado por ler até aqui!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://linktr.ee/lorenzo_uriel" rel="noopener noreferrer"&gt;&lt;em&gt;Fazendo o que precisa ser feito.&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vagrant</category>
      <category>iac</category>
      <category>tutorial</category>
      <category>virtualmachine</category>
    </item>
    <item>
      <title>Como Alterar o Nome do Seu SQL Server</title>
      <dc:creator>Lorenzo Uriel</dc:creator>
      <pubDate>Sun, 02 Feb 2025 23:35:56 +0000</pubDate>
      <link>https://dev.to/lorenzouriel/change-the-sql-server-name-3eh3</link>
      <guid>https://dev.to/lorenzouriel/change-the-sql-server-name-3eh3</guid>
      <description>&lt;p&gt;Alterar o nome SQL pode trazer alguns benefícios quando você pensa em melhorar a identificação, organização e até mesmo o gerenciamento do seu servidor localmente:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Conecte-se à sua instância do SQL Server usando o SQL Server Management Studio (SSMS).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Abra uma nova janela de consulta.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Execute o seguinte comando para verificar o nome do servidor atual:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;SERVERNAME&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Este comando retornará o nome do servidor atual, copie o resultado.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Agora para alterar o nome do servidor, execute todos os comandos abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_dropserver&lt;/span&gt; &lt;span class="s1"&gt;'old_server_name'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GO&lt;/span&gt;
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_addserver&lt;/span&gt; &lt;span class="s1"&gt;'new_server_name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'local'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GO&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Substitua ‘old_server_name’ pelo nome do servidor atual e ‘new_server_name’ pelo novo nome do servidor.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Imagine que eu queira tirar apenas minha instância.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_dropserver&lt;/span&gt; &lt;span class="s1"&gt;'LOCAL&lt;/span&gt;&lt;span class="se"&gt;\M&lt;/span&gt;&lt;span class="s1"&gt;SSQLSERVER'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GO&lt;/span&gt;
&lt;span class="k"&gt;EXEC&lt;/span&gt; &lt;span class="n"&gt;sp_addserver&lt;/span&gt; &lt;span class="s1"&gt;'LOCAL'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'local'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GO&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reinicie o serviço SQL Server para aplicar as alterações. Você pode fazer isso usando o SQL Server Configuration Manager ou no SSMS.&lt;/p&gt;

&lt;p&gt;Execute o comando novamente para verificar o nome do servidor atual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;@@&lt;/span&gt;&lt;span class="n"&gt;SERVERNAME&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É importante observar que alterar o nome do servidor pode ter implicações para qualquer aplicação ou serviço que dependa da instância do SQL Server ou do antigo nome. Certifique-se de atualizar as strings de conexão!&lt;/p&gt;




&lt;p&gt;Obrigado por ler até aqui!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://linktr.ee/lorenzo_uriel" rel="noopener noreferrer"&gt;Fazendo o que precisa ser feito.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>sqlserver</category>
      <category>database</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
