Antes de empezar a explicar qué es Wiki.JS y como se instala, vamos a hacer un resumen de lo que hemos visto en los tutoriales anteriores.
- Parte 1: Hemos aprendido a instalarle el sistema operativo a una Raspberry
- Parte 2: Hemos explicado qué es Docker y sus componentes, y hemos instalado en nuestro equipo Docker y Docker compose.
- Parte 3: Hemos instalado nuestro primer Docker: Pi-hole
- Parte 4: Hemos explicado unos cuantos comandos útiles para resolver problemas y gestionar nuestros Dockers.
- Parte 5: Le hemos instalado un VPN a nuestra Raspberry (Wireguard) con un gestor web de usuarios incluído
- Parte 6: Hemos aprendido a desplegar Dockers descargados de internet por nuestra cuenta, y con la excusa hemos desplegado aMule y Transmission.
- Parte 7: Hemos instalado Plex para tener una especie de Netflix personal.
- Parte 8: Hemos aprendido todo lo referente a servidores web instalados sobre docker.
- Parte 9: Hemos instalado Proxy Nginx Manager que nos servirá de proxy en los siguientes artículos.
- Parte 10: Hemos instalado Navidrome para tener una especie de Spotify personal.
- Parte 11: Hemos aprendido a duplicar y hacer copias de seguridad de nuestros Dockers.
- Parte 12: Hemos instalado Nextcloud para crearnos una nube privada
- Parte 13: Hemos instalado Vikunja para tener un gestor de tareas personal.
- Parte 14: Hemos instalado Calibre Web para tener una biblioteca de ebooks completamente ordenada.
- Parte 15: Hemos instalado VaultWarden para tener un excelente gestor de contraseñas y hemos aprovechado para aprender cómo convertir un Docker CLI a Docker Compose
- Parte 16: Hemos aprendido a instalar Jellyfin, que se trata de una alternativa completamente libre a Plex.
- Parte 17: Hemos instalado Filegator, para poder compartir todo tipo de archivos de forma simple en internet.
- Parte 18: Hemos instalado Picsur, para poder compartir fotos individuales en internet.
Como podréis comprobar, a estas alturas ya hemos visto un montón de servicios que nos permiten tener una buena cantidad de proyectos corriendo a la vez en nuestro pequeño servidor, pero existe también un docker muy útil para tener en un equipo doméstico y modesto: Wiki-JS. Se trata de un software libre destinado a hacer pequeñas Wikis colaborativas. Se pueden crear en él distintos usuarios que editen los artículos, creen artículos nuevos o simplemente puedan leer determinadas partes de la wiki, y la verdad es que visualmente es muy atractivo. Podéis hacer cosas tan chulas como ésta, que es la propia Wiki de Wiki.JS.
Guau... pues la verdad es que tiene buena pinta. Se pueden hacer menús muy currados y se ve muy bien. Pero no sé yo si un usuario normal podrá llegar a ese nivel de perfección.
Sí que se puede. Mira, sin ir más lejos yo mismo uso este sistema tanto en mi trabajo como a nivel personal. De hecho, para preparar estos artículos dedicados a Docker, he usado el sistema de Wiki.JS para hacerme los esquemas de cómo abordar cada artículo. Fíjate: esta página la uso a nivel personal y ahí pongo tanto los esquemas para los artículos como anotaciones para recordar cosas en mis instalaciones.
https://instrucciones.matas.com.es/
¡Ah, sí! ¡Ya veo! Parece una página muy interesante que... ¡¡Espera!! ¡Esa página tiene resumidos casi todos los artículos que has puesto sobre esta serie! ¿Me has hecho tragar tus interminables artículos y resulta que tenías todo aquí esquematizado?
Sí, bueno.. como ya te dije, primero hago esquemas muy básicos en mi Wiki, y luego los explico en el blog de forma más detallada para que…
¡¡Y AÚN ENCIMA VEO QUE TIENES MÁS DOCKERS PARA INSTALAR DE LOS QUE INDICAS EN LOS ARTÍCULOS!! ¡Pero serás $%&@#!
Tranquilízate y respira, Usuario Anónimo. Tengo esquematizadas en ese Wiki algunas instalaciones para posibles futuros tutoriales, enfocados ya a usuarios más avanzados o a instalaciones empresariales, pero tal y cómo iba diciendo, en este artículo vamos a aprender a realizar una Wiki para tener a mano y organizados nuestros conocimientos. Disponer de una Wiki personal es una gran solución para tener anotado todo lo que no quieres olvidar y…
¡¡PESTAÑAS!! ¡Hasta has puesto hasta pestañas en la parte dónde explicas qué son las imágenes, contenedores y volúmenes de docker! ¿para esto estoy tragándome tanto tutorial?
Me da que te va a venir bien tomarte una tila o una valeriana, Usuario Anónimo. El formato de un blog da para poder extenderse mucho más en las explicaciones que en una simple wiki, además de poder tener el feedback de los usuarios, que es algo muy a tener en cuenta. Vamos a ver cómo podemos hacer una instalación de Wiki.JS para hacer una wiki personal y tener toda nuestra documentación bien ordenada.
1) Creamos la estructura de carpetas dentro de la carpeta «docker».
Recordad que siempre estamos guardando todos nuestros contenedores en una carpeta situada dentro de la carpeta «home
» de nuestro usuario y que hemos llamado «docker
«. Si este es vuestro primer tutorial, aseguraos de tener en el sistema instalada la última versión de docker compose y cread la carpeta con el siguiente comando:
mkdir docker
Dentro de esa carpeta crearemos una carpeta específica para la instalación de Wiki.JS y dentro de ella vamos a crear una carpeta para que se almacenen los datos que generará este contenedor. Haremos todo ello con los siguientes comandos.
cd docker
mkdir wikijs
cd wikijs
mkdir db-data
No es exactamente lo que has puesto en tu Wiki.js. ¿Quieres cachondearte de nosotros intentando despistarnos?. Te voy a poner una vela negra, que lo sepas.
Ya sé que hay cosas distintas en el blog y en mi Wiki. Tal y cómo te dije, mi Wiki es para organizarme yo mismo y para tomar mis apuntes. Si un día me olvido de cómo se instala tal o cual cosa, puedo ir a mi Wiki y seguir mis propias indicaciones (no será la primera vez). Pero supongo que un lector del blog no tiene por qué entender mis esquemas y por eso aquí os pongo todo de forma mucho más detallada.
2- Creamos el archivo de configuración de Wiki.js
Dentro de la carpeta wikijs
vamos a crear el archivo docker-compose.yml que nos servirá para desplegar la instalación de Wiki.js. Primero usaremos el editor nano
para empezar a editar el archivo. Lo haremos con este comando.
sudo nano docker-compose.yml
Una vez abierto el editor, pegaremos dentro exactamente este contenido.
version: "3"
services:
db:
image: postgres:15-alpine
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_PASSWORD: ${DB_PASS}
POSTGRES_USER: ${DB_USER}
logging:
driver: "none"
restart: unless-stopped
volumes:
- db-data:/var/lib/postgresql/data
wiki:
image: ghcr.io/requarks/wiki:2
depends_on:
- db
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER: ${DB_USER}
DB_PASS: ${DB_PASS}
DB_NAME: ${DB_NAME}
restart: unless-stopped
ports:
- "3001:3000"
volumes:
db-data:
driver: local
driver_opts:
type: none
o: bind
device: ${DOCKERDIR}/wikijs/db-data
Como podéis ver, esta instalación además de necesitar todo lo relativo al sistema de Wiki.JS va a necesitar una base de datos postgres. Ahora guardad cambios con la combinación de teclas Control + O
y salid del editor nano con Control + X
.
3- Creamos el archivo de variables de entorno y le damos seguridad.
Como siempre, ahora crearemos el archivo de variables de entorno. Escribid en el terminal el siguiente comando para empezar a editar el archivo.
sudo nano .env
Una vez abierto el editor, pegad este contenido.
DOCKERDIR=/home/<tu_usuario>/docker
DB_USER=elusuariodelabasededatos
DB_PASS=laclavedemibasededatos
DB_NAME=labasededatos
Aquí de nuevo estás poniendo cosas diferentes de lo que tienes en el artículo de la Wiki. ¿Alguien te ha dicho alguna vez que te odia? Porque yo estoy a punto de decírtelo.
A ver… Recuerda que los archivos de variables de entorno que os dejo yo debéis modificarlos. Da igual lo que haya puesto dentro de las variables porque debéis modificarlas todas. No es seguro dejar los usuarios y contraseñas que estoy inventando. Así que lo que debéis hacer es lo siguiente:
- En la primera línea debéis poner después del símbolo «
=
» la ruta hacia la carpeta «docker» (bastaría con cambiar<tu_usuario>
por el usuario de la raspberry). - En las tres líneas siguientes, debéis inventaros los datos. Simplemente poned algo «raro» para no tener lo mismo que he puesto yo. Estos datos se usarán para que Wiki.JS pueda conectar con la base de datos, pero no usaremos estos usuarios y contraseñas nunca para acceder nosotros a ningún sitio.
Una vez modificado correctamente el archivo .env
y después de haber guardado cambios con Control + O
y salido del editor con Control + X,
debemos cambiar los permisos de ese archivo para que nadie con malas intenciones pueda acceder a él. Es muy sencillo. Lo podemos hacer con el siguiente comando:
sudo chmod 600 .env
Con esto ya tendremos todo listo para realizar la instalación de Wiki.JS en nuestro sistema.
4- Instalación de Wiki.JS
La instalación de Wiki.JS, llegados a este punto, es idéntica al resto de contenedores que hemos desplegado en otros artículos. Simplemente debemos teclear este comando en nuestro terminal desde la carpeta dónde tenemos alojado el archivo docker-compose.yml
sudo docker-compose -p "wikijs" up -d
Después de un rato podríamos acceder a nuestra nueva wiki desde la siguiente dirección (pero no lo hagáis todavía. Ahora os explico).
http://ip.de.la.raspberry:3001
Esa dirección (modificada con la dirección ip local de vuestra raspberry) generaría una web similar a ésta.
¿Y por qué no podemos ir rellenando los campos? Yo voy a ir haciéndolo.
¿Pero me quieres hacer caso sólo por una vez? Si te fijas, uno de los campos que el sistema te pide rellenar es el que pone «Site URL». Aún no tenemos la web alojada en el dominio definitivo, así que antes de apresurarse a cubrir los campos vamos a configurar nuestro proxy. En cuanto la web cuelgue de una dirección accesible a través de internet, ya podríamos cubrir todos los campos.
Pero en tu Wiki.js no pones nada de que haga falta configurar el proxy. O está mal tu Wiki o está mal este artículo. ¡Qué desastre!
Los dos están bien. Como ya te he dicho, mi Wiki.js son sólo esquemas de instalación. Para mi, la instalación de Wiki.js ya ha terminado en este punto (porque la web ya se genera correctamente). Sin embargo la web aún no es accesible a través de internet, y como en el blog pretendo explicar todo el proceso del principio a fin vamos a añadir aún algunos puntos a mayores.
5- Configuración del proxy
Para que nuestra instalación de Wiki.JS sea accesible desde internet vamos a necesitar tener un proxy en nuestro sistema. Voy a suponer que habéis hecho ya todo lo que se indica en el artículo número 9 de esta serie de tutoriales, por lo que deberíais tener instalado y configurado en vuestro sistema Nginx Proxy Manager. Si es así, vamos a entrar en su página web, pulsar sobre Hosts
y luego sobre Proxy Hosts
.
Ahora pulsaremos sobre el botón que hay arriba a la derecha en el que pone «Add proxy host
«.
En la siguiente pantalla debemos cubrir los siguientes campos:
- Domain names: ponemos un subdominio del dominio que tenemos contratado. Algo como
wiki.midominio.es
- scheme: http
- Forward Hostname / IP: ponemos la ip local del host dónde hemos hecho la instalación de Filegator.
- Forward Port: 3001
Después pulsamos sobre el botón que pone Save
Esto nos va a permitir acceder al dominio de nuestra instalación de Wiki.JS por http, pero debemos activar también el acceso a través de https. Para ello vamos a pulsar sobre los tres puntitos que hay al final de la línea del proxy que acabamos de configurar y luego pulsaremos la opción «Edit».
En la nueva pantalla, pulsamos sobre el desplegable llamado «SSL Certificate
» y seleccionamos la opción «Request a new SSL Certificate
«. Dejamos también marcadas las opciones «Force SSL
» y «HTTP/2 Support
» . Después, pulsamos sobre el botón «Save».
Con esto hecho, ya deberíamos poder acceder a nuestra instalación de Wiki.JS a través del subdominio que hemos configurado en el proxy. Vamos ahora a terminar de configurar nuestra Wiki.
6- Configuración básica de Wiki.JS. Finalizando la instalación de Wiki.JS.
Ahora sí que vamos a acceder a la web a través de nuestro nuevo subdominio y a rellenar los campos que se nos piden.
Después de unos segundos, nos podremos logar en el interface de Wiki.JS con el correo electrónico y la contraseña que hemos puesto en el apartado anterior.
Si elegimos ir a la zona de administración de la web, el menú principal nos mostrará un montón de opciones .
En «Navigation» podremos modificar el menú que nos va a aparecer a la izquierda de nuestra página principal. Luego, en el campo «icono» podemos elegir qué icono vamos a poner en cada línea del menú (Yo suelo escoger los iconos de Material Design). En «Tipo de objetivo», si escogemos «página», podemos decir a qué página va a llevar cada enlace.
Además, algo muy útil es que en las zonas de «Usuarios» y «Grupos» podemos definir qué usuarios o grupos de usuarios tienen acceso a cada uno de los artículos. Esto es especialmente útil si, por ejemplo, estamos haciendo una web con documentación para determinados departamentos de una empresa. Podemos definir que algunos usuarios tengan acceso a una determinada documentación y otros usuarios tengan acceso a otra documentación completamente diferente.
Os animo a cacharrear en la web que acabáis de construir. He de reconocer que al principio me parecía un sistema algo complicado, pero una vez que te acostumbras te das cuenta de que tiene un potencial muy grande.
7- Actualización de nuestra instalación de Wiki.JS
De vez en cuando sería conveniente entrar en el terminal y desde ahí mirar si hay alguna actualización de este contenedor, y por supuesto aplicarla en caso de que la haya. Veamos cómo podemos hacerlo.
7.1- Si sólo tenemos este contenedor instalado:
Si este es el único contenedor que hemos instalado, lo más sencillo para hacerlo es crear un pequeño script que ejecute secuencialmente todos los comandos necesarios. Para ello teclearemos primero este comando en nuestro terminal.
sudo nano actualizar.sh
Dentro del editor de texto, pegaremos este código.
cd /home/<tu_usuario>/docker/wikijs
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
Aseguraos de modificar la primera línea del script por la ruta correcta en la que reside la configuración de vuestro Wiki.JS. Luego, pulsaremos Control + O
para guardar cambios y Control + X
para salir del editor de texto.
El script, aunque ya está terminado, aún no es ejecutable, pero no es nada que no podamos evitar. Simplemente debemos teclear este comando en el terminal para hacerlo ejecutable.
sudo chmod +x actualizar.sh
Ahora, cuando queramos actualizar, sólo tendremos que ejecutar este comando (Desde la carpeta en la que hayamos creado el script, claro).
sudo ./actualizar.sh
7.2- Si hemos instalado más contenedores en la carpeta docker
:
Si hemos seguido el resto de artículos, deberíamos tener un montón de contenedores corriendo a la vez y todos los tenemos dentro de la carpeta «docker
«, podemos hacer un pequeño script que vaya recorriendo todas las subcarpetas que hay dentro de «docker
» y que vaya actualizando poco a poco cada contenedor. De hecho seguro que ya lo tenéis hecho, pero en caso contrario os digo cómo crear este script.
Lo primero sería iniciar la edición del script con este comando:
sudo nano actualizar.sh
Una vez que estemos dentro del editor de texto, pegaríamos este contenido en el archivo (Cambiando la línea BASE_DIR="/home/<tu_usuario>/docker"
por la ruta correcta, claro):
#!/bin/bash
# Actualizo el sistema operativo
sudo apt-get update -y
sudo apt-get dist-upgrade -y
sudo apt-get autoremove -y
sudo apt-get autoclean -y
# Definimos el directorio base
BASE_DIR="/home/<tu_usuario>/docker"
# Recorro todas las subcarpetas dentro del directorio base
for dir in $BASE_DIR/*; do
if [ -d "$dir" ]; then
echo "Procesando $dir ..."
cd "$dir"
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
fi
done
# Ya he actualizado todo. Ahora reinicio el sistema.
sudo shutdown -r now
Una vez hecho esto, guardamos cambios con Control + O
y cerramos el editor con Control + X.
Por último, hacemos ese archivo ejecutable con el siguiente comando:
sudo chmod +x actualizar.sh
Antes de ejecutar ese comando (que os actualizará todos los contenedores que tengáis en esa carpeta) tenéis que tener muy claro que si hay algún contenedor parado o que no estéis utilizando, este script os lo va a iniciar, así que revisad bien primero si todos los contenedores que hay ahí necesitan estar levantados. Si es así, para actualizar todos el comando a usar sería éste.
./actualizar.sh
Con esto ya deberíamos tener nuestra wiki perfectamente configurada. Creo que la instalación es muy sencilla. ¿Se os ha complicado algo en el camino? ¿Preferís algún otro sistema de wikis como bookstack o docuwiki? Cada uno tiene sus ventajas y sus inconvenientes, pero para mi (y esto es ya una opión personal completamente discutible) este es el que más se adecúa a lo que pretendo hacer yo con una wiki. Estaré atento a vuestros comentarios.
Solo escribo para decirte que te llevo al día en el blog pero que ando liado (entre playa y piscina) y tengo las practicas acumuladas para septiembre. Que tendré que comprar la pi5, que la 3 va a sacar fuego. Además tengo un problemilla con pi-hole que no le encuentro solución. A ver que me puedes decir.
Gracias por seguir escribiendo en verano!
No veo ningún comentario tuyo pendiente de solucionar en el artículo sobre pi-hole. Cuando puedas comenta el problema que tienes en ese artículo y a ver si entre todos le encontramos solución.
Gracias Marcos,
Funcionando! A la primera y desde el sofá
Un saludo!!!
Hola, te dejo un posible nuevo proyecto que podría tener buena pinta.https://pimylifeup.com/raspberry-pi-mealie/
Muchas gracias por tu ayuda.