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.