Do Raspberry pi 4 ao World Wide Web: Um guia para hospedar seu próprio site

Do Raspberry pi 4 ao World Wide Web: Um guia para hospedar seu próprio site

Nos últimos anos, a tecnologia vem se desenvolvendo rapidamente e se tornando cada vez mais acessível. Uma das inovações que ganhou popularidade é o Raspberry Pi 4, um computador de placa única de baixo custo, mas com desempenho surpreendente. Com este dispositivo, é possível criar desde simples projetos de programação e automação até projetos mais profissionais como robótica avançada e hospedagem de sites.

Neste artigo, exploraremos como usar o Raspberry Pi 4 para hospedar seu próprio site na internet, contando, inclusive, com SSL grátis, para que você possa compartilhar seu conteúdo com o mundo de forma segura!

O que é o Raspberry Pi?

Raspberry Pi são computadores de baixo custo criados pela Raspberry Pi Foundation, uma organização de caridade sediada no Reino Unido. Ele foi criado com o objetivo de promover o ensino da ciência da computação e da programação, especialmente em escolas e países em desenvolvimento. Conhecido por ser uma plataforma versátil, ele possibilita a criação de projetos de automação residencial, media centers, servidores, internet das coisas (IoT), drones, videogames retro e muito mais.

Eles medem aproximadamente o tamanho de um cartão de crédito e possuem diferentes versões, dentre elas se destacam o pico, o zero e o modelo B4. O pico é ideal para aplicações de IoT, possui um processador RP2040 dual core, 264 kB de RAM e até 16 MB de memória flash. A versão Raspberry Pi Zero 2 roda com o sistema operacional linux, seu processador é um RP3A0 quad-core 64-bit ARM, possui 512 MB de memória SDRAM e é ideal para aplicações que requerem um pouco mais de memória e processamento, como robôs ou drones com pequenos modelos de IA. Por fim, a versão que utilizaremos para desenvolver o projeto, que é o Raspberry Pi 4 modelo B, possui um processador Broadcom BCM2711 quad-core 64-bit ARM, além de possuir opções com memória RAM de 2 GB, 4 GB e 8GB, este modelo também roda linux e é indicado para aplicações onde você precisa de um computador de propósito geral, ainda de baixo custo, mas que seja capaz de lidar com demandas maiores, como é o caso de rodar um sistema operacional e hospedar um site.

Preparando o ambiente

Existe um sistema operacional padrão criado para usar no Raspberry Pi 4 baseado no Linux, mas você também pode instalar outras distribuições Linux, como o ubuntu que é o que estou utilizando. Na página do ubuntu você pode baixar a versão mais atualizada do sistema e com o software Raspberry Pi Imager, você cria a imagem do sistema dentro do cartão de memória do seu Raspberry.

Depois de terminar toda a instalação do sistema operacional, precisamos de um serviço rodando na sua máquina local para expor ele à internet, caso ainda não possua um site, pode conferir este outro artigo onde explico como usar o React e Tailwind para o desenvolvimento web. Primeiro, precisamos ter o node e npm instalado no linux, para isso use os seguintes comandos:

sudo apt-get install nodejs

sudo apt-get install npm

Em seguida, você cria o projeto com o comando npm create vite@latest, navega até a pasta do projeto, roda o comando npm install e por fim npm run dev. Com isso, já teremos um site rodando na máquina local.

Configurando o DNS

Para acessar um site na internet, o navegador precisa saber o endereço ip e a porta que está aberta naquele endereço. Mas com o propósito de facilitar as coisas, foi criado o chamado Domain Name System (DNS) que, fazendo um paralelo, funciona como as antigas listas telefônicas para a internet, criando um mapeamento entre URLS como “www.google.com” e o IP da máquina onde o site está hospedado, isso significa que, quando acessamos um site no navegador com o DNS, uma requisição será feita para os chamados servidores de nomes para obter o endereço IP do site que você está acessando.

O registro de um domínio é o ponto de partida para tornar um site acessível na internet. Empresas registradoras acreditadas pela ICANN, como Google Domains, GoDaddy e Bluehost, oferecem serviços que permitem aos indivíduos e empresas registrar um nome de domínio exclusivo. Esse nome de domínio é então associado a um endereço IP, permitindo que os usuários acessem o site usando o nome de domínio em vez de digitar o endereço IP numérico. Então, o primeiro passo é acessar o site de uma dessas empresas e comprar o seu domínio, escolhendo um nome que ainda não foi registrado. Com isso, você poderá gerenciar através do painel de controle da sua conta na empresa os servidores de nomes e encaminhamento, conforme ilustrado na imagem abaixo:


Configurando o túnel

Fazer um proxy reverso para expor portas da sua rede local para a internet cria brechas de segurança no firewall, o que pode deixar sua rede vulnerável a ataques como de força bruta, tentativas de invasão e exploração de vulnerabilidades conhecidas. Então, em vez disso, a melhor opção é criar um túnel através de outro serviço. A configuração do túnel é uma prática crucial para garantir a segurança das comunicações entre o cliente e o servidor, pois estabelece uma conexão segura e criptografada, tornando mais difícil para invasores interceptar ou manipular o tráfego.

