-- Leo's gemini proxy

-- Connecting to gmi.dioniso.com.br:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

Hospedar um Servidor Gemini em casa


Neste HOWTO mostrarei as etapas para hospedagem de um servidor Gemini enquanto se tem a Vivo como Internet Service Provider em sua casa. Deve funcionar para outros ISPs, diferindo na parte de configuração da página do roteador.


Este tutorial não cobre a configuração do firewall. Saiba mais:

ufw


---


Visão Geral


[0] Requisitos para este tutorial

[1] Configuração do DDNS

[2] Configuração na página do roteador da Vivo

[3] Preparação do ambiente


---


Requisitos para este tutorial


Computador com sistema operacional GNU/Linux, com systemd e conectividade à Internet

Endereço IP local físico (servidor)

Domínio (opcional)


Configuração do DDNS (Dynamic Domain Name System)


Com um DDNS você pode associar um endereço IP dinâmico a um domínio.


Uso o DuckDNS para este fim:

duckdns


1. Na página principal do DuckDNS, depois de ter logado, aparece domínios para registro. O DuckDNS possibilita a criação de 5 domínios.


Os domínios vão ser como: subdomínio.duckdns.org


2. Enfim, escolha qualquer palavra existente ou não existente para substituir o 'subdomínio' - desde que esteja disponível para uso. Após a escolha, clique em 'add domain'


3. Não precisamos associar um endereço IP até então - vamos criar um trabalho para o Cron mais para frente do tutorial que vai atribuir o endereço IP ao domínio de maneira constante.


Configuração na página do roteador da Vivo


1. Entre no endereço do seu roteador, comumente: 192.168.15.1


2. Coloque as credenciais e logue - vide informações em baixo do roteador para credenciais.


3. Em Rede Local na seção Redirecionar Portas crie uma regra como seguinte:

Nome da Regra: Gemini

Protocolo: TCP

Porta Externa: 1965

Porta Interna: 1965

IP Externo: <vazio>

IP Interno: <ip-local-server>


4. Clique em ADICIONAR


Preparação do ambiente


gemini


Método de configuração do ambiente Gemini no servidor conforme o tutorial presente em LandChad.net: (com algumas alterações)


Criar um usuário e logar com ele.


# useradd -m -s /bin/bash gemini
# su -l gemini

Criar a estrutura de diretórios.


$ mkdir -p ~/capsule/{content,certificate,server}

Entrar na pasta de certificados e criar um certificado. Note: alterar example.duckdns.org para o seu domínio (use o DNS a DDNS, se tiver).


$ cd ~/capsule/certificate
$ openssl req -new -subj "/CN=example.duckdns.org" -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -days 3650 -nodes -out cert.pem -keyout key.pem

Nesta etapa: o uso de software de hospedagem Gemini. No exemplo é usado o Agate, mas pode escolher outros:

servers


Entrar na pasta server, baixar o binário do Agate (no exemplo: x86_64 v3.3.6) empacotado, descomprimir, alterar o nome do arquivo de saída e dar permissão de execução ao mesmo.


$ cd ~/capsule/server
$ wget https://github.com/mbrubeck/agate/releases/download/v3.3.6/agate.x86_64-unknown-linux-gnu.gz
$ gunzip agate.x86_64-unknown-linux-gnu.gz
$ mv agate.x86_64-unknown-linux-gnu agate
$ chmod u+x agate

Entrar na pasta capsule e criar um arquivo chamado agate.service, esse arquivo está instruindo a iniciação do servidor Agate - como serviço do systemd.


$ cd ~/capsule
$ cat << EOF > agate.service
[Unit]
Description=agate
After=network.target

[Service]
User=gemini
Type=simple
ExecStart=/home/gemini/capsule/server/agate --content /home/gemini/capsule/content --certs /home/gemini/capsule/certificate --hostname example.duckdns.org

[Install]
WantedBy=default.target
EOF

Alterar example.duckdns.org para seu domínio.


$ sed -i s/example.duckdns.org/foobar.duckdns.org/g agate.service

Retornar ao ~ (home) e criar pasta para o DuckDNS. 'ls' para mostrar.


$ cd ~
$ mkdir duckdns
$ ls
capsule  duckdns

Entrar na pasta duckdns e criar um script para atualização do endereço IP. Substitua as variáveis subDomain e token para os seus valores respectivos com algum editor de texto: o token é o mostrado na página principal do DuckDNS, depois de ter logado, e o subDomain é subdomínio que você configurou. Depois de tudo, dê uma permissão razoável ao arquivo (700).


$ cd duckdns
$ cat << EOF > duck.sh
#!/bin/sh
# update ip address

subDomain=""
token=""

echo url="https://www.duckdns.org/update?domains=${subDomain}&token=${token}&ip=" | curl -k -o ~/duckdns/duck.log -K -
EOF
$ chmod 700 duck.sh

Criar um trabalho ao Cron para cada 5 minutos na tabela do usuário gemini e retornar como root.


$ crontab -e
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
$ exit

Criar um link simbólico do serviço Agate na pasta que aloca serviços do systemd e iniciar/habilitar o Agate. Também permitir tráfico pela porta 1965.


# ln -s /home/gemini/capsule/agate.service /etc/systemd/system/agate.service
# systemctl enable --now agate
# ufw allow 1965

A pasta ~/capsule/content do usuário gemini é o conteúdo fornecido pela sua cápsula.

Para começar, crie um arquivo index.gmi nesta pasta, isto é a página principal.


Para saber sobre a formatação de arquivo Gemini:

introdução rápida ao gemtext

-- Response ended

-- Page fetched on Fri May 10 01:04:13 2024