O que é um deploy?
Tags: webdev, beginners, devops
Published: 2023-10-04 15:07:28

 *O que é? De onde vieram? O que comem?*

Esse texto foi escrito após um período de grande decepção, muitas incertezas sobre a carreira em tech, bem no vale da auto-estima entre a inteligência de Alan Turing e a certeza de nunca ser um bom desenvolvedor. Tudo isso por conta do tema de hoje: Deploy de aplicações.

Como disse Marx no prefácio de sua *magnum opus*, O Capital: *"Todo o começo é difícil — isto vale em qualquer ciência."*
Não foi diferente para mim, começando a me aventurar no mundo de DevOps após ter sido instigado por uma dúvida muito trivial: "Como meu código vai sair do local host e ir parar na internet?", foi assim que eu me dei mal. Ou quase. 


<h2> Sumário </h2>

* [Tudo é físico](##-Tudo é físico)
* [Por que meu código está preso ao localhost?](##-Por que meu código está preso ao localhost?)
* [Final boss: A internet.](##-Final boss: A internet.)
* [Agradecimentos](###-Agradecimentos)
* [Bibliografia](###-Bibliografia)

## Tudo é físico

A maior dificuldade que tive para entender esse processo foi exatamente o marco zero da computação, o motivo pelo qual todos podemos ler textos online, ver conteúdos divertidos e ajudar outras pessoas ao redor do mundo: Tudo é físico!
Em algum lugar do mundo, o nosso código existe na forma de bits, eletricidade, incomodando um hardware etc., ele está lá dando uma baita canseira em algum servidor físico.

Mas isso não diz nada a respeito - até o presente momento - sobre o que é um deploy, então vamos por partes!

## Por que meu código está preso ao localhost? 

A associação ainda não tinha sido feita, esse conceito estava órfão em minha mente.
Pensei nisso por muito tempo, de verdade, passei noites em claro pensando em formas mirabolantes de resgatar meu querido código de dentro dessa prisão chamada "localhost", mas afinal o que é o localhost?


Espera um pouco... O localhost possui um nome muito sugestivo: É um host (server) local! 
Poxa! Como eu nunca havia pensado nisso?!?

O localhost nada mais é do que hostname, equivalente ao DNS para a internet e os IPs públicos, onde seu computador irá fazer uma requisição para ele mesmo, o IP do localhost sempre será o IP de sua máquina, portanto podemos acessar nossa aplicação da seguinte maneira:

```
(Nosso localhost) -> 127.0.0.1 : (Porta local) -> 3000
```
Isso significa que estamos acessando nosso IP, um host local, na porta de número 3000 onde estará rodando nossa aplicação, aqui deve-se atentar ao fato de que o IP será diferente e a porta também, deverá seguir seu próprio código para realizar este experimento.


![Diagrama representando o localhost](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l7bre9gh2pt51hhuwsam.png)



O DNS, ou Domain Name Service, nos ajuda a nomear os IPs, tal qual nossos documentos que contam com um nome e um Registro Geral, o famoso RG. Ainda não somos máquinas, mas temos algumas semelhanças.

Se ligarmos o tico com o teco veremos que o passo inicial foi dado, nosso código está rodando em algum lugar. 

## Final boss: A internet.

Até aqui já sabemos que o nosso código não é uma alucinação coletiva, e nem está tão aprisionado assim, mas então como podemos jogá-lo para dentro desse oceano chamado internet?

A resposta é simples: Além de possuirmos um IP local, também possuímos um IP público, para que outros computadores possam nos enxergar na internet. Ok, estamos chegando à algum lugar. 

A ideia é boa e está tudo uma maravilha mas aqui temos outro problema, um problema físico!

Físico?! Como assim!?! 


Pois é, pequeno gafanhoto. Nesse cenário ideal nós já nos esquecemos do marco zero da computação, a eletricidade! 
Aqui basta pensar no seguinte cenário: Colocamos nossa aplicação para rodar em nosso computador e conseguimos mergulhar nosso código nas águas do oceano da web, mas e se desligarmos nosso computador? Aí é que mora o perigo, porque nosso código será "desligado" também. 


Ok, então qual a solução?

A solução é colocar nosso código em uma máquina que não desliga, literalmente. 


Devemos enviar nosso código para um servidor e executá-lo dentro do mesmo servidor, que terá um IP privado, o tal do localhost, e um IP público que poderá ser acessado por outros computadores que estão conectados na internet. 

Isso, por definição, seria um deploy feito da forma mais primitiva possível, mas pense positivo, esse conceito já não é mais um mistério.



![Diagrama representando o acesso ao servidor](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8t6jqxdidxa3fhcpc4c5.png)





Na data presente, em Outubro de 2023, existem diversas formas de fazer esse bendito deploy, porém esses foram os conceitos fundamentais que me ajudaram a entender um pouco mais sobre esse processo que parecia tão impossível. 

No próximo artigo irei abordar as diferentes formas de fazer um deploy e como isso foi realizado ao longo dos anos, então fiquem ligados para mais novidades não tão novas assim. 


### Agradecimentos 

Graças à comunidade Heart Developers pude entrar em contato com outro profissional da área de DevOps que abriu meus caminhos sobre este tema, esse artigo é apenas uma forma de agradecimento pelo tempo cedido. Valeu, He4rt! Valeu, Felipe Schossler!  

### Bibliografia 

https://kubernetes.io/docs/concepts/overview/#why-you-need-kubernetes-and-what-can-it-do

https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/Publishing_your_website

https://www.hostinger.com/tutorials/what-is-localhost