Para un proyecto personal aparte (side project, pet project, etc., llámalo X) he querido instalar una wiki propia para ir documentando lo que hago en el proyecto.
Requisitos
Como requisitos para mi caso particular tenía lo siguiente:
- Tener un precio asequible. Fundamental, porque simplemente es un proyecto personal pequeño en el que quiero empezar a documentar, el formato de wiki se ajusta a la documentación que quiero pero en el caso de no haber encontrado nada con un precio asequible, posiblemente hubiera documentado en otro sistema.
- Instalación on-premise. Es decir, que no esté en la nube. Al ser un software pequeño, quiero tener el control en mi servidor privado.
- Versión para Windows y para Linux: Tengo ambos sistemas, en el servidor donde lo voy a poner es un Ubuntu, pero quiero probarlo también en Windows.
- Licencia adecuada. Aunque es un proyecto personal no monetizado, no quiero que si por lo que sea, se monetiza de alguna forma, tenga que cambiar el sistema de documentación.
- Que no sea software abandonado. Que tenga una mínima actualización y una mínima comunidad de usuarios. Esto siempre va bien cuando uno trabaja por su cuenta 😉
- Y sobre todo, ¡entendible!: Que independientemente del lenguaje o la tecnología en que esté hecho, pueda entender lo que hace (ideal software libre), sea transparente y no haya cosas «raras».
Añadiría muchas más cosas (escalable, customizable, que permita varios tipos de formatos, bonita, fácil, etc.), pero en resumen las características anteriores serían las fundamentales.
Wiki.js es el elegido
Con todo esto, después de analizar unas cuantas herramientas, me decidí por Wiki.js (o js.wiki). Construida en NodeJS, open source con licencia AGPL-v3 es bastante ligera y sencilla. La última versión estable, la 2.5.300 ha sido liberada en agosto de 2023 y tiene versiones tanto para Windows como para Linux. En su GitHub están todas las versiones liberadas.
En cuanto a la base de datos, las que soporta son las siguientes:
Base de datos | Versión mínima |
PostgreSQL | 9.5 |
MySQL | 8.0 |
MariaDB | 10.2.7 |
MS SQL Server | 2012 |
SQLite | 3.9 |
En mi caso, mi servidor tiene PostgreSQL 10.22 así que perfecto, ningún problema ahí.
Pasos de la instalación
La instalación en mi servidor Ubuntu ha sido bastante sencilla, he seguido los pasos de la documentación, que básicamente son los siguientes:
- Creación de la base de datos. La base de datos hay que crearla previamente, ya que Wiki.js no la crea. Por lo tanto hay que crear el esquema y también el usuario con su password para acceder a esa base de datos.
- Descargar y descomprimir Wiki.js. Nada complicado aquí, simplemente decir que ocupa unos 450-500Mb una vez descomprimido. No está mal…
- Editar el fichero de configuración: Wiki.js viene con un fichero de configuración bastante completo ya, en formato yaml, pero es necesario siempre modificarlo para adecuarlo a la instalación de cada uno, como mínimo tiene que tener la conexión de la base de datos. Lo recomendable es renombrar el que viene (de config.sample.yml a config.yml) y modificar al menos los datos de acceso a la base de datos que hemos creado en el primer paso:
- Host donde se aloja la base de datos.
- Puerto de escucha del servidor de base de datos.
- Nombre de la base de datos
- Usuario y password de acceso.
- Si necesita SSL o no. En caso de usarse, se debe configurar las secciones sslOptions y ssl.
- Crear el servicio. En mi caso, como quiero que se ejecute como servicio en Ubuntu y esté siempre levantado, he creado el servicio en /etc/systemd/system y lo he activado. Las instrucciones en caso de Linux están muy claras, simplemente hay que saber en qué directorio se ha instalado Wiki.js y qué usuario levantará el servicio (viene «nobody» por defecto).
Ejecución
Una vez levantado el servicio, simplemente accediendo a Wiki.js en el nombre del servidor y el puerto indicados anteriormente, el sistema detecta que no está configurado y hay que crear el usuario administrador con un correo y un password.
Una vez establecido ese usuario administrador, el sistema ya crea todas las tablas necesarias y es usable.