💾 Archived View for gemini.ctrl-c.club › ~luisddm › 2021-05-03-proxy-gemini.gmi captured on 2024-02-05 at 10:19:23. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2021-12-03)
-=-=-=-=-=-=-
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:
- 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
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í](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.
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.
Podemos generar nuestro propio CSS personalizado para el proxy y pasárselo a Kineto con la opicón [-s style.css].