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.

Muito obrigado! A jornada do aprendizado é árdua, mas a gente vai buscando novos conhecimentos pouco a pouco.

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.

Obrigado pelo comentário! Acredito que quando você testar em seu notebook, você vai lembrar desse post kkk

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

Obrigado pela contribuição! Essa informação foi muito valiosa, vou realizar essas mudanças.

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

Obrigado pelas dicas! Esse vai ser o meu próximo desafio. Aguardando ansiosamente pelo seu post.