Saltar al contenido principal

Lab 5.7 - Instalar Wiki.js en Ubuntu 24.04 LTS

Objetivos​

Al final de este laboratorio, usted será capaz de:

  • Instalar Git y Node.js en Ubuntu 24.04
  • Instalar y configurar MariaDB
  • Descargar y configurar Wiki.js
  • Crear un servicio systemd para Wiki.js
  • Resolver problemas comunes de instalación
  • Configurar HTTPS con Certbot

Prerrequisitos​

  • Ubuntu 24.04 LTS instalado
  • Acceso a una terminal con privilegios sudo
  • Conexión a Internet
  • Al menos 2 GB de RAM disponible
  • Al menos 5 GB de espacio libre en disco

Introducción​

Esta guía le acompaña en la instalación de Wiki.js, un motor Wiki moderno y potente basado en Node.js, Git y Markdown. Wiki.js se distribuye bajo la licencia Affero GNU General Public License y soporta varios sistemas de gestión de bases de datos.


Parte 1: Instalación de Git​

Wiki.js requiere Git. Para instalarlo en Ubuntu 24.04, siga estos pasos:

# Cambiar a modo superusuario
sudo -s
# o
su

# Actualizar los paquetes
sudo apt update

# Instalar Git
sudo apt install git -y

Verificación de la instalación​

git --version
# Debería mostrar: git version 2.x.x o superior

Parte 2: Instalación de Node.js​

Wiki.js funciona con Node.js. Instale la versión LTS de Node.js utilizando el script de NodeSource:

# Descargar y ejecutar el script de instalación de NodeSource
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -

# Instalar Node.js
sudo apt-get install -y nodejs

Verificación de las versiones instaladas​

# Verificar la versión de Node.js
node -v
# Debería mostrar: v20.x.x o superior (versión LTS)

# Verificar la versión de npm
npm -v
# Debería mostrar: 10.x.x o superior

Parte 3: Instalación y Configuración de MariaDB​

Instalación de MariaDB​

Instale MariaDB para gestionar los datos de Wiki.js:

# Instalar MariaDB
sudo apt install mariadb-server mariadb-client -y

# Iniciar el servicio
sudo systemctl start mariadb

# Habilitar el servicio al inicio
sudo systemctl enable mariadb

# Verificar el estado
sudo systemctl status mariadb

Prueba de conexión​

# Probar la conexión con mariadb
mariadb
# Escriba exit; para salir

# Probar la conexión con mysql
mysql
# Escriba exit; para salir

Asegurar MariaDB​

Refuerce la instancia usando el comando:

sudo mariadb-secure-installation

Respuestas recomendadas:

Enter current password for root: [Presione Enter]
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Configuración de la base de datos​

Conéctese a MariaDB y configure la base de datos:

sudo mysql -u root -p

En el shell de MariaDB, ejecute los siguientes comandos:

CREATE DATABASE wikidb;
CREATE USER 'wikidb_user'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON wikidb.* TO 'wikidb_user'@'localhost';
FLUSH PRIVILEGES;
SHOW DATABASES;
USE wikidb;
SHOW TABLES;
EXIT;

Nota: Reemplace PASSWORD por una contraseña segura de su elección.


Parte 4: Descarga e Instalación de Wiki.js​

Crear un usuario y una carpeta para Wiki.js​

# Crear un usuario de sistema para Wiki.js
sudo adduser --system --group wikijs

# Crear el directorio de instalación
sudo mkdir -p /var/www/wikijs

# Verificar la creación
ls -la /var/www/

# Definir el propietario
sudo chown -R wikijs:wikijs /var/www/wikijs

# Verificar los permisos
ls -la /var/www/
ls -la /var/www/wikijs

Modificar el shell del usuario wikijs​

# Permitir la conexión con un shell bash
sudo usermod -s /bin/bash wikijs

Descargar e instalar Wiki.js​

# Conectarse como usuario wikijs
sudo su - wikijs

# Verificar el directorio actual
pwd
# Debería mostrar: /var/www/wikijs

# Verificar el usuario
whoami
# Debería mostrar: wikijs

# Ir al directorio de instalación
cd /var/www/wikijs

# Descargar Wiki.js
wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz

# Extraer el archivo
tar xzf wiki-js.tar.gz

# Verificar el contenido
ls -la

# Eliminar el archivo comprimido
rm wiki-js.tar.gz

# Copiar el archivo de configuración de ejemplo
cp config.sample.yml config.yml

# Editar el archivo de configuración
nano config.yml

Configuración del archivo config.yml​

Configure el archivo config.yml para usar MariaDB. Modifique la sección db:

