Cómo publico esta cápsula gemini
2023-12-11
#tutoriales #gemini
Requisitos
- Nombre de dominio
- Servidor (en mi caso Ubuntu 23)
- Puerto TCP 1965 abierto
- Repositorio GIT online (en mi caso en Codeberg*)
Preparación
- Accedemos al servidor y creamos en la carpeta de nuestro usuario un directorio "gemini" con dos subdirectorios "content" y "certificate"
mkdir -p gemini/{content,certificate}
- Creamos una cápsula de ejemplo
# Este es el Título ## Esta Cápsula funciona! Hello world
Instalación del servidor Gemini
Hay muchos servidores disponibles. Yo elegí uno llamado Molly-Brown que está disponible para arquitectura ARM desde los repositorios de Ubuntu.
sudo apt update sudo apt install molly-brown
Generar el certificado
Entramos al directorio /certificate:
cd gemini/certificate
y lo generamos:
openssl req -new -subj "/CN=gmi.manugallego.es" -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -days 3650 -nodes -out cert.pem -keyout key.pem
Configuración
El archivo de configuración por defecto esta ubicado en /etc/molly.conf
sudo vim /etc/molly.conf
y configuramos los respectivos campos como en el ejemplo de abajo, cambiando las rutas y el nombre de dominio por los que hayamos elegido:
# Molly Brown localhost server config using snakeoil certificates CertPath = "/home/user/gemini/certificate/cert.pem" KeyPath = "/home/user/gemini/certificate/key.pem" DocBase = "/home/user/gemini/content/" AccessLog = "/home/user/gemini/server/access.log ErrorLog = "/home/user/gemini/server/errors.log" Port = 1965 Hostname = "gmi.manugallego.es"
Configuración del servicio con Systemd
sudo vim /etc/systemd/system/molly-brown.service
Ejemplo:
[Unit] Description=Molly Brown gemini server After=network.target [Service] Type=simple Restart=always User=USERNAME ExecStart=/usr/bin/molly-brown [Install] WantedBy=multi-user.target
Habilitamos y activamos el servicio:
sudo systemctl enable molly-brown.service sudo systemctl start molly-brown.service
Publicación
Repositorio Git
En mi caso tengo un repositorio Git en Codeberg que utilizo como backup y control de versiones y un script que se ejecuta con el hook de git pre-push que publica directamente con rsync y ssh
Script pre-push en .git/hooks/pre-push:
#!/bin/bash
SCRIPT_PATH="/home/path/to/upload_script/upload.sh"
if [ -x "$SCRIPT_PATH" ]; then
$SCRIPT_PATH
else
echo "El script de subida no existe o no es ejecutable."
fi
echo "Fin de pre-push" >> /path/to/pre-push.log
Script de subida
#!/bin/bash
local_dir="./content"
remote_user="USERNAME"
remote_host="HOST"
remote_path="/home/path/to/content_dir"
rsync -avz -e "ssh $local_dir $remote_user@$remote_host:$remote_path
if [ $? -eq 0 ]; then
echo "¡Copia correcta!"
else
echo "Error al copiar. Código de salida: $?"
fi