So installierst du Wiki.js auf Rocky Linux 9

Wiki.js ist eine leichtgewichtige Open-Source-Wikisoftware. Sie baut auf dem JavaScript-Framework Node.js auf. Sie kann zum Schreiben von Dokumentationen, Wikis und Webinhalten verwendet werden. Dabei steht Entwicklern ein Markdown-Editor und Nicht-Technikern ein WYSIWYG-Editor zur Verfügung. Er unterstützt mehrere Inhaltstypen, darunter UML-Diagramme, mathematische Ausdrücke in Tex- oder MathML-Syntax und Code. Es enthält mehrere Module für verschiedene Funktionen wie Analysen, Authentifizierung, Protokollierung, Suchmaschinen von Drittanbietern und mehrere Speicherdienste, mit denen du deine Inhalte synchronisieren kannst.

In diesem Lernprogramm lernst du, wie du Wiki.js auf einem Rocky Linux 9 Server installierst und dabei die PostgreSQL-Datenbank und den Nginx-Server für das Proxying nutzt.

Voraussetzungen

  • Ein Server mit Rocky Linux 9.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Ein vollständig qualifizierter Domainname (FQDN), der auf deinen Server zeigt. Für unsere Zwecke verwenden wir wiki.example.com als Domänennamen.
  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo dnf update
    
  • Installiere grundlegende Hilfspakete. Einige von ihnen sind vielleicht schon installiert.
    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Schritt 1 – Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Rocky Linux verwendet die Firewalld Firewall. Überprüfe den Status der Firewall.

$ sudo firewall-cmd --state
running

Die Firewall arbeitet mit verschiedenen Zonen, wobei die öffentliche Zone die Standardzone ist, die wir verwenden werden. Liste alle Dienste und Ports auf, die auf der Firewall aktiv sind.

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

Es sollte die folgende Ausgabe angezeigt werden.

cockpit dhcpv6-client ssh

Wiki.js braucht HTTP- und HTTPS-Ports, um zu funktionieren. Öffne sie.

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

Lade die Firewall neu, um die Änderungen zu übernehmen.

$ sudo firewall-cmd --reload

Schritt 2 – PostgreSQL und Dienstprogramme installieren

Rocky Linux 9 wird mit einer älteren Version von PostgreSQL ausgeliefert. Für unser Tutorial werden wir Postgres 14 installieren.

Installiere das Repository-RPM für PostgreSQL.

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

Installiere den PostgreSQL 14 Server.

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

Initialisiere die Datenbank.

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

Aktiviere und starte den PostgreSQL-Dienst.

$ sudo systemctl enable postgresql-14 --now

Überprüfe den Status des Dienstes.

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

Schritt 3 – PostgreSQL konfigurieren

Melde dich in der PostgreSQL-Shell an.

$ sudo -i -u postgres psql

Erstelle eine neue Datenbank für Wiki.js.

postgres=# CREATE DATABASE wikidb;

Erstelle einen neuen Datenbankbenutzer mit einem sicheren Passwort.

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

Erteile dem Benutzer die Rechte zur Nutzung der Datenbank.

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

Beende die Postgres-Shell.

postgres=# \q

Schritt 4 – Node.js installieren

Wiki.js unterstützt zum Zeitpunkt der Erstellung dieses Tutorials Node v16.

Installiere das Node-Repository mit dem folgenden Befehl.

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

Installiere Node.

$ sudo dnf install nodejs -y

Überprüfe die Installation von Node.

$ node --version
v16.18.0

Schritt 5 – Wiki.js herunterladen

Erstelle einen Ordner, um Wiki.js zu installieren.

$ sudo mkdir -p /var/www/wikijs

Lege den aktuell angemeldeten Benutzer als Eigentümer des Ordners fest.

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

Wechsle in das Verzeichnis und lade das Wiki.js Code-Archiv herunter.

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

Entpacke das heruntergeladene Archiv.

$ tar xzf wiki-js.tar.gz

Schritt 6 – Wiki.js konfigurieren und ausführen

Erstelle die Konfigurationsdatei aus dem Beispiel.

$ cp config.sample.yml config.yml

Öffne die Konfigurationsdatei zur Bearbeitung.

$ nano config.yml

Suche die folgenden Datenbankeinstellungen und aktualisiere ihre Werte mit denen, die in Schritt 3 konfiguriert wurden.

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

Suche die Zeile bindIP: 0.0.0.0 und ändere sie wie folgt.

bindIP: 127.0.0.1

Dadurch wird WIki.js auf der Loopback-Adresse lauschen, da wir den Nginx-Proxy für den Zugriff von außen verwenden werden.

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Führe Wiki.js mit dem folgenden Befehl aus.

$ node server

