Cómo instalar Wiki.js en Rocky Linux 9
Wiki.js es un software wiki ligero de código abierto. Está basado en el framework JavaScript Node.js. Puede utilizarse para escribir documentación, wiki y contenido web utilizando un editor Markdown para desarrolladores y un editor WYSIWYG para personas sin conocimientos técnicos. Admite múltiples tipos de contenido, incluidos diagramas UML, expresiones matemáticas utilizando sintaxis Tex o MathML, y código. Incluye múltiples módulos para diversas funciones, como análisis, autenticación, registro, motores de búsqueda de terceros y múltiples servicios de almacenamiento con los que sincronizar tu contenido.
En este tutorial, aprenderás a instalar Wiki.js en un servidor Rocky Linux 9 utilizando la base de datos PostgreSQL y el servidor Nginx para el proxy.
Requisitos previos
- Un servidor con Rocky Linux 9.
- Un usuario no root con privilegios sudo.
- Un nombre de dominio completo (FQDN) que apunte a tu servidor. Para nuestros propósitos, utilizaremos
wiki.example.com
como nombre de dominio. - Asegúrate de que todo está actualizado.
$ sudo dnf update
- Instala los paquetes de utilidades básicas. Es posible que algunos de ellos ya estén instalados.
$ sudo dnf install wget curl nano unzip yum-utils -y
Paso 1 – Configurar el cortafuegos
El primer paso es configurar el cortafuegos. Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.
$ sudo firewall-cmd --state running
El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.
$ sudo firewall-cmd --permanent --list-services
Debería mostrar la siguiente salida.
cockpit dhcpv6-client ssh
Wiki.js necesita los puertos HTTP y HTTPS para funcionar. Ábrelos.
$ sudo firewall-cmd --add-service=http --permanent $ sudo firewall-cmd --add-service=https --permanent
Recarga el cortafuegos para aplicar los cambios.
$ sudo firewall-cmd --reload
Paso 2 – Instalar PostgreSQL y Utilidades
Rocky Linux 9 viene con una versión antigua de PostgreSQL. Instalaremos Postgres 14 para nuestro tutorial.
Instala el repositorio RPM para PostgreSQL.
$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Instala el servidor PostgreSQL 14.
$ sudo dnf install -y postgresql14-server postgresql14-contrib
Inicializa la base de datos.
$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
Habilita e inicia el servicio PostgreSQL.
$ sudo systemctl enable postgresql-14 --now
Comprueba el estado del servicio.
$ sudo systemctl status postgresql-14 ? postgresql-14.service - PostgreSQL 14 database server Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2022-10-22 09:52:41 UTC; 2s ago Docs: https://www.postgresql.org/docs/14/static/ Process: 103857 ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 103862 (postmaster) Tasks: 8 (limit: 5915) Memory: 16.6M CPU: 61ms CGroup: /system.slice/postgresql-14.service ??103862 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/ ??103863 "postgres: logger " ??103865 "postgres: checkpointer " ??103866 "postgres: background writer " ??103867 "postgres: walwriter " ??103868 "postgres: autovacuum launcher " ??103869 "postgres: stats collector " ??103870 "postgres: logical replication launcher " Oct 22 09:52:41 wiki.example.com systemd[1]: Starting PostgreSQL 14 database server...
Paso 3 – Configurar PostgreSQL
Accede al shell de PostgreSQL.
$ sudo -i -u postgres psql
Crea una nueva base de datos para Wiki.js.
postgres=# CREATE DATABASE wikidb;
Crea un nuevo usuario de base de datos con una contraseña segura.
postgres=# CREATE USER wikiuser WITH ENCRYPTED PASSWORD 'wikipassword';
Concede los derechos al usuario para utilizar la base de datos.
postgres=# GRANT ALL PRIVILEGES ON DATABASE wikidb TO wikiuser;
Sal del shell Postgres.
postgres=# \q
Paso 4 – Instalar Node.js
Wiki.js soporta Node v16 en el momento de escribir este tutorial.
Instala el repositorio de Node utilizando el siguiente comando.
$ curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
Instala Node.
$ sudo dnf install nodejs -y
Verifica la instalación de Node.
$ node --version v16.18.0
Paso 5 – Descarga Wiki.js
Crea una carpeta para instalar Wiki.js.
$ sudo mkdir -p /var/www/wikijs
Establece al usuario actualmente conectado como propietario de la carpeta.
$ sudo chown $USER:$USER /var/www/wikijs
Cambia al directorio y descarga el archivo de código Wiki.js.
$ cd /var/www/wikijs && wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz
Extrae el archivo descargado.
$ tar xzf wiki-js.tar.gz
Paso 6 – Configura y ejecuta Wiki.js
Crea el archivo de configuración del ejemplo.
$ cp config.sample.yml config.yml
Abre el archivo de configuración para editarlo.
$ nano config.yml
Busca los siguientes ajustes de la base de datos y actualiza sus valores con los configurados en el paso 3.
# PostgreSQL / MySQL / MariaDB / MS SQL Server only: host: localhost port: 5432 user: wikiuser pass: wikipassword db: wikidb ssl: false
Busca la línea bindIP: 0.0.0.0
y actualízala como sigue.
bindIP: 127.0.0.1
Esto hará que WIki.js escuche en la dirección loopback porque utilizaremos el proxy Nginx para acceder a él desde el exterior.
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Ejecuta Wiki.js utilizando el siguiente comando.
$ node server
Recibirás una salida similar confirmando que la instalación se ha realizado correctamente.
2022-10-22T10:25:48.187Z [MASTER] info: ======================================= 2022-10-22T10:25:48.190Z [MASTER] info: = Wiki.js 2.5.289 ===================== 2022-10-22T10:25:48.191Z [MASTER] info: ======================================= 2022-10-22T10:25:48.191Z [MASTER] info: Initializing... 2022-10-22T10:25:49.079Z [MASTER] info: Using database driver pg for postgres [ OK ] 2022-10-22T10:25:49.086Z [MASTER] info: Connecting to database... 2022-10-22T10:25:49.117Z [MASTER] info: Database Connection Successful [ OK ] 2022-10-22T10:25:49.467Z [MASTER] warn: DB Configuration is empty or incomplete. Switching to Setup mode... 2022-10-22T10:25:49.468Z [MASTER] info: Starting setup wizard... 2022-10-22T10:25:49.740Z [MASTER] info: Starting HTTP server on port 3000... 2022-10-22T10:25:49.741Z [MASTER] info: HTTP Server on port: [ 3000 ] 2022-10-22T10:25:49.745Z [MASTER] info: HTTP Server: [ RUNNING ] 2022-10-22T10:25:49.745Z [MASTER] info: ....................................... 2022-10-22T10:25:49.745Z [MASTER] info: 2022-10-22T10:25:49.746Z [MASTER] info: Browse to http://YOUR-SERVER-IP:3000/ to complete setup!
Pulsa Ctrl + C para detener el proceso.
Paso 7 – Configurar un Servicio Systemd
El proceso anterior para mantener Wiki.js en funcionamiento es temporal. Para que el proceso sea permanente, necesitaremos crear un servicio systemd para que Wiki.js se ejecute como un servicio en segundo plano. Esto permitirá que Wiki.js se ejecute aunque se reinicie el sistema.
Crea un archivo de servicio systemd para Wiki.js y ábrelo para editarlo.
$ sudo nano /etc/systemd/system/wikijs.service
Pega en él el siguiente código. Sustituye el valor de la variable User
por el nombre de tu usuario del sistema.
[Unit] Description=Wiki.js After=network.target [Service] Type=simple ExecStart=/usr/bin/node server Restart=always User=navjot Environment=NODE_ENV=production WorkingDirectory=/var/www/wikijs [Install] WantedBy=multi-user.target
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Recarga el demonio del sistema.
$ sudo systemctl daemon-reload
Habilita el servicio Wiki.js.
$ sudo systemctl enable wikijs
Paso 8 – Instalar Nginx
Rocky Linux viene con una versión antigua de Nginx. Necesitas descargar el repositorio oficial de Nginx para instalar la última versión.
Crea y abre el archivo /etc/yum.repos.d/nginx.repo
para crear el repositorio oficial de Nginx.
$ sudo nano /etc/yum.repos.d/nginx.repo
Pega en él el siguiente código.
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Instala el servidor Nginx.
$ sudo dnf install nginx -y
Verifica la instalación.
$ nginx -v nginx version: nginx/1.22.1
Habilita e inicia el servidor Nginx.
$ sudo systemctl enable nginx --now
Comprueba el estado del servidor.
$ sudo systemctl status nginx ? nginx.service - nginx - high performance web server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2022-10-22 11:15:39 UTC; 49min ago Docs: http://nginx.org/en/docs/ Process: 116236 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS) Main PID: 116237 (nginx) Tasks: 2 (limit: 5915) Memory: 5.0M CPU: 245ms CGroup: /system.slice/nginx.service ??116237 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf" ??116238 "nginx: worker process" Oct 22 11:15:39 wiki.example.com systemd[1]: Starting nginx - high performance web server...
Paso 9 – Instalar SSL
Utilizaremos la herramienta Certbot utilizando la herramienta Snapd para emitir certificados SSL. Requiere el repositorio EPEL para funcionar.
$ sudo dnf install epel-release
Utilizaremos Snapd para instalar Certbot. Instala Snapd.
$ sudo dnf install snapd
Habilita e Inicia el servicio Snap.
$ sudo systemctl enable snapd.socket --now
Crea los enlaces necesarios para que Snapd funcione.
$ sudo ln -s /var/lib/snapd/snap /snap $ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh
Instala el repositorio principal de Snapd.
$ sudo snap install core $ sudo snap refresh core
Instala Certbot.
$ sudo snap install --classic certbot $ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Genera el certificado. El siguiente comando también configurará automáticamente Nginx.
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d wiki.example.com
El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/wiki.example.com
de tu servidor.
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Realiza un simulacro del proceso para comprobar si la renovación SSL funciona correctamente.
$ sudo certbot renew --dry-run
Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.
Paso 10 – Configurar SELinux
Ejecuta los siguientes comandos para aplicar el contexto SELinux correcto al directorio Wiki.js.
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/wikijs(/.*)?" $ sudo restorecon -Rv /var/www/wikijs
Crea un puerto para HTTP y asígnalo a 3000 para que Wiki.js funcione con SELinux.
$ sudo semanage port -a -t http_port_t -p tcp 3000
Permite que Nginx se conecte a la red.
$ sudo setsebool -P httpd_can_network_connect 1
Paso 11 – Configurar Nginx
Crea y abre el archivo /etc/nginx/conf.d/wikijs.conf
para editarlo.
$ sudo nano /etc/nginx/conf.d/wikijs.conf
Pega el siguiente código en él.
# enforce HTTPS server { listen 80; listen [::]:80; server_name wiki.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name wiki.example.com; root /var/www/wikijs; access_log /var/log/nginx/wiki.access.log; error_log /var/log/nginx/wiki.error.log; http2_push_preload on; # Enable HTTP/2 Server Push ssl_certificate /etc/letsencrypt/live/wiki.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/wiki.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/wiki.example.com/chain.pem; ssl_session_timeout 1d; # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC). ssl_protocols TLSv1.2 TLSv1.3; # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to # prevent replay attacks. # # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data ssl_early_data on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:50m; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; add_header X-Early-Data $tls1_3_early_data; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://127.0.0.1:3000; } } # This block is useful for debugging TLS v1.3. Please feel free to remove this # and use the `$ssl_early_data` variable exposed by NGINX directly should you # wish to do so. map $ssl_early_data $tls1_3_early_data { "~." $ssl_early_data; default ""; }
Sustituye la ubicación raíz del archivo anterior por el directorio de tu servidor.
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Abre el archivo /etc/nginx/nginx.conf
para editarlo.
$ sudo nano /etc/nginx/nginx.conf
Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.
Comprueba la configuración de Nginx.
$ sudo nginx -t
Si no ves ningún error, significa que puedes continuar.
Inicia el servicio Wiki.js.
$ sudo systemctl start wikijs
Recarga el servidor Nginx.
$ sudo systemctl reload nginx
Paso 12 – Finaliza la instalación
Visita la URL https://wiki.example.com
para finalizar la instalación.
Introduce los datos de tu cuenta de administrador y la URL. Desactiva la Telemetría desmarcando la opción Permitir Telemetría. También puedes desactivarla desde el panel de Administración. Pulsa el botón Instalar para continuar.
Accederás a la página de inicio de sesión.
Introduce los datos de tu cuenta y haz clic en el botón Iniciar sesión para acceder a la página de administración.
Ya puedes empezar a utilizar Wiki.js.
Conclusión
Con esto concluye nuestro tutorial en el que has aprendido a instalar Wiki.js en un servidor Rocky Linux 9. Si tienes alguna pregunta, publícala en los comentarios a continuación.