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.
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.
Gib deine Kontodaten ein und klicke auf die Schaltfläche Anmelden, um zur Administrationsseite zu gelangen.
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.