Du wirst eine ähnliche Ausgabe erhalten, die eine erfolgreiche Installation bestätigt.

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!

Drücke Strg + C, um den Prozess zu beenden.

Schritt 7 – Einrichten eines Systemd-Dienstes

Der obige Prozess, um Wiki.js am Laufen zu halten, ist vorübergehend. Um den Prozess dauerhaft zu machen, müssen wir einen Systemd-Dienst für Wiki.js einrichten, damit es als Hintergrunddienst läuft. So kann Wiki.js auch nach einem Neustart des Systems weiterlaufen.

Erstelle eine systemd-Dienstdatei für Wiki.js und öffne sie zur Bearbeitung.

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

Füge den folgenden Code in die Datei ein. Ersetze den Wert der Variable User durch den Namen deines Systembenutzers.

[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

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Lade den Systemdaemon neu.

$ sudo systemctl daemon-reload

Aktiviere den Wiki.js-Dienst.

$ sudo systemctl enable wikijs

Schritt 8 – Nginx installieren

Rocky Linux wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, musst du das offizielle Nginx-Repository herunterladen.

Erstelle und öffne die Datei /etc/yum.repos.d/nginx.repo zur Erstellung des offiziellen Nginx-Repositorys.

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

Füge den folgenden Code in die Datei ein.

[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

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Installiere den Nginx-Server.

$ sudo dnf install nginx -y

Überprüfe die Installation.

$ nginx -v
nginx version: nginx/1.22.1

Aktiviere und starte den Nginx-Server.

$ sudo systemctl enable nginx --now

Überprüfe den Status des Servers.

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

Schritt 9 – SSL installieren

Wir werden das Certbot-Tool mit dem Snapd-Tool verwenden, um SSL-Zertifikate auszustellen. Es benötigt das EPEL-Repository, um zu funktionieren.

$ sudo dnf install epel-release

Wir werden Snapd verwenden, um Certbot zu installieren. Installiere Snapd.

$ sudo dnf install snapd

Aktiviere und starte den Snap-Dienst.

$ sudo systemctl enable snapd.socket --now

Erstelle die notwendigen Links, damit Snapd funktioniert.

$ 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

Installiere das zentrale Snapd-Repository.

$ sudo snap install core
$ sudo snap refresh core

Installiere Certbot.

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

Erstelle das Zertifikat. Mit dem folgenden Befehl wird auch Nginx automatisch konfiguriert.

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

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/wiki.example.com auf deinem Server heruntergeladen.

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

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

Führe einen Probelauf des Prozesses durch, um zu prüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert.

Schritt 10 – SELinux konfigurieren

Führe die folgenden Befehle aus, um den richtigen SELinux-Kontext auf das Wiki.js-Verzeichnis anzuwenden.

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

Erstelle einen Port für HTTP und weise ihm den Wert 3000 zu, damit Wiki.js mit SELinux funktioniert.

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

Erlaube Nginx, sich mit dem Netzwerk zu verbinden.

$ sudo setsebool -P httpd_can_network_connect 1

Schritt 11 – Nginx konfigurieren

Erstelle und öffne die Datei /etc/nginx/conf.d/wikijs.conf zum Bearbeiten.

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

Füge den folgenden Code in die Datei ein.

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

Ersetze das Stammverzeichnis in der obigen Datei durch das Verzeichnis auf deinem Server.

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Öffne die Datei /etc/nginx/nginx.conf zur Bearbeitung.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size  64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Überprüfe deine Nginx-Konfiguration.

$ sudo nginx -t

Wenn du keine Fehler siehst, bist du startklar.

Starten Sie den Wiki.js-Dienst.

$ sudo systemctl start wikijs

Lade den Nginx-Server neu.

$ sudo systemctl reload nginx

Schritt 12 – Beende die Installation

Rufe die URL https://wiki.example.com auf, um die Installation abzuschließen.

Wiki.js Einrichtungsseite

Gib die Daten deines Administratorkontos und die URL ein. Deaktiviere die Telemetrie, indem du das Häkchen bei der Option Telemetrie zulassen entfernst. Du kannst sie auch über das Administrationspanel deaktivieren. Klicke auf die Schaltfläche Installieren, um fortzufahren.

Du wirst auf die Anmeldeseite weitergeleitet.

Wiki.js Login-Seite

Gib deine Kontodaten ein und klicke auf die Schaltfläche Anmelden, um zur Administrationsseite zu gelangen.

Wiki.js Verwaltungsseite

Jetzt kannst du Wiki.js benutzen.

Fazit

Dies ist der Abschluss unseres Tutorials, in dem du gelernt hast, wie du Wiki.js auf einem Rocky Linux 9 Server installierst. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …