Creando tu propia cápsula de Gemini

Read in English

Me gustaría compartir contigo el proceso para crear tu propia cápsula del protocolo Gemini. Usaré Agate, un servidor de Gemini escrito en Rust recomendado por la comunidad. Por otro lado, nos apoyaremos en Docker para facilitar la instalación y configuración. Por lo tanto, necesitarás tener Docker instalado en tu sistema antes de continuar. ¿Empezamos?

Empezaremos creando un archivo llamado Dockerfile. Lo usaremos para compilar Agate y crear una imagen de Docker.

FROM rust:alpine AS builder
RUN wget -O source.tar.gz $(wget -qO- https://api.github.com/repos/mbrubeck/agate/releases/latest | sed -nE 's/^.*"tarball_url"\s*:\s*"([^"]+)".*$/\1/p') && tar xzf source.tar.gz && \
    mv mbrubeck-agate-* /agate

WORKDIR /agate
RUN apk --no-cache add libc-dev && \
    cargo install --path .

FROM alpine:latest
COPY --from=builder /usr/local/cargo/bin/agate /usr/bin/agate
WORKDIR /app

Es una imagen multi etapa de Docker.

  1. Descarga la imagen de Rust con Alpine.
  2. Baja el código fuente de Agate.
  3. Compila Agate con cargo, el gestor de paquetes de Rust.
  4. Crea una imagen de Alpine con Agate instalado y define /app como directorio de trabajo. Este último detalle es importante: Agate guarda los certificados TLS en .certificates, relativo al directorio de trabajo, y así podremos persistirlos con un volumen.

Con la imagen definida, crearemos un archivo llamado compose.yml para configurar el servicio de Agate.

services:

  agate:
    build: .
    restart: "always"
    ports:
      - "1965:1965"
    command: >
      agate --content /gmi/
      --hostname tu-dominio.com
      --addr [::]:1965
      --addr 0.0.0.0:1965
      --lang es-ES
      --skip-port-check
    volumes:
      - ./gmi:/gmi
      - ./gmi/.certificates:/app/.certificates

En este archivo, definimos un servicio llamado agate que usa la imagen que hemos creado anteriormente.

  1. restart: "always": Reinicia el servicio si se detiene.
  2. ports: Mapea el puerto 1965 del contenedor al puerto 1965 del host. Es el puerto por defecto del protocolo Gemini.
  3. command: Configura Agate con los siguientes parámetros:
  4. --content /gmi/: Indica la carpeta donde se encuentra el contenido de la cápsula.
  5. --hostname tu-dominio.com: El dominio que usaremos para acceder al servidor.
  6. --addr [::]:1965 y --addr 0.0.0.0:1965: Escucha en todas las interfaces de red.
  7. --lang es-ES: Configura el idioma del servidor.
  8. --skip-port-check: Salta la comprobación del puerto.
  9. volumes: Mapea las carpetas locales gmi y gmi/.certificates al contenedor. La carpeta /app/.certificates es donde Agate guarda los certificados TLS. Persistirlos es importante: Gemini usa el principio TOFU (Trust On First Use), y si se regeneran cada vez que se recrea el contenedor, tus visitantes verán un aviso de certificado cambiado.

Después de definir el servicio de Docker, pasamos al siguiente paso.

Necesitaremos un contenido mínimo para mostrar a nuestros visitantes, y a la vez poder comprobar que el servidor está funcionando correctamente.

Para ello crea la carpeta gmi, a la misma altura que el archivo compose.yml y Dockerfile, y dentro de la nueva carpeta crea un fichero llamado index.gmi con el siguiente contenido:

# Bienvenido a mi servidor de Gemini

Este es un servidor de Gemini que he creado para compartir contenido de forma sencilla y segura.

Ya está todo listo para levantar el servidor. Abre una terminal en la carpeta donde has creado los archivos y ejecuta el siguiente comando:

docker compose up -d

Te adelanto que la primera vez tardará un poco, ya que tiene que descargar las imágenes y compilar Agate. Recordemos que está escrito en Rust.

Una vez que termine, abre tu navegador de Gemini y escribe gemini://tu-dominio.com en la barra de direcciones.

Si estás trabajando en local, o no tienes un dominio contratado, puedes añadir la siguiente línea a tu archivo /etc/hosts para simular un dominio:

127.0.0.1 tu-dominio.com

Debes hacerlo ya que el protocolo Gemini usa certificados TLS por defecto, te negará el acceso si no entras por el dominio que has configurado.

Si todo ha ido bien, deberías ver el contenido que has creado en el archivo index.gmi.

¡Felicidades! Acabas de crear tu cápsula Gemini. 🎉

Si necesitas redireccionar el dominio desde otro servidor, puedes visitar Proxy inverso para el protocolo Gemini.

Sigue leyendo sobre Gemini

This work is under a Attribution-NonCommercial-NoDerivatives 4.0 International license.

Will you buy me a coffee?

This is how I keep writing without ads or paywalls.

Comments

There are no comments yet.

You may also like

Visitors in real time

You are alone: 🐱