Executando verificação de segurança...
3
caio
8 min de leitura ·

Conheça o projeto gemini, um protocolo pensado em criar uma internet mais massa!

Olá mundo, aqui vou explicar o que é o projeto gemini(para quem não está lendo por ele) e como eu subi do zero um servidor gemini em apenas uma hora.
O objetivo aqui é mostrar uma outra solução que a comunidade FOSS encontrou para criar um pedaço de internet mais massa. Essa publicação está disponível na minha cápsula gemini e no tabnews(web http).

  • TabNews
  • Moang, minha cápsula gemini: gemini://moang.com.br/

Conheçendo o projeto

Sobre criar uma internet melhor

O TabNews foi criado pensando em criar um pedaço mais massa de internet, tirando toda a chatice desnecessária que a maioria dos sites hoje tem de pedir cookies, assinar newsletter, anúncios e outros pop-ups. Estamos em um site pelo conteúdo e essas coisas incomodam bastante.

Mas o TabNews a maioria já conhece, porém também já pensaram nisso e por isso criaram o protocolo gemini. Lançado em 2019, e inspirado no gopher, o protocolo gemini é uma solução um pouco mais extrema para esses problemas, pois a ideia é ser uma alternativa ao HTTP em que o conteúdo apresentado é praticamente texto puro e sem JavaScript ou CSS! A única estilização que dá de fazer é uma espécie de markdown mais simples que criaram só para as páginas da rede.

Como podemos usar isso?

Eu sei que de primeira parece ridículo essa ideia, como que podemos usar a internet sem toda a evolução que o JS trouxe para nossas vidas? e isso faz mais sentido do que parece. No próprio tabnews a proposta é justamente focar no conteúdo e minimizar o uso de JS no lado do cliente então quem está lendo no TN já tem boa parte dessa experiência. Basta experimentar um cliente do tabnews para terminal que isso fica mais claro, geralmente o que interessa é o conteúdo e nem sempre vamos tomar tempo para colaborar com a plataforma comentando, postando ou trocando tabcoins. Pelo menos enquanto o sistema de anúncios dos usuários não é implementado, o que interessa aqui é o texto.

Mas ainda sim, o gemini não é 100% texto, os criadores fizeram um formato chamado de "gemtext" que é parecido com markdown e permite certas estilizações simples no texto. Para imagens alguns clientes tem uma prévisualização, mas para vídeos você terá que realmente reproduzir utilizando uma aplicação separada. A ideia é que cada aplicação tem sua responsabilidade, logo seu navegador de internet não deveria ser um reprodutor de vídeo, um editor de texto e um cliente de e-mail ao mesmo tempo. Faz mais sentido deixar essas funções em aplicações separadas para que cada uma possa se preoculpar com suas responsabilidades e possibilidades.

Isso é um tema que ainda gera um pouco de discusão na comunidade, mas é impossível negar que essa proposta faz sentido já que a ideia é fugir das "desvantagens" do JS. De qualquer forma essa é a proposta do projeto e alguns clientes tentam facilitar como mencionei antes.

Estou curioso(a), como posso testar isso?

Existem vários clientes disponíveis e até vários guias de como implementar um cliente com poucas linhas de código, vou deixar aqui o link de um cliente gráfico e outro CLI para vocês experimentarem. Lembrando que a experiência "completa" seria com a versão cli já que foca mais na questão do texto, mas não tem nenhum desincentivo de utilizar a versão gráfica.

Tendo o cliente basta acessar uma URL que, diferente do http, começa como gemini://
Para testar você pode acessar a página oficial do projeto e também minha cápsula(os sites que usam o protocolo gemini são chamados de cápsulas) que você pode acessar pelo link do início ou abaixo.

  • Projeto gemini: gemini://gemini.circumlunar.space/
  • Minha cápsula: gemini://moang.net.br/

Na minha cápsula é só um blog simples que posto algumas coisas que coloco no tabnews e outras coisas. Essas cápsulas revivem o que era comum na internet antigamente nos blogs pessoais.

Como fazer seu servidor/cápsula

Agora vou explicar como eu subi do zero, desde a configuração do servidor até a configuração do domínio. Para quem está lendo já em um cliente gemini essa é a parte mais interessante. Lembrando que não vou mostrar o passo a passo de cada comando, apenas explicar o que fiz mas com detalhes.

Ambiente de desenvolvimento

A primeira coisa que fiz foi criar um repositório git e escolher um software para servir a cápsula, que não é feito da mesma forma do HTTP usando apache ou nginx por exemplo. O software que esquelhi foi o agate, que é feito em rust e esse foi meu único critério para escolher mesmo já que minha é minha linguagem de desenvolvimento principal hoje. Uma vantagem que achei dessa opção é que é extremamente simples para abrir o servidor, basta usar apenas um comando e já está funcionando.

O repositório serviu apenas para eu poder organizar as postagens e tranferir de forma fácil os arquivos para o servidor. Não tem nada de configuração para ser feito.