db:
type: mariadb
host: localhost
port: 3306
user: wikidb_user
pass: PASSWORD
db: wikidb
ssl: false

bindIP: 127.0.0.1
port: 3000

Importante:

  • Reemplace PASSWORD por la contraseña que definió para wikidb_user
  • bindIP: 127.0.0.1 significa que Wiki.js escuchará solo en localhost
  • Para acceso externo, utilice bindIP: 0.0.0.0 (ver sección Troubleshooting #4)

Comentar las secciones no utilizadas:

En el archivo config.yml, comente las secciones para PostgreSQL y SQLite que no se utilizan:

# Comentar estas líneas (agregar # al inicio):
# sslOptions:
# auto: true
# # rejectUnauthorized: false

# # Optional - PostgreSQL only:
# schema: public

# # SQLite only:
# storage: path/to/database.sqlite

Guarde y salga con Ctrl + X, luego Y, luego Enter.


Parte 5: Creación de un Servicio systemd​

Volver al usuario root​

Antes de crear el servicio, regrese al usuario principal:

# Salir de la sesión wikijs
exit

# Verificar que es root
whoami
# Debería mostrar: root

Troubleshooting #1: Permisos para crear el servicio​

Si encuentra un error de permisos al crear el servicio:

# Si todavía es wikijs
whoami
# Debería mostrar: wikijs

# Salir
exit
# o
sudo -s
# o
su

# Verificar
whoami
# Debería mostrar: root

# Cambiar la contraseña de wikijs
sudo passwd wikijs

# Agregar wikijs al grupo sudo
sudo usermod -aG sudo wikijs

# Reconectarse como wikijs
su - wikijs

# Ahora puede usar sudo
sudo nano /etc/systemd/system/wikijs.service

Crear el servicio systemd​

# Crear el archivo de servicio
sudo nano /etc/systemd/system/wikijs.service

Agregue el siguiente contenido:

[Unit]
Description=Wiki.js
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always

User=wikijs
Environment=NODE_ENV=production
WorkingDirectory=/var/www/wikijs

[Install]
WantedBy=multi-user.target

Guarde y salga.

Activar e iniciar el servicio​

# Recargar la configuración de systemd
sudo systemctl daemon-reload

# Iniciar el servicio
sudo systemctl start wikijs

# Habilitar el servicio al inicio
sudo systemctl enable wikijs

# Verificar el estado
sudo systemctl status wikijs

Parte 6: Resolución de Problemas (Troubleshooting)​

Troubleshooting #2: Verificar los logs​

Si el servicio no inicia correctamente, consulte los logs:

# Ver las últimas 50 líneas de los logs
sudo journalctl -u wikijs.service --no-pager --lines=50

# Seguir los logs en tiempo real
sudo journalctl -u wikijs.service -f

Problema 1: Error de indentación YAML - sslOptions​

Error:

bad indentation of a mapping entry at line 37, column 3:
sslOptions:
^

Solución:

# Ir al directorio de Wiki.js
cd /var/www/wikijs

# Editar el archivo de configuración
nano config.yml

# Comentar las siguientes líneas (agregar # al inicio):
# sslOptions:
# auto: true
# # rejectUnauthorized: false

# Guardar y salir

# Recargar y reiniciar el servicio
sudo systemctl daemon-reload
sudo systemctl start wikijs
sudo systemctl enable wikijs
sudo systemctl status wikijs

Problema 2: Error de indentación YAML - schema (PostgreSQL)​

Error:

bad indentation of a mapping entry at line 47, column 3:
schema: public
^

Solución:

cd /var/www/wikijs
nano config.yml

# Comentar las siguientes líneas:
# Optional - PostgreSQL only:
# schema: public

# Guardar y salir

# Recargar y reiniciar
sudo systemctl daemon-reload
sudo systemctl start wikijs
sudo systemctl enable wikijs
sudo systemctl status wikijs

Problema 3: Error de indentación YAML - storage (SQLite)​

Error:

bad indentation of a mapping entry at line 50, column 3:
storage: path/to/database.sqlite
^

Solución:

cd /var/www/wikijs
nano config.yml

# Comentar las siguientes líneas:
# SQLite only:
# storage: path/to/database.sqlite

# Guardar y salir

# Recargar y reiniciar
sudo systemctl daemon-reload
sudo systemctl start wikijs
sudo systemctl enable wikijs
sudo systemctl status wikijs

Problema 4: Acceso externo (Azure/Cloud)​

Si desea acceder a Wiki.js desde el exterior (por ejemplo, desde Azure):

  1. Agregar una regla de tráfico entrante en su firewall cloud (puerto 3000)

  2. Modificar el bindIP en config.yml:

# Conectarse como wikijs
sudo su - wikijs

# Ir al directorio
cd /var/www/wikijs

# Editar la configuración
nano config.yml

Cambie:

bindIP: 127.0.0.1

Por:

bindIP: 0.0.0.0

Guarde y salga.

  1. Recargar y reiniciar el servicio:
# Volver a root
exit

# Recargar la configuración
sudo systemctl daemon-reload

# Reiniciar el servicio (¡importante!)
sudo systemctl restart wikijs

# Verificar el estado
sudo systemctl status wikijs
  1. Acceder a Wiki.js:

Acceda a Wiki.js a través de su navegador usando la URL: http://<dirección_IP>:3000


Parte 7: Acceso a Wiki.js​

Acceso local​

Acceda a Wiki.js a través de su navegador usando la URL: http://127.0.0.1:3000 o http://localhost:3000

Acceso externo​

Si ha configurado bindIP: 0.0.0.0, acceda mediante: http://<dirección_IP>:3000

Configuración inicial​

  1. Siga las instrucciones para crear una cuenta de administrador
  2. Complete la instalación a través de la interfaz web
  3. Inicie sesión con sus credenciales de administrador

Parte 8: Configuración de HTTPS con Certbot​

Instalación de Certbot​

# Conectarse por SSH (si está en Azure/Cloud)
# ssh -i key1.pem azureuser@<dirección_ip_pública_de_su_vm>

# Cambiar a root
sudo -i

# Actualizar los paquetes
sudo apt update

# Instalar Certbot y el plugin Apache
sudo apt install certbot python3-certbot-apache -y

Configuración del firewall​

# Permitir Apache (HTTP y HTTPS)
sudo ufw allow 'Apache Full'

# Verificar el estado
sudo ufw status

Obtener un certificado SSL​

# Obtener un certificado SSL con Certbot
sudo certbot --apache

Durante la ejecución:

  • Ingrese su dirección de correo electrónico
  • Acepte los términos y condiciones
  • Ingrese su nombre de dominio (ej: haythemrehouma.eastus.cloudapp.azure.com)
  • Elija redirigir HTTP a HTTPS

Verificación de la renovación automática​

# Verificar el estado del timer de Certbot
sudo systemctl status certbot.timer

# Probar la renovación (simulación)
sudo certbot renew --dry-run

Certbot renovará automáticamente los certificados antes de su expiración.


Resumen de Comandos Importantes​

ComandoDescripción
git --versionVerificar la versión de Git
node -v && npm -vVerificar las versiones de Node.js y npm
sudo systemctl status mariadbVerificar el estado de MariaDB
sudo mysql -u root -pConectarse a MariaDB
sudo systemctl status wikijsVerificar el estado del servicio Wiki.js
sudo journalctl -u wikijs.service -fSeguir los logs en tiempo real
sudo systemctl restart wikijsReiniciar el servicio Wiki.js
sudo certbot renew --dry-runProbar la renovación SSL

Verificación Final​

Verifique que ha logrado:

  • Instalar Git y Node.js
  • Instalar y configurar MariaDB
  • Crear la base de datos y el usuario para Wiki.js
  • Descargar y extraer Wiki.js
  • Configurar correctamente el archivo config.yml
  • Crear y activar el servicio systemd
  • Acceder a Wiki.js mediante el navegador
  • Resolver los errores YAML si aparecen
  • Configurar HTTPS con Certbot (opcional)

Preguntas de Reflexión​

  1. ¿Por qué es importante crear un usuario de sistema dedicado (wikijs) para Wiki.js?

    • Explique las ventajas de seguridad
  2. ¿Cuál es la diferencia entre bindIP: 127.0.0.1 y bindIP: 0.0.0.0?

    • ¿En qué casos usaría cada una de estas configuraciones?
  3. ¿Por qué es necesario comentar las secciones PostgreSQL y SQLite en config.yml si se usa MariaDB?

    • Explique los errores YAML y cómo evitarlos
  4. ¿Cuál es el rol del servicio systemd en esta instalación?

    • Explique las ventajas frente a un inicio manual
  5. ¿Por qué usar Certbot para HTTPS en lugar de un certificado autofirmado?

    • ¿Cuáles son las ventajas para un entorno de producción?

Próximos Pasos​

  • Módulo 8: Servicios y Demonios (para profundizar en systemd)
  • Módulo 9: Seguridad del Sistema (para asegurar aún más la instalación)
  • TP 2: Reverse Proxy NGINX (para exponer Wiki.js mediante un reverse proxy)

Recursos Complementarios​


Laboratorio creado el: Diciembre 2024