Sou adepto do pensamento de que a melhor forma de aprender é colocando a mão na massa. Por conta disso, e também por conta de algumas coincidências desses últimos dias, decidi aprender um pouco mais sobre como um servidor Apache funciona e hospedar o meu site. Mas antes, vamos a essas coincidências.

  1. Eu sempre quis ter um domínio para hospedar meus projetos, mas nunca cheguei a pagar por um efetivamente. Com o bloqueio do Twitter/X no Brasil, passei a utilizar o Bluesky. Dentro do Bluesky, uma forma de verificação do seu usuário é através de um domínio. Dessa forma, decidi comprar o dsre.dev e passar a ter meu site próprio finalmente.
  2. Nessas idas e vindas de redes sociais, tinha já experimentado também o Mastodon, que tem um conceito de descentralização ainda mais forte que o Bluesky. Passei a ler mais a respeito sobre self-hosting e achei interessante a ideia de ter um servidor próprio Apache.
  3. Por fim, uma coincidência dos algoritmos, acabei recebendo a recomendação do vídeo abaixo do canal do Sam Meech-Ward sobre como rodar um servidor próprio utilizando o RaspberryPi:

Sam Meech-Ward: Todo desenvolvedor precisa de um RaspberryPi.

Claramente isso foi um convite para juntar todo esse conhecimento com a vontade de ter um site próprio e colocar tudo em prática. Dessa forma, encontrei um kit básico de RaspberryPi Zero W na Amazon e decidi tentar. Um aspecto interessante é que esse modelo do RaspberryPi é diferente do modelo que o Sam utiliza no vídeo, pois é um dispositivo mais barato, mais simples, mas que ainda roda um sistema Raspbian, um SO baseado em Debian, em 32 bits.

Configuração adicional para o WiFi

Claro que tudo não iria funcionar de forma tão simples como os tutoriais ensinam. A instalação do Sistema Operacional no cartão microSD funcionou bem e o dispositivo ligou sem maiores problemas, no entanto, o WiFi não estava funcionando logo de início, como esperado, uma vez que a configuração do WiFi já tinha sido feita durante a instalação do Sistema Operacional no microSD. Mas logo aprendi o universo de configuração do raspberry by utilizando:

sudo raspi-config

raspiconfig

A configuração foi bem simples utilizando esse assistente de configuração, então não tive que me aventurar muito com edição manual de arquivos de configuração. Excelente! A próxima etapa foi instalar então um servidor Apache, para que eu pudesse hospedar o meu site na minha rede local. Com o WiFi funcionando e o acesso via SSH já configurado (via instalação do SO no microSD), consegui acessar meu RaspberryPi via SSH diretamente com:

Lembrando que o usuário e o hostname (pi) foram configurados durante a instalação do SO no microSD. Dessa forma, todas as etapas a seguir foram realizadas utilizando SSH.

Instalando e utilizando o Apache

Instalar o Apache em sistemas Debians é relativamente simples, bastando uma atualização dos pacotes seguido do comando de instalação utilizando o apt:

sudo apt update
sudo apt upgrade
sudo apt install apache2

Após a instalação, se tudo ocorreu corretamente, você pode acessar a página inicial padrão do Apache utilizando o endereço hostname.local em seu navegador em seu computador, que é algo semelhante a essa tela:

apache_default

Para ter seu próprio site no local dessa tela padrão, basta copiar os arquivos de seu website para /var/www/html.

Tópicos Adicionais sobre Hospedagem

Tive a oportunidade de explorar muitas outras coisas nesse processo, como por exemplo como utilizar uma ferramenta de criação de sites estáticos chamada Hugo para poder criar esse site, com diversos templates, utilizando markdown. Além disso, existe toda uma configuração do Apache que pode ser realizada para hospedar múltiplos sites. E por fim algumas ferramentas para monitorar os logs do Apache e aprender mais sobre as pessoas que estão visitando seu site, como por exemplo o GoAccess.

Cloudfare Tunnel: Conectar seu servidor com seu domínio

Finalmente, para disponibilizar seu website self-hosted para o público, existe uma forma mais simples e segura utilizando o serviço gratuito da Cloudfare chamado Cloudfare Tunnels. Você precisa habilitar seu domínio para utilizar a Cloudfare através da configuração de DNS, em seguida instalar um aplicativo da Cloudfare no seu RaspberryPi e, por fim, configurar a conexão no site da Cloudfare. O vídeo do Sam acima explica detalhadamente como esse processo funciona e todas as etapas para realizá-lo. Não tive nenhum problema durante a execução desses passos.

Impressões Pessoais e Próximos Passos

Esse foi um exercício muito interessante que me colocou em contato com diversas ferramentas que eu antes não conhecia.

É muito interessante que ao se aprender sobre desenvolvimento Web temos contato com muitas ferramentas de desenvolvimento mas pouco aprendemos sobre colocar esses sistemas em produção. Acredito que para ser um desenvolvedor fullstack isso acaba sendo um gargalo e tanto. No curso que tenho feito de pós-graduação e outros cursos de curta duração até tenho visto um pouco sobre github actions, como fazer deploy em docker containers, etc, mas entender do zero como instalar um servidor web e dispobilizar um site estático, indo da configuração do domínio e cuidados com segurança, não é um processo trivial. Felizmente existem ferramentas que facilitam e aceleram o processo, como Cloudfare tunnels, mas que duvido que serão gratuitas para sempre.

Utilizar um sistema gerador de sites estáticos também foi outra surpresa, comparado com a alternativa de se instalar o Wordpress junto ao servidor Apache. É uma experiência interessante conhecer todos o ecossistema de templates existentes, como configurar um template corretamente e como escrever artigos com extrema facilidade utilizando markdown. Essa foi a opção que escolhi para meu site pessoal, ao invés de desenvolvê-lo do zero.

Como próximos passos pretendo evoluir o conteúdo desde blog, trazendo guias de estatística e Ciência de Dados que tenho espalhados por outras plataformas e continuar compartilhando alguns pensamentos por aqui.

Obrigado por ler até o final e um abraço!