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 --target x86_64-unknown-linux-musl --path .
FROM alpine:latest
COPY --from=builder /usr/local/cargo/bin/agate /usr/bin/agate
Es una imagen multi etapa de Docker.
- Descarga la imagen de Rust con Alpine.
- Baja el código fuente de Agate.
- Compila Agate con cargo, el gestor de paquetes de Rust.
- Crea una imagen de Alpine con Agate instalado.
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.
restart: "always"
: Reinicia el servicio si se detiene.ports
: Mapea el puerto 1965 del contenedor al puerto 1965 del host. Es el puerto por defecto del protocolo Gemini.command
: Configura Agate con los siguientes parámetros:--content /gmi/
: Indica la carpeta donde se encuentra el contenido de la capsula.--hostname tu-dominio.com
: El dominio que usaremos para acceder al servidor.--addr [::]:1965
y--addr 0.0.0.0 1965
: Escucha en todas las interfaces de red.--lang es-ES
: Configura el idioma del servidor.--skip-port-check
: Salta la comprobación del puerto.
volumes
: Mapea las carpetas localesgmi
ygmi/.certificates
al contenedor. La carpeta.certificates
es donde Agate guarda los certificados TLS.
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 esta 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 esta 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 esta escrito en Rust.
Una vez que termine, abre tu navegador de Gemini y escribe gemini://tu-dominio.com
en la barra de direcciones.
Si estas trabajando en local, o no tienes un dominio contratado, puedes añadir la siguiente linea 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.
{{ comments.length }} comentarios