Wiki.js auf Ubuntu 22.04 LTS installieren

Wiki.js ist eine leichtgewichtige Open-Source-Wiki-Software. 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 Ubuntu 22.04 Server installierst und dabei die PostgreSQL Datenbank und den Nginx Server als Proxy verwendest.

Voraussetzungen

  • Ein Server mit Ubuntu 22.04.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Ein vollständig qualifizierter Domainname (FQDN), der auf deinen Server verweist. Für unsere Zwecke werden wir wiki.example.com als Domänennamen verwenden.
  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo apt update && sudo apt upgrade
    
  • Installiere grundlegende Hilfspakete. Einige von ihnen sind vielleicht schon installiert.
    $ sudo apt install wget curl ca-certificates gnupg gnupg2 nano unzip lsb-release ubuntu-keyring -y
    

Schritt 1 – Firewall konfigurieren

Bevor du die Pakete installierst, musst du zunächst die Firewall so konfigurieren, dass HTTP- und HTTPS-Verbindungen zugelassen werden.

Überprüfe den Status der Firewall.

$ sudo ufw status

Du solltest etwas wie das Folgende sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Erlaube HTTP- und HTTPs-Ports.

$ sudo ufw allow http
$ sudo ufw allow https

Überprüfe den Status zur Bestätigung noch einmal.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Schritt 2 – PostgreSQL und Dienstprogramme installieren

Ubuntu 22.04 wird mit einer älteren Version von PostgreSQL ausgeliefert. Für unser Tutorial werden wir PostgreSQL 14 installieren.

Installiere das Repository für PostgreSQL.

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Importiere den PostgreSQL GPG-Schlüssel.

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null

Aktualisiere die Liste der System-Repositories.

$ sudo apt update

Installiere den PostgreSQL 14 Server.

$ sudo apt install -y postgresql-14

Überprüfe den Status des Dienstes.

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Tue 2022-10-25 06:24:24 UTC; 10min ago
   Main PID: 4032 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Oct 25 06:24:24 wiki systemd[1]: Starting PostgreSQL RDBMS...
Oct 25 06:24:24 wiki systemd[1]: Finished PostgreSQL RDBMS.

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://deb.nodesource.com/setup_16.x | sudo -E bash -

Installiere Node.

$ sudo apt 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

Lösche das Archiv.

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

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

Loading configuration from /var/www/wikijs/config.yml... OK
2022-10-25T06:40:46.294Z [MASTER] info: =======================================
2022-10-25T06:40:46.296Z [MASTER] info: = Wiki.js 2.5.289 =====================
2022-10-25T06:40:46.296Z [MASTER] info: =======================================
2022-10-25T06:40:46.296Z [MASTER] info: Initializing...
2022-10-25T06:40:46.962Z [MASTER] info: Using database driver pg for postgres [ OK ]
2022-10-25T06:40:46.974Z [MASTER] info: Connecting to database...
2022-10-25T06:40:47.067Z [MASTER] info: Database Connection Successful [ OK ]
2022-10-25T06:40:47.345Z [MASTER] warn: DB Configuration is empty or incomplete. Switching to Setup mode...
2022-10-25T06:40:47.345Z [MASTER] info: Starting setup wizard...
2022-10-25T06:40:47.510Z [MASTER] info: Starting HTTP server on port 3000...
2022-10-25T06:40:47.511Z [MASTER] info: HTTP Server on port: [ 3000 ]
2022-10-25T06:40:47.515Z [MASTER] info: HTTP Server: [ RUNNING ]
2022-10-25T06:40:47.515Z [MASTER] info: .......................................................................
2022-10-25T06:40:47.515Z [MASTER] info: 
2022-10-25T06:40:47.516Z [MASTER] info: Browse to http://YOUR-SERVER-IP:3000/ to complete setup!
2022-10-25T06:40:47.516Z [MASTER] info: 
2022-10-25T06:40:47.516Z [MASTER] info: ........................................................................

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

Ubuntu 22.04 wird mit einer älteren Version von Nginx ausgeliefert. Du musst das offizielle Nginx-Repository herunterladen, um die neueste Version zu installieren.

Importiere den offiziellen Nginx-Schlüssel.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Richte das offizielle Repository für Nginx ein.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
  http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Pinne das Repository an, um dem offiziellen Repository den Vorzug vor dem Ubuntu-Repository zu geben.

$ echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
     | sudo tee /etc/apt/preferences.d/99nginx

Aktualisiere die Liste der System-Repositories.

$ sudo apt update

Installiere den Nginx-Server.

$ sudo apt install nginx -y

Überprüfe die Installation.

$ nginx -v
nginx version: nginx/1.22.1

Starte den Nginx-Server.

$ sudo systemctl start nginx

Überprüfe den Status des Dienstes.

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-10-25 06:50:05 UTC; 2s ago
       Docs: https://nginx.org/en/docs/
    Process: 5522 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 5523 (nginx)
      Tasks: 2 (limit: 1030)
     Memory: 1.8M
        CPU: 4ms
     CGroup: /system.slice/nginx.service
             ??5523 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??5524 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Oct 25 06:50:05 wiki systemd[1]: Starting nginx - high performance web server...

Schritt 9 – SSL installieren

Wir müssen Certbot installieren, um das SSL-Zertifikat zu erstellen. Du kannst Certbot entweder über das Repository von Ubuntu installieren oder die neueste Version mit dem Snapd-Tool herunterladen. Wir werden die Snapd-Version verwenden.

Bei Ubuntu 22.04 ist Snapd standardmäßig installiert. Führe die folgenden Befehle aus, um sicherzustellen, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core
$ sudo snap refresh core

Installiere Certbot.

$ sudo snap install --classic certbot

Stelle mit dem folgenden Befehl sicher, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link auf das Verzeichnis /usr/bin erstellst.

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

Führe den folgenden Befehl aus, um das Zertifikat auszustellen.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -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

Überprüfe den Certbot Erneuerungszeitplanungsdienst.

$ sudo systemctl list-timers

Du findest snap.certbot.renew.service als einen der Dienste, die für die Ausführung vorgesehen sind.

NEXT                        LEFT          LAST                        PASSED    UNIT                           ACTIVATES             

.................................................................................................................................
Tue 2022-10-25 00:00:00 UTC 17h left      Tue 2022-10-25 04:49:20 UTC 2h ago    logrotate.timer                logrotate.service
Tue 2022-10-25 02:39:09 UTC 20h left      Tue 2022-10-25 06:47:33 UTC 12min ago apt-daily.timer                apt-daily.service
Tue 2022-10-25 06:02:00 UTC 8h left       n/a                         n/a       snap.certbot.renew.timer       snap.certbot.renew.service

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 – 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 den Root-Speicherort 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 11 – 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

Damit ist unser Tutorium abgeschlossen. Du hast gelernt, wie du Wiki.js auf einem Ubuntu 22.04 Server installierst. Wenn du Fragen hast, schreibe sie unten in die Kommentare.

Das könnte dich auch interessieren …