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
PASSWORDpor la contraseña que definió parawikidb_user bindIP: 127.0.0.1significa 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):
-
Agregar una regla de tráfico entrante en su firewall cloud (puerto 3000)
-
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.
- 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
- 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
- Siga las instrucciones para crear una cuenta de administrador
- Complete la instalación a través de la interfaz web
- 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
| Comando | Descripción |
|---|---|
git --version | Verificar la versión de Git |
node -v && npm -v | Verificar las versiones de Node.js y npm |
sudo systemctl status mariadb | Verificar el estado de MariaDB |
sudo mysql -u root -p | Conectarse a MariaDB |
sudo systemctl status wikijs | Verificar el estado del servicio Wiki.js |
sudo journalctl -u wikijs.service -f | Seguir los logs en tiempo real |
sudo systemctl restart wikijs | Reiniciar el servicio Wiki.js |
sudo certbot renew --dry-run | Probar 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
-
¿Por qué es importante crear un usuario de sistema dedicado (
wikijs) para Wiki.js?- Explique las ventajas de seguridad
-
¿Cuál es la diferencia entre
bindIP: 127.0.0.1ybindIP: 0.0.0.0?- ¿En qué casos usaría cada una de estas configuraciones?
-
¿Por qué es necesario comentar las secciones PostgreSQL y SQLite en
config.ymlsi se usa MariaDB?- Explique los errores YAML y cómo evitarlos
-
¿Cuál es el rol del servicio systemd en esta instalación?
- Explique las ventajas frente a un inicio manual
-
¿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
- Documentación Wiki.js
- Documentación Node.js
- Documentación MariaDB
- Documentación systemd
- Documentación Certbot
Laboratorio creado el: Diciembre 2024