Após instalar o agate vamos testar localmente. Basta seguir esses passos:

  • Crie uma pasta chamada "content"
  • Dentro crie o arquivo index.gmi, essa é a home do site
  • Preencha com algum conteúdo usando gemtext ou só texto
  • No terminal e na pasta acima do content, não dentro, rode o comando abaixo
agate --hostname localhost --addr 0.0.0.0:1965

Esses parâmetros do comando só precisam ser usados da primeira vez, depois você pode usar o comando "agate" sozinho mesmo.

Agora abra seu cliente gemini de preferência e coloque a URL gemini://localhost para visualizar sua cápsula localmente. Se você conseguiu até aqui parabéns! Você já ganhou muito conhecimento valioso. Agora vamos subir isso em um servidor real na internet!

Configurando o servidor

Uma das coisas mais legais de usar o gemini é que tira um pouco daquele receio de publicar um site e ficar sem ideia ou achar que não está bom o suficiente. Isso pode empacar um momento de estudo em que na verdade a intenção era apenas aprender a subir um site, mas como o gemini é simples no conteúdo não temos essa barreira e partimos mais diretamente para a parte técnica e ganhamos um certo conhecimento.

Acima configuramos tudo necessário para ter o servidor funcionando(sim, aquilo é tudo mesmo!), agora vamos fazer exatamente isso mas em um seridor público aberto para a internet. Você pode escolher o serviço que preferir, no meu caso eu escolhi pegar um servidor na linode pois usei um cupom que o Diolinux tem de 100 dolares para usar durante 60 dias. Escolhi o famoso nanode de 1GB pois é suficiente para um servidor simples com poucos acessos e ainda usando o gemini que é um protocolo bem mais simples e leve que o http.

Para configurar o sevidor fiz de um jeito talvez meio gambiarra mas é simples e funciona bem, então foquei em fazer funcionar e talvez depois posso automatizar melhor o processo. Acessei o servidor e clonei o repositório do github, intalei o rust e agate e rodei o serviço para testar. Acessei pelo IP público e estava funcionando! No caso da linode eles disponibilizam um DNS reverso que você pode usar para já testar com um hostname naquele comando do agate.

Com isso funcionando tive que criar um serviço no sistema para que eu não precise sempre acessar o servidor e rodar o comando para servir o site, a gente precisa que ele seja um serviço do sistema que inicia e reinicia sozinho e fique rodando nos bastidores do sistema.

No meu caso eu estou usando o Debian GNU/Linux 11 então controlo os serviços usando o systemd, que é padrão das distribuições linux hoje em dia. Para criar o serviço basta criar um arquivo .service na pasta /etc/systemd/systems com o nome que preferir, esse será o nome do serviço.

Dentro desse arquivo você deve colocar as configurações para especificar como quer rodar o serviço. No geral é parecido, vou colocar um exemplo abaixo.

[Unit]
Description=Server agate
After=network.target
[Service]
WorkingDirectory=/root/my-gemini-blog
ExecStart=/root/.cargo/bin/agate
Type=exec
[Install]
WantedBy=default.target

Depois basta rodar "systemctl daemon-reload" para o sistema reconhecer esse novo serviço e então iniciar ele e habilitar para iniciar junto do sistema

systemctl enable agate.service
systemctl start agate.service

Com isso o servidor já está 98% pronto! falta a gente configurar o domínio da cápsula.

Configurando o domínio(DNS)

Aqui é bem simples e vou ser breve, pois o Filipe já fez um vídeo incrível explicando como fazer isso, porém na vercel. No geral é igual em qualquer plataforma de hospedagem então o vídeo é válido, até porque eu usei ele de referência para fazer na linode.

Tive que comprar o domínio golog.net.br, esperar ele ser propagado por uma certa parte do mundo e então fiz a configuração do dns utilizando o dns da linode para que o registro.br possa apontar o domínio para o meu servidor. A única coisa diferente que fiz é que no caso da linode precisamos criar um domínio que aponte para o servidor que criamos, que é simples e intuitivo acessando a página de "Domínios" na plataforma.

Agora basta esperar o domínio ser divulgado e configurar na linode o DNS reverso. Depois de ter o domínio configurado você deve voltar ao servidor e:

  • Parar o serviço do agate
  • Apagar a pasta .certificates do seu projeto
  • Rodar o agate manualmente, dessa vez colocando o seu domínio na opção --hostname
  • Reiniciar o serviço do agate criado anteriormente

Com isso novos certificados serão gerados e seu domínio já será acessível para todos! parabéns para você que acompanhou até aqui.

Conclusão

Com a mesma ideia do tabnews, o projeto gemini tem como objetivo criar um espaço melhor de se consumir na internet com uma proposta diferente, sem querer substituir a web HTTP.

Para colocar uma cápsula(site) no ar é bem simples e requer pouco conhecimento técnico. Nessa publicação deixei de falar sobre a questão do SSL no gemini, que por convenção é auto-assinado, pois vejo como um assunto separado já que o objetivo hoje é apresentar o projeto.

Espero que a ideia do projeto tenha ficado clara e que minha explicação do servidor possa ter te ajudado!

