Transformando notebook antigo em SERVIDOR realmente funcional 🧑🏻💻
Introdução
Sobre este Dev e motivação para o projeto
Olá pessoal, me chamo Eduardo Ribeiro sou estudante de Bacharel em Ciência da Computação, e sempre fui um cara bastante curioso para entender como as coisas realmente funcionam por baixo dos panos, e com o conhecimento eu posso aplicar a prática, procurando gastar zero reais kkk.
Geralmente o que acontece é que as ferramentas boas são pagas, e na real o problema nem é o custo em si, pois existem soluções baratas que são uma maravilha, o problema é que tudo já vem muito pronto, os Devs se apegaram muito em "Não recriar a roda", e isso é válido quando se trata de produção, mas não se aplica quando falamos de aprendizado, projetar tudo do zero para aprender na prática é uma das melhores formas de aprender, tentando ao máximo não depender de ferramentas de terceiros, com isso eu consigo testar meu limite e o limite da minha máquina.
Sumário
- Hardware da máquina.
- Instalação minimal da distro.
- Conexão Remota com SSH.
- Resolvendo problema de IP dinâmico.
4.1. Alternativa para o problema do IP dinâmico. - Solicitar aberturas de Portas.
- Porque usei docker e não VMs.
- Considerações finais.
Hardware da minha máquina
Bom, essa é minha máquina, basicamente qualquer kit xenon seria bem melhor, pois sabemos que os servidores são projetados a nível de hardware para fazer essas atividades, servir dados, mas aqui só pra nós 2, eu não queria gastar 1 real e tinha esse notebook sobrando, então vamos ver no que dá...
Como podem perceber minha máquina é bastante limitada quando se trata de recursos, mas isso não me impediu de tentar, eu fico me perguntando quantas conexões por segundo essa máquina conseguiria aguentar.
Instalação minimal da distro
Olha que maneiro turma! A gente se apega muito ao visual das distros e suas funcionalidades, mas quando se trata de servidor nada dessas firulas visuais são importantes, aqui nosso intuito é obter o máximo da máquina, extrair até a última gota de processamento dela, esse é o sistema rodando por completo, consumindo APENAS 170M de RAM, isso é sensacional.
Para isso Eu instalei o Debian com o mínimo de coisa possíveis, no momento da instalação eu removi tudo, a única opção que deixei habilitada foi a do SSH, para que eu pudesse me conectar com ele remotamente. APENAS!
Conexão remota com SSH
O que é o SSH? Secure Shell, mais conhecido como SSH é um protocolo de comunicação de rede criptografado, que opera por padrão na porta 22. Com ele nós conseguimos acessar outro computador de qualquer lugar do mundo de uma forma segura.
Mas como nós fazemos isso? Para acessar um computador remotamente é preciso que em ambos os computadores estejam instalados o SSH, no Linux podemos usar os comandos:
sudo apt install ssh -y
Para verificar se o SSH está funcionando basta digitar ssh
no terminal que o resultado vai ser parecido com isso:
Bom, sem mais delongas para se conectar ao servidor você precisa digitar o nome de algum usuário criado no servidor, do jeito que eu estou mostrando a baixo.
ssh [email protected]
No comando a cima podemos perceber que eu não especifiquei nenhuma porta, então por padrão ele vai se conectar na porta 22.
Vai pedir para você confirmar se for o seu primeiro acesso, pois ele irá gerar um token na sua máquina. E depois será necessário colocar a senha do usuário ao qual você está tentando conectar.
Outra coisa muito importante é que se você perceber, eu estou me conectando Localmente e isso não tem graça, queremos poder nos conectar de qualquer lugar do mundo.
Resolvendo problema de IP dinâmico
Se você tem um pouco de noção de rede de computadores, provavelmente você sabe que os nossos provedores de internet fornecem um IP, que é nosso IP externo, se você acessar Meu Ip você vai conseguir ver seu IP externo, o problema é que esse IP na sua grande maioria das vezes é dinâmico, ou seja, de tempos em tempos, ele muda.
Mas qual problema do IP mudar? Digamos que você configurou seu servidor com o IP X e quando você viaja está muito longe de casa, o teu IP muda para um IP Y, como você vai acessar sem saber o teu IP? E o pior, como que suas aplicações vão funcionar!? No final você não pode fazer nada, a não ser solicitar ao seu provedor de internet que seu IP seja estático.
E como o intuito aqui foi gastar o mínimo possível, eu fiz isso, e obvio que eles não queriam liberar, acho que eles acharam que eu não sabia o que estava fazendo, e começaram a me perguntar algumas coisas para saber se eu realmente manjava do assunto, depois de uma pequena conversa, eles consentiram em tornar meu IP estático.
Agora, sim, eu posso acessar minha rede de longe sem a preocupação de que tudo pare de funcionar.
mindmap
Internet
Meu IP publico
Roteador
Ip local 01
IP local 02
Solicitar a abertura de portas
Como nem tudo são flores, eu esqueci que algumas portas do meu IP publico estivessem abertas, para fazer o redirecionamento de tráfico de uma porta do meu ip publico para a minha máquina servidora. E adivinha? Não estavam abertas!
Eu não sei outro jeito de fazer tal coisa, se você souber deixa nos comentários.
Então lá vai Eu entrar em contato com o meu provedor de internet novamente, dessa vez para solicitar a abertura de algumas portas, fui informado que só poderiam abrir no máximo 5 portas sem custos adicionais, e isso foi perfeito, pois eu não queria ter que gastar 1 real.
SUPIMPA! IP estático, portas abertas, agora só fazer a configuração no AP, que muitos de vocês chamam de "Roteador", e pronto, conseguia acessar meu computador de qualquer lugar com o SSH.
Alternativa para o problema do IP dinâmico
Em muitos casos o provedor de internet vai te cobrar uma taxa, ou até mesmo vai se negar a fazer isso para ti, em últimos casos podemos pensar em uma ferramenta que já está bastante difundida no mercado de trabalho, que é o NGROK, é uma ferramenta simples de utilizar para baixar é preciso ir ao site: Ngrok e seguir o passo a passo.
Deixem aí nos comentários se vocês querem que eu traga aqui em forma de post como utilizar essa ferramenta massa que é o Ngrok.
Porque usei docker e não VMs.
Foi pensado em uma solução que já é bastante conhecida que são as máquinas virtuais, onde nós temos o Hardware, rodando com um sistema operacional HOST, que tem uma aplicação hypervisor rodando, que encima dela conseguimos instalar outros sistemas operacionais e neles instalar nossas aplicações.
Mas será que isso tudo realmente é necessário? Será que essa camada de Hypervisor ela é realmente necessária? Talvez, sim, talvez não, depende!
Aqui eu nem levei em consideração a camada de dependêncais que fica entre a aplicação e o Sistemas Operacionais.
Até pensei em instalar o PROXMOX, mas eu queria usar o mínimo de hardware possível, então fui tentar entender como o docker funciona e acabei gostando.
Como o docker funciona?
Os contêineres funcionam da seguinte maneira: dentro do nosso sistema operacional nós temos diversos contêineres, com diversas aplicações, que estão sendo executadas no nosso sistema operacional. Só que por baixo dos panos eles vão funcionar diretamente como processos dentro do nosso sistema.
Enquanto uma máquina virtual terá toda aquela etapa de virtualização dos sistemas operacionais, dentro do nosso sistema original, os containers vão funcionar diretamente como processos dentro do nosso sistema.
Namespaces
Existe um conceito chamado namespace que vai garantir que cada um desses contêineres consiga se isolar em determinados níveis. ** Mas que níveis são esses?**
Níveis de isolamento de containers
PID → Provê isolamento dos processos rodando dentro do container;
NET → Provê isolamento das interfaces de rede;
IPC → Provê isolamento da comunicação entre processos e memória compartilhada;
MNT → Provê isolamento do sistema de arquivos / ponto de montagem;
UTS → Provê isolamento do kernel. Age como se o container fosse outro host;
O último conceito, o UTS ajuda a responder até a outra pergunta que é frequente quando se trata de docker.
Como o contêiner dentro do SO vai funcionar “sem” um sistema operacional? Bom, graças ao conceito de namespace, nós não precisamos instalar nenhum SO dentro do contêiner, pois ele já vai ter um pedaço do kernel do SO a qual o docker foi instalado, só que de forma isolada. Existe outro conceito chamado CGroups que fazem o gerenciamento de uso do hardware para cada contêiner. Mas isso está fora do escopo desse post.
Considerações finais
E é isso, meu jovem amigo. Até o momento eu não fiz mais nada no servidor, além de prepará-lo para começar a hospedar minhas primeiras aplicações, estou bastante empolgado para poder desenvolver e testar algumas ferramentas, eu acho que todo esse trabalho valeu a pena, pois me deu uma base ótima para algumas coisas, principalmente sobre rede de computadores, recentemente eu escrevi um post bem básico Falando sobre IPs e redes de computadores. Depois dá uma lida lá.
Vou tentar está trazendo aqui de tempos em tempos forma mais detalhada como está sendo o processo de desenvolvimento dessas ferramentas, se você quiser acompanhar mais de perto, tem o meu LinkedIn onde eu irei tentar trazer atualizações com mais frequência, pois lá não precisa de tantos detalhes como os posts aqui.
Enfim, agradeço por dedicar um tempo para esta leitura, deixa nos comentários o que você achou, e o que você faria diferente, abraços!❤️