Executando verificação de segurança...
24

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 "[email protected]"

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 [email protected]

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.

Carregando publicação patrocinada...
3

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

2
3

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

1
3

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.

1
3

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.

1