O próximo passo, depois de adquirir o DNS, é criar uma conta na Cloudflare. Essa empresa possui um serviço de túneis na nuvem gratuito que permite que você possa acessar de forma segura os recursos da sua rede local de qualquer lugar. Após criar a conta, na primeira página na aba sites, clique em adicionar site, eles vão solicitar que você informe o nome de domínio (DNS), em seguida vai aparecer um painel para selecionar o plano, você escolhe o gratuito e clica em continuar. Feito isso, vai aparecer os nomes de servidores, você precisa copiá-los e adicionar no serviço que você escolheu para registrar seu DNS.

Depois abra o terminal e digite o seguinte comando para instalar o clodflared:

wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb && sudo dpkg -i cloudflared-linux-amd64.deb

Esse comando vai permitir fazer as configurações da cloudflare através da linha de comando. Em seguida, execute o código abaixo no terminal para fazer o login:

cloudflared tunnel login

Será aberta uma página no navegador, onde você deve selecionar o seu DNS. Feito isso, clique em autorizar para que a cloudflare instale um certificado permitindo que sua máquina crie um túnel. As credenciais estarão em um arquivo no seguinte caminho:

/home/seu_usuario/.cloudflared/cert.pem

Agora crie um túnel com o seguinte comando:

clodflared tunnel create tunnel_name

Ao executar, um arquivo .json será gerado na mesma pasta onde o certificado da máquina está, este arquivo será composto por um código de letras e números separados por traço, esse é o uuid do túnel. Navegue até a pasta onde os arquivos foram instalados e crie um novo arquivo chamado “config.yml”:

cd /home/seu_usuario/.cloudflared/

touch config.yml

Dentro deste arquivo serão colocadas as configurações do túnel, sendo primeiro o uuid, depois as credenciais, seguido do ingresso que será composto pelo hostname (seu DNS), o serviço (seu ip + porta), a configuração noTLSVerify como true (o que vai permitir que o certificado não seja verificado, você pode alterar essa configuração posteriormente e apresentar outro certificado) e o serviço que será apresentado em caso de erro:

tunnel: uuid_do_seu_tunnel
credentials-file: /home/seu_usuario/.cloudflared/uuid_do_seu_tunnel.json
ingress:
  - hostname: www.seu_dominio.com
    service: https://localhost:5173
    originRequest:
      noTLSVerify: true
  - service: http_status:404


O próximo passo é rotear o seu DNS para o túnel criado, o comando é o seguinte:

cloudflared tunnel route dns tunnel_name seu_dominio.com

Por fim, rode o comando para ativar o túnel:

cloudflared tunnel run tunnel_name

Configurando SSL

O SSL significa camada de soquete seguro (do inglês, Secure Sockets Layer), é um protocolo de segurança que fornece criptografia e autenticação para as comunicações na internet. Ele é utilizado para garantir que a conexão entre o cliente e o servidor seja segura, dessa forma, os dados transmitidos entre eles não podem ser facilmente lidos ou alterados por terceiros mal-intencionados, que podem se colocar entre o cliente e o servidor para interceptar os dados. Com a configuração do SSL em um servidor o tráfego de informações sensíveis como senhas, números de cartão de crédito e outros dados pessoais estão protegidos por criptografia.

Para configurar o SSL, primeiro precisamos gerar o certificado, existem diversas ferramentas online e gratuitas para isso, como por exemplo o sslforfree. Você digita o nome do seu site e a ferramenta vai devolver o certificado e uma chave que você deve baixar e colocar na pasta do seu projeto, para facilitar a configuração, você pode alterar o nome dos arquivos para “localhost.key” e “localhost.crt”, por exemplo. Depois basta adicionar o certificado e a chave no arquivo vite.config.js:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

// https://vitejs.dev/config/
export default defineConfig({
  server: {
    https:  {
      key: './localhost.key',
      cert: './localhost.crt',
    }
  },
  plugins: [react()],
})

Conclusão

A hospedagem de sites por meio do Raspberry Pi 4 oferece uma abordagem acessível e personalizável para compartilhar conteúdo online. No entanto, a segurança e a proteção dos dados dos usuários são fatores cruciais a serem considerados. A criação de túneis com SSL através da plataforma Cloudflare emerge como uma solução eficaz, garantindo não apenas a criptografia das comunicações entre o servidor e o cliente, mas também uma camada adicional de segurança por meio da proteção contra ameaças e da autenticação de identidade. Ao aliar a praticidade do Raspberry Pi 4 com a robustez das medidas de segurança implementadas por meio da Cloudflare, é possível construir uma presença online confiável e resguardada, o que beneficia tanto no ranqueamento do seu site nas buscas do google quanto os visitantes do site que terão seus dados protegidos.

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.