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.
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.
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).
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.
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.
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.
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.
Podemos generar nuestro propio CSS personalizado para el proxy y pasárselo a Kineto con la opicón [-s style.css].
text/gemini
This content has been proxied by September (ba2dc).