💾 Archived View for gemini.ctrl-c.club › ~luisddm › 2021-05-03-proxy-gemini.gmi captured on 2023-09-28 at 16:17:05. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2021-12-03)

-=-=-=-=-=-=-

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:

- Instalar la versión que viene con nuestra distribución de Linux usando el gestor de paquetes. Si estamos en una Debian o una Ubuntu, probablemente será una versión bastante obsoleta, pero puede funcionar.

- Instalar la versión más reciente de Go mediante el manual de su página oficial.

- Instalar cualquier versión de Go, o incluso varias simultáneamente, usando la utilidad g.

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í](https://wiki.debian.org/systemd/Services).

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](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:

- El puerto 80 (HTTP) lo redirigiremos al puerto 443 (HTTPS).

- El puerto 443 lo desviaremos a su vez al 1966 (donde está el proxy), pero con el añadido del cifrado con el certificado.

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].