Kineto

Kineto es un proxy de HTTP a Gemini, una pasarela que permite visualizar sitios Gemini en cualquier navegador web, sin necesidad de un navegador específico.

=> Repositorio de Kineto

En principio, Kineto está diseñado para proveer servicio a un único dominio, es decir, para hacer nuestro sitio Gemini disponible a través de HTTP (o cualquier otro, el caso es que hay que especificar un dominio al iniciarlo) pero se puede usar para navegar por cualquier otro sitio Gemini.

Hay múltiples proxies ya desplegados por ahí (por ejemplo el de flounder.online, pero con este manual aprenderemos a desplegar el nuestro.

=> Proxy de flounder.online

Para este manual, vamos a suponer que tenemos un VPS con un usuario "debian", un dominio "domain.com" y un subdominio "gemini.domain.com" apuntando al mismo y una cápsula Gemini ya funcionando en gemini://gemini.domain.com (en el puerto por defecto 1965).

Instalación de Go

Kineto está escrito en Go, y por tanto necesitaremos esta plataforma para compilarlo.

Hay varias formas de instalar Go:

=> Manual de la página oficial de Go | Utilidad g

Optamos preferentemente por la tercera opción, que sabemos que funciona correctamente y nos da la mayor flexibilidad.

Compilación de Kineto

Una vez que hayamos comprobado que Go está instalado y funcionando, clonamos el repositorio de Kineto. Podemos clonarlo en cualquier sitio, pero para seguir este manual lo haremos en nuestro directorio /home/debian

git clone https://git.sr.ht/~sircmpwn/kineto

Accedemos al directorio kineto y compilamos:

go build

Si todo va bien, se generará un ejecutable kineto cuya ruta absoluta será /home/debian/kineto/kineto. Conocer esta ruta será necesario para el siguiente paso.

Arranque al inicio

Usaremos systemd para convertir kineto en un demonio e inicializarlo al arrancar el sistema. Creamos el archivo /etc/systemd/user/kineto.service con el siguiente contenido:

[Unit]
Description=Kineto Server

[Service]
Type=simple
Restart=always
ExecStart=/home/debian/kineto/kineto \
    -b 0.0.0.0:1966 \
    gemini://gemini.domain.com

[Install]
WantedBy=default.target

Habilitamos y arrancamos el nuevo servicio:

sudo systemctl daemon-reload
sudo systemctl enable kineto.service
sudo systemctl start kineto.service

Más info sobre systemd aquí.

Con estos parámetros, hemos configurado que el proxy se arranque en el puerto 1966 (por poner uno, puede ser cualquiera) y que la página de inicio del proxy sea nuestra propia cápsula.

Con esto, podemos ir con un navegador web a http://domain.com:1966 y ya podremos ver nuestra caṕsula a través del proxy.

Nginx como proxy inverso

Recordar el puerto 1966 de nuestro VPS puede ser un poco engorroso. Por eso es más práctico utilizar un subdominio (en este caso gemini.domain.com), el mismo que usa la propia cápsula, pero en este caso en el puerto HTTP.

Ya de paso, aprovechamos para añadir un certificado para poder entrar por HTTPS (puerto 443) en lugar de HTTP. Añadiremos entonces dos reglas al nginx:

Lo primero que hacemos es instalar certbot con el sistema de paquetes de nuestra distribución, y una vez instalado generamos un nuevo certificado para nuestro subdominio:

sudo apt install certbot
sudo certbot certonly

Para demostrar que el certificado se está pidiendo desde nuestro servidor, puede que necesitemos tener el puerto 80 libre, con lo cual tendremos que tumbar el servicio nginx si es que lo tenemos instalado de antes.

Una vez generado el certificado, si no tenemos instalado el nginx, lo instalamos con el sistema de paquetes:

sudo apt install nginx

Creamos un archivo /etc/nginx/conf.d/gemini.conf con este contenido:

server {
    listen 80;

    server_name gemini.domain.com;

    return 301 https://gemini.domain.com$request_uri;
}

server {
    listen 443 ssl;

    server_name gemini.domain.com;

    ssl_certificate     /etc/letsencrypt/live/gemini.domain.com/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/gemini.domain.com/privkey.pem;
    ssl_protocols       TLSv1.3;

    location / {
        proxy_pass http://127.0.0.1:1966;
    }
}

Reiniciamos el servicio nginx

sudo systemctl restart nginx

y ya podemos ver el proxy accediendo a https://gemini.domain.com.

Personalización del estilo

Podemos generar nuestro propio CSS personalizado para el proxy y pasárselo a Kineto con la opicón [-s style.css].

Proxy Information
Original URL
gemini://gemini.ctrl-c.club/~luisddm/2021-05-03-proxy-gemini.gmi
Status Code
Success (20)
Meta
text/gemini
Capsule Response Time
428.526368 milliseconds
Gemini-to-HTML Time
0.76737 milliseconds

This content has been proxied by September (ba2dc).