Wiki usando git y hugo

Git es una gran herramienta para editar colaborativamente un documento y puede usarse para hacer algo estilo wiki/blog con un poco de ayuda.

Requisitos en el servidor web

Un servidor es una compu que espera que le pidan información y la envía.

Se necesita que la compu tenga instalado:

  • git (o algún otro sistema de control de versiones).
  • hugo (o algún otro gestor de contenido estático).
  • nginx (o algún otro servidor web).

Para limitar el permiso de escritura, se puede usar:

Además, se debe

Generar el wiki

Aquí hacemos una página web que se genera cada vez que enviamos nuestros cambios usando git.

La forma más sencilla de poner un repositorio de git es generar una carpeta y acceder a ella con un usuario por consola segura (SSH).

sudo useradd git

Acá se genera un repositorio “desnudo” (bare) para que sirva como repositorio central.

sudo su - git
mkdir wiki.git
cd wiki.git
git init --bare

Para dar permisos, se puede agregar la llave pública de los editores a ~git/.ssh/authorized_keys.

Si se quiere más control acerca de qué usuarios pueden editar qué repos, seguir este manual.

Generar el sitio web

Para generar el sitio estáticamente, como el usuario git:

hugo new site [nombre-del-sitio]

Me gusta separar el contenido del resto del sitio y mantenerlo en repositorios distintos.

# Versionar el generador del sitio
cd [nombre-del-sitio]
git init
echo content > .gitignore
# Versionar el contenido
cd content
git init
git remote add ~git/wiki.git

Hacer el wiki automático

Aprovechando que git puede hacer cosas en momentos específicos, configuramos que al actualizar el repo, se genere el sitio web.

Lo primero que tenemos que hacer es una carpeta donde HUGO pueda generar el contenido:

sudo install -d -o www-data -g git -m 775 /srv/http/[nombre-del-sitio]

Podemos vincular el generador de hugo para que genere el sitio allí:

ln -s /srv/http/[nombre-del-sitio] ~git/[nombre-del-sitio]/public

Generamos un llamado ~git/wiki.git/hooks/post-receive, éste es el script que genera el sitio web cada que actualizamos:

#!/bin/sh
#
#set -x #uncomment for debug

# Change directory to ...
cd ~git/[nombre-del-sitio]/content
# pull changes from this repo
env -i git pull origin master
# run hugo
cd ~git/[nombre-del-sitio]
hugo

Hacer visible el wiki

Aquí sólo hay que publicar el contenido de /srv/http/[nombre-del-sitio] usando nginx. En los debian, hay una carpeta para agregar sitios nuevos /etc/nginx/sites-available, allí hay que agregar un archivo nuevo:

sudo $EDITOR /etc/nginx/sites-available/[nombre-del-sitio].conf

En este archivo agregamos:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

	root /srv/http/[nombre-del-sitio];

        location / {
                try_files $uri $uri/ =404;
        }
}

Y luego reiniciamos nginx para que sirva el sitio web:

sudo systemctl restart nginx

Editar el wiki

En la campechana mental usamos este esquema.

Dejo aquí las instrucciones que usamos para que sea necesario pulirlas hasta que cualquiera pueda usarlas.

More Reading
Older// Lo social...