Como Transformei um Computador Antigo em um Servidor
Apesar do título, o que fiz foi bem simples. Basicamente, instalei o Ubuntu Server em um computador antigo e configurei algumas ferramentas para rodar na nossa rede interna.
Contextualizando
Trabalho em um supermercado e há alguns meses, desenvolvi o bot-sambanet, um script que automatiza a associação de produtos durante o lançamento de notas fiscais.
Aqui no escritório, somos duas pessoas, e utilizamos essa ferramenta em qualquer máquina conectada à rede interna. No entanto, o bot rodava no meu computador, via WSL, o que frequentemente deixava minha máquina mais lenta, já que o script consome bastante memória.
Como tínhamos uma máquina antiga sobrando por aqui, decidi instalar o Ubuntu Server nela e transferir todas as ferramentas que usamos para esse servidor. Dessa forma, aliviaria a carga do meu computador e centralizaria todas as ferramentas em uma única máquina.
Passo a Passo
Instalação
A instalação do Ubuntu Server é bem simples. Primeiro, baixei a imagem ISO diretamente do site oficial e criei um pendrive bootável utilizando o Balena Etcher. Durante o processo de instalação, fui avançando nas configurações padrão. Em uma das etapas, o instalador permite escolher algumas ferramentas para serem instaladas automaticamente; escolhi apenas o servidor SSH e o Docker.
Configuração da Chave SSH
Na minha máquina pessoal, gerei uma chave SSH com o seguinte comando:
ssh-keygen -t rsa -b 4096 -C "meu_email@hotmail.com"
Em seguida, copiei a chave pública para o diretório atual:
cp ~/.ssh/id_rsa.pub .
Para transferir a chave para o servidor, utilizei um método simples: copiei o arquivo para um pendrive e o conectei na máquina onde o Ubuntu Server foi instalado.
No servidor, identifiquei o pendrive e copiei a chave SSH com os seguintes comandos:
sudo fdisk -l
sudo mount /dev/sdb1 /mnt
cp /mnt/id_rsa.pub ~/.ssh/authorized_keys
Depois, ajustei as permissões adequadas e desmontei o pendrive:
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chown -R $USER:$USER ~/.ssh
sudo umount /mnt
Agora o acesso via SSH está configurado e seguro.
Configuração do IP Estático
Para garantir que o servidor esteja sempre acessível pelo mesmo IP, configurei um IP estático. Editei o arquivo de configuração de rede com o seguinte comando:
sudo nano /etc/netplan/50-cloud-init.yaml
Adicionei a seguinte configuração:
network:
ethernets:
enp4s0:
dhcp4: false
addresses:
- 192.168.1.240/24
routes:
- to: 0.0.0.0/0
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
version: 2
Depois de salvar o arquivo, apliquei as mudanças com o comando:
sudo netplan apply
Acesso ao Servidor
Com a configuração completa, o servidor já está pronto para ser acessado de forma segura. Para conectar a ele, usei o seguinte comando no terminal:
ssh usuario@192.168.1.240
Ajustar Permissões do Docker
Para evitar o uso do sudo
ao executar comandos Docker, criei o grupo docker
e adicionei o usuário a esse grupo:
sudo groupadd docker
sudo usermod -aG docker $USER
Depois, apliquei as mudanças com o seguinte comando:
newgrp docker
Como o Docker foi instalado via Snap, reiniciei o serviço com:
sudo snap restart docker
Executar Ferramentas
O Ubuntu Server já vem com o Git instalado, então o próximo passo foi clonar o projeto no GitHub:
git clone https://github.com/diasjoaovitor/bot-sambanet.git
Esse projeto já possui um Dockerfile
e um arquivo compose.yml
para construir a imagem e executar os containers. O único ajuste necessário foi criar o arquivo .env
e rodar o comando para subir o container:
cd bot-sambanet/
touch .env
nano .env # adicionar variáveis de ambiente
docker compose up --build
Expor Aplicação na Rede Interna
Para acessar a interface web do bot-sambanet
na rede interna, precisei expor a porta na qual a aplicação roda. Nesse caso, a aplicação usa a porta 3001. Então, executei os seguintes comandos:
sudo ufw enable
sudo ufw allow 3001/tcp
sudo ufw allow ssh
Depois, verifiquei o status das regras com o comando:
sudo ufw status
A saída foi:
To Action From
-- ------ ----
3001/tcp ALLOW Anywhere
22/tcp ALLOW Anywhere
3001/tcp (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
Considerações Finais
Agora, todas as ferramentas que antes rodavam no meu computador estão centralizadas e funcionando no servidor, deixando meu PC mais leve. Apesar de ser uma configuração básica, esse processo foi um grande aprendizado para mim e me motivou a continuar estudando sobre infraestrutura de servidores, redes e DevOps.
Excelente. Um funcionário que sabe utilizar de verdade linux e entende de redes é uma joia rara para qualquer empresa! Você tem um ótimo futuro, parabéns.
Se desse pra salvar esse post pra eu testar isso no meu notebook velho, eu iria fazer isso viu. Muito bom, bem didático a sua explicação, e muito interessante o seu artigo. Apesar de ser Dev, creio que ter essa noção de Infra e muito importante, ainda mais se eu algum momento a pessoa resolver empreender ou algo do tipo.
configurei um IP estático. Editei o arquivo de configuração de rede com o seguinte comando:
Se o seu servidor estiver offline outro dispositivo pode assumir esse IP e vai dar uma dor de cabeça descobrir o problema. Então recomendo:
Separar uma faixa no seu roteador
No meu roteador alterei as configurações do DHCP para só usar a faixa entre 192.168.1.100 até 192.168.1.254.
Assim todos os IPs abaixo de 100 sempre estarão disponíveis para associação manual.
Fixar o IP no roteador, não no servidor
No servidor sempre deixo automático. Uso associação de IP para endereço MAC direto no roteador. Assim toda a informação fica centralizada e não acontece de configurar mais de um servidor no mesmo IP.
Claro, isso vale muito mais se você tem mais de um servidor
Muito bom cara, eu fiz isso mas para hospedar algumas aplicações e serviços em minha própria máquina, usei o cloudflare tunnel para vincular um domínio ao meu IP fixo e também poder acessar essas aplicações fora de casa, ainda pretendo fazer um post aqui no tabnews sobre, essa prática é chamada selfhosted e você pode saber mais sobre ela aqui: selfh.st