Ricerca nel sito web

Come installare Wiki.js su Rocky Linux 9


Su questa pagina

  1. Prerequisiti
  2. Passaggio 1: configurazione del firewall
  3. Passaggio 2 - Installa PostgreSQL e le utility
  4. Passaggio 3 - Configurare PostgreSQL
  5. Passaggio 4 - Installa Node.js
  6. Passaggio 5 - Scarica Wiki.js
  7. Passaggio 6 - Configura ed esegui Wiki.js
  8. Passaggio 7 - Imposta un servizio Systemd
  9. Passaggio 8 - Installa Nginx
  10. Passaggio 9 - Installa SSL
  11. Passaggio 10 - Configura SELinux
  12. Passaggio 11 - Configura Nginx
  13. Passaggio 12: terminare l'installazione
  14. Conclusione

Wiki.js è un software wiki leggero e open source. È costruito sul framework JavaScript Node.js. Può essere utilizzato per scrivere documentazione, wiki e contenuti Web utilizzando un editor Markdown per sviluppatori e un editor WYSIWYG per persone non tecniche. Supporta più tipi di contenuto inclusi diagrammi UML, espressioni matematiche che utilizzano la sintassi Tex o MathML e codice. Include più moduli per varie funzioni tra cui analisi, autenticazione, registrazione, motori di ricerca di terze parti e più servizi di archiviazione per sincronizzare i tuoi contenuti.

In questo tutorial imparerai a installare Wiki.js su un server Rocky Linux 9 utilizzando il database PostgreSQL e il server Nginx per il proxy.

Prerequisiti

  • A server running Rocky Linux 9.

  • A non-root user with sudo privileges.

  • A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use wiki.example.com as the domain name.

  • Make sure everything is updated.

    $ sudo dnf update
    
  • Install basic utility packages. Some of them may already be installed.

    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Passaggio 1: configurare il firewall

Il primo passo è configurare il firewall. Rocky Linux utilizza Firewalld Firewall. Controlla lo stato dei firewall.

$ sudo firewall-cmd --state
running

Il firewall funziona con zone diverse e la zona pubblica è quella predefinita che utilizzeremo. Elenca tutti i servizi e le porte attive sul firewall.

$ sudo firewall-cmd --permanent --list-services

Dovrebbe mostrare il seguente output.

cockpit dhcpv6-client ssh

Wiki.js ha bisogno delle porte HTTP e HTTPS per funzionare. Aprili.

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent

Ricarica il firewall per applicare le modifiche.

$ sudo firewall-cmd --reload

Passaggio 2: installa PostgreSQL e le utilità

Rocky Linux 9 viene fornito con una versione precedente di PostgreSQL. Installeremo Postgres 14 per il nostro tutorial.

Installa l'RPM del repository per PostgreSQL.

$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Installa il server PostgreSQL 14.

$ sudo dnf install -y postgresql14-server postgresql14-contrib

Inizializzare il database.

$ sudo /usr/pgsql-14/bin/postgresql-14-setup initdb

Abilita e avvia il servizio PostgreSQL.

$ sudo systemctl enable postgresql-14 --now

Controlla lo stato del servizio.

$ 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...

Passaggio 3: configurare PostgreSQL

Accedi alla shell PostgreSQL.

$ sudo -i -u postgres psql

Crea un nuovo database per Wiki.js.

postgres=# CREATE DATABASE wikidb;

Crea un nuovo utente del database con una password complessa.

postgres=# CREATE USER wikiuser WITH ENCRYPTED PASSWORD 'wikipassword';

Concedere all'utente i diritti per l'utilizzo del database.

postgres=# GRANT ALL PRIVILEGES ON DATABASE wikidb TO wikiuser;

Uscire dalla shell di Postgres.

postgres=# \q

Passaggio 4: installa Node.js

Wiki.js supporta Node v16 al momento della stesura di questo tutorial.

Installa il repository Node utilizzando il seguente comando.

$ curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -

Installa Node.

$ sudo dnf install nodejs -y

Verificare l'installazione del nodo.

$ node --version
v16.18.0

Passo 5 - Scarica Wiki.js

Crea una cartella per installare Wiki.js.

$ sudo mkdir -p /var/www/wikijs

Impostare l'utente attualmente connesso come proprietario della cartella.

$ sudo chown $USER:$USER /var/www/wikijs

Passa alla directory e scarica l'archivio del codice Wiki.js.

$ cd /var/www/wikijs && wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz

Estrarre l'archivio scaricato.

$ tar xzf wiki-js.tar.gz

Passaggio 6: configurare ed eseguire Wiki.js

Crea il file di configurazione dall'esempio.

$ cp config.sample.yml config.yml

Apri il file di configurazione per la modifica.

$ nano config.yml

Trova le seguenti impostazioni del database e aggiorna i loro valori con quelli configurati nel passaggio 3.

# PostgreSQL / MySQL / MariaDB / MS SQL Server only:
host: localhost
port: 5432
user: wikiuser
pass: wikipassword
db: wikidb
ssl: false

Trova la riga bindIP: 0.0.0.0 e aggiornala come segue.

bindIP: 127.0.0.1

Ciò consentirà a WIki.js di ascoltare l'indirizzo di loopback perché utilizzeremo il proxy Nginx per accedervi dall'esterno.

Salva il file premendo Ctrl + X e immettendo Y quando richiesto.

Esegui Wiki.js utilizzando il seguente comando.

$ node server

Riceverai un output simile a conferma dell'avvenuta installazione.

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!

Premi Ctrl + C per interrompere il processo.

Passaggio 7: configurare un servizio Systemd

Il processo di cui sopra per mantenere Wiki.js in esecuzione è temporaneo. Per rendere permanente il processo, dovremo creare un servizio systemd per Wiki.js per eseguirlo come servizio in background. Ciò consentirà a Wiki.js di funzionare attraverso i riavvii del sistema.

Crea un file di servizio systemd per Wiki.js e aprilo per la modifica.

$ sudo nano /etc/systemd/system/wikijs.service

Incolla il seguente codice al suo interno. Sostituisci il valore della variabile User con il nome del tuo utente di 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

Salva il file premendo Ctrl + X e immettendo Y quando richiesto.

Ricarica il demone di sistema.

$ sudo systemctl daemon-reload

Abilita il servizio Wiki.js.

$ sudo systemctl enable wikijs

Passaggio 8: installa Nginx

Rocky Linux viene fornito con una versione precedente di Nginx. Devi scaricare il repository Nginx ufficiale per installare l'ultima versione.

Crea e apri il file /etc/yum.repos.d/nginx.repo per creare il repository Nginx ufficiale.

$ sudo nano /etc/yum.repos.d/nginx.repo

Incolla il seguente codice al suo interno.

[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

Salva il file premendo Ctrl + X e immettendo Y quando richiesto.

Installa il server Nginx.

$ sudo dnf install nginx -y

Verificare l'installazione.

$ nginx -v
nginx version: nginx/1.22.1

Abilita e avvia il server Nginx.

$ sudo systemctl enable nginx --now

Controlla lo stato del server.

$ 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...

Passaggio 9: installa SSL

Utilizzeremo lo strumento Certbot utilizzando lo strumento Snapd per emettere certificati SSL. Richiede il repository EPEL per funzionare.

$ sudo dnf install epel-release

Useremo Snapd per installare Certbot. Installa Snapd.

$ sudo dnf install snapd

Abilita e avvia il servizio Snap.

$ sudo systemctl enable snapd.socket --now

Crea i collegamenti necessari affinché Snapd funzioni.

$ 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

Installa il repository principale di Snapd.

$ sudo snap install core
$ sudo snap refresh core

Installa Cerbot.

$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Genera il certificato. Il seguente comando configurerà automaticamente anche Nginx.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d wiki.example.com

Il comando precedente scaricherà un certificato nella directory /etc/letsencrypt/live/wiki.example.com sul tuo server.

Genera un certificato di gruppo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Esegui un'esecuzione a secco del processo per verificare se il rinnovo SSL funziona correttamente.

$ sudo certbot renew --dry-run

Se non vedi errori, sei a posto. Il tuo certificato si rinnoverà automaticamente.

Passo 10 - Configura SELinux

Eseguire i seguenti comandi per applicare il contesto SELinux corretto alla directory Wiki.js.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/wikijs(/.*)?"
$ sudo restorecon -Rv /var/www/wikijs

Crea una porta per HTTP e assegnala a 3000 per far funzionare Wiki.js con SELinux.

$ sudo semanage port -a -t http_port_t -p tcp 3000

Consenti a Nginx di connettersi alla rete.

$ sudo setsebool -P httpd_can_network_connect 1

Passaggio 11: configurare Nginx

Crea e apri il file /etc/nginx/conf.d/wikijs.conf per la modifica.

$ sudo nano /etc/nginx/conf.d/wikijs.conf

Incolla il seguente codice al suo interno.

# 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 "";
}

Sostituisci la posizione root nel file precedente con la directory sul tuo server.

Salva il file premendo Ctrl + X e immettendo Y quando richiesto.

Apri il file /etc/nginx/nginx.conf per la modifica.

$ sudo nano /etc/nginx/nginx.conf

Aggiungere la riga seguente prima della riga include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Salva il file premendo Ctrl + X e immettendo Y quando richiesto.

Verifica la configurazione di Nginx.

$ sudo nginx -t

Se non vedi errori, significa che sei a posto.

Avvia il servizio Wiki.js.

$ sudo systemctl start wikijs

Ricarica il server Nginx.

$ sudo systemctl reload nginx

Passaggio 12: terminare l'installazione

Visita l'URL https://wiki.example.com per completare l'installazione.

Inserisci i dettagli del tuo account amministratore e l'URL. Disabilita la telemetria deselezionando l'opzione Consenti telemetria. Puoi disabilitarlo anche dal pannello di amministrazione. Fare clic sul pulsante Installa per procedere.

Verrai indirizzato alla pagina di accesso.

Inserisci i dettagli del tuo account e fai clic sul pulsante Accedi per procedere alla pagina di amministrazione.

Ora puoi iniziare a utilizzare Wiki.js.

Conclusione

Questo conclude il nostro tutorial in cui hai imparato come installare Wiki.js su un server Rocky Linux 9. Se hai domande, pubblicale nei commenti qui sotto.