Edit: Achei um outro post no tabnews que complementa esse de forma mais técnica: link

Edit 2: Troquei os links e alguns textos do post para referenciar meu novo blog, que antigamente era o golog.net.br e hoje é o moang.com.br que tem uma proposta um pouco diferente.

Carregando publicação patrocinada...
2

Muito interessante conhecer uma nova tecnologia, mas eu pessoalmente não sei se seria útil nesse caso do Tabnews:

No próprio tabnews a proposta é justamente focar no conteúdo e minimizar o uso de JS no lado do cliente então quem está lendo no TN já tem boa parte dessa experiência.

Sinceramente, eu acho o Tabnews não muito agradavel visualmente, pro porte dele. E entendo que deve ser porque tentaram criar uma mesma experiência de um site de 1990 ou 2000, época dos fóruns e tals.

Porém, acaba ocorrendo um problema né, a UI não é feita apenas para Ads, ela é feita para pessoas mais leigas terem acesso.

Imagine usar Aplicativos ou sites cotidianos com a mesma UI de 2000?

Até daria para usar, mas as dificuldades seriam maiores. Se podemos hoje usar tecnologias que permitam um melhor entendimento para o usuário, acredito que devemos usar.

1

Thiago, ótimo ponto e entendo esse questionamento, parece que estamos voltando no tempo e isso pode ser preocupante né?

No tabnews, na rede gemini e em outros projetos assim geralmente não crescem tanto justamente por esse receio dos usuários. Eu sei bem como é sentir essa estranhesa, hoje acho normal pois entendo e apoio o movimento.

Existe todo um movimento dentro da comunidade open source para a criação de softwares "suckless", que tem a proposta de serem simples e direto ao ponto. Como mencionei no post, os navegadores de internet não "deveriam" reproduzir vídeos, mostrar imagens ou até minerar criptomoedas(isso se formos seguir a filosofia "suckless"), pois existe toda uma equipe por trás do vlc, por exemplo, que foca em criar um bom reprodutor de vídeo, então um navegador de internet deveria focar em renderizar o HTML/CSS/JS e nada além disso.

Pensando nisso foram criados vários projetos e o melhor exemplo é do suckless.org. Eu pessoalmente não me incomodo em utilizar esses softwares, sou usuário de arch linux e navego a rede gemini frequentemente, mas entendo que é estranho ver pessoas usando esse tipo de software. A comunidade IRC ainda é grande hoje em dia por incrível que pareça!

Parece que tudo isso é uma trava que algumas pessoas têm ou até mesmo um regresso, mas geralmente escolhem isso para evitar de ser "controlado" pela web(não seguir recomendações de algorítmos e ir atrás apenas do que você procura), por privacidade ou muitas vezes por simplesmente achar interessante.

De qualquer forma, concordo que algo na web http como o tabnews poderia aproveitar mais do CSS para melhorar a experiência dos usuários, eu pessoalmente gosto da interface do medium e vejo como completamente possível implementar algo parecido no tabnews. Mas pelo que acompanho do Filipe eles vão manter assim pois existe a API então acaba sobrando para a gente implementar outra interface caso não gostemos dessa.

0
1

Infelizmente não dei continuidade!

Criei como uma forma de estudar, e acabei focando em outras coisas. Pretendo revitalizar ele em breve, junto de um blog na web http que quero fazer que vai agregar tudo com activity pub e outras coisas.

2
1
1

Uaaaaau, eu não sabia que tinha como ser simples assim! Eu já vi uma pessoa fazendo sem usar todo um servidor de mastodon só para o blog, mas envolvia várias azure functions, e mô complexidade. Mas o dele também permitia você fazer comentários no post do mastodon dele, e era replicado no post do blog, então não era uma complexidade atoa. Esse jeito é uma maneira bem legal de poder receber notificações de posts diretamente no mastodon!

1

Uma atualização: refiz do zero e criei um novo blog, que dessa vez terá também seu conteúdo disponível por uma API além do gemini. Futuramente devo integrar com outras coisas, falei um pouco no primeiro post. O endereço é moang.com.br tanto para HTTPS quanto para o gemini.

0
1

Puts, acabei de testar e está acessando... Por enquanto está disponível apenas pelo gemini, ainda não fiz o frontend web http, tem apenas a API funcionando que ainda vou documentar.

2

Ah sim! testei foi no http mesmo. Mas no gemini abriu e tá super bonito! Me gerou até umas dúvidas, o seu blog está com um tema roxo pra mim, o gemini tem como passar uma palheta de cores agora?? E também como se fosse uma logo até. Vou dar uma pesquisada nesse cliente aqui que eu fiquei bem confuso kkkkk

1

Pior que não escolhi a cor não, provavelmente é algo no seu cliente(eu teria escolhido laranja se fosse o caso kkk). Uso no celular o "Buran" que é gráfico e escolhe sozinho uma cor para mostrar de fundo, deve ter sido isso que aconteceu no seu também. No PC uso o Amfora que é uma versão CLI.

1