Wiki.js (V 1.0) install on Ubuntu 18.04 LTS - Server

und Debian 9 für DockerContainer

Diese Anleitung entstand 2019 aus mehreren Kommentaren (in english) wie Wiki.js (Version 1.0) zu installieren sei.
Es gibt nun unter https://js.wiki/ , Anleitungen / Dokumentation (in english) für die V 1.0 (Legacy) und der V 2.5 (Stable 2.5.299).

An dieser Stelle sei bei einer Neuinstallation auf die neuste Version (Stable 2.5.299) verwiesen.

Unterschiede:

  • V 1.0.117 nutzt MongoDB (non SQL Datenbank)
  • V 2.5.299 untestützt postgreSQL, mariadb etc. (SQL Datenbanken)
  • ab Version 3.0 soll wohl nur noch postgreSQL untestützt werden

Bitte diesen Umstand bei der Installation von Version 2.5 für die künftige Kompatibilität / Upgrades beachten.


Wiki.js (V 1.0) auf Ubuntu 18.04 LTS - Server installieren

Es sei daran erinnert, daß Sie sich auf einem PRIVATEN Server befinden.


Die Angaben Debian 9 (Stretch) beziehen sich auf eine Minimalinstallation von debian:latest in einem DockerContainer.
Diese Angaben sind nur für die Variante Docker mit minimaler Installationsgröße des Repo debian:latest geeignet.


Vorbereitung des Host-Systems:

  1. Herunterladen des Server - Images:

https://www.ubuntu.com/download/server

  1. Installation starten und entsprechend einrichten
    • einen "Hauptbenutzer" anlegen (wird im Zuge der Installation festgelegt)
    • evt. einen Benutzer für Wiki.js anlegen und mit "SUDO"-rechte versehen (über diesen Benutzer dann alles weitere durchführen)
  2. als den gewünschten Benutzer unter dem der Wiki.js - Server laufen soll einloggen und nachfolgende Befehle ausführen

TIMEZONE setzen (wenn bei der Einrichtung bereits gesetzt -> ignorieren)

sudo echo "tzdata tzdata/Areas select Etc" | debconf-set-selections
sudo echo "tzdata tzdata/Zones/Etc select UTC" | debconf-set-selections
sudo TIMEZONE="Etc/UTC"
sudo echo $TIMEZONE > /etc/timezone

System updaten / upgraden

sudo apt-get update -y
sudo apt-get upgrade -y

benötigte Programme nachinstallieren

sudo apt-get install -y curl wget nano git unzip socat net-tools
sudo apt-get install -y bash-completion
sudo apt-get install -y apt-transport-https
sudo apt-get install -y build-essential
sudo apt-get install -y dirmngr

gilt nur für Debian 9 (Stretch) Docker Minimalversion:

sudo apt-get install -y sudo systemd cron

Note: das fehlte in der Minimalversion von debian:latest für Docker

System updaten / upgraden / "Müll" entsorgen

sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get autoremove -y

Node.js installieren

sudo curl -sL https://deb.nodesource.com/setup_10.x | bash
sudo apt-get install -y nodejs

Check Node.js and npm version

node -v && npm -v

npm update auf letzte Version

sudo npm install -g npm@latest

Download und installiere MongoDB-org 4.0 database

Das mongodb package = Ubuntu Version, ist keine offiziell von MongoDB Inc. unterstützte Version.
Das mongodb-org package wird offiziell von der MongoDB Inc. unterstützt und supportet. siehe hier
Also bitte VORHER prüfen ob eine Ubuntu-eigene-Version bereits drauf ist. Es gibt sonst nur Probleme die keiner haben will.

Ubuntu Altlasten (mongodb) entsorgen (optional)

Ubuntu-MongoDB suchen:

sudo apt list --installed | grep mongodb

Ubuntu-MongoDB deinstallieren:

sudo apt remove -y mongodb

Ubuntu-MongoDB verbannen:

sudo apt purge -y mongodb

offizielle MongoDB-org 4.x database installieren

Eventuell nach einer neuen Version sehen und der Anleitung (engl.) folgen. ---> siehe hier

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
sudo echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

Die Version für Debian 9 (Strech) für Docker Installationen:

sudo echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list 

Auch hier gilt, vorher nachsehen ob sich etwas verändert hat. Link siehe oben

System Update

sudo apt-get update -y

Install MongoDB-org 4.0

sudo apt-get install -y mongodb-org

Check the MongoDB version

mongo --version | head -n 1 
mongod --version | head -n 1

Starten und "enable" (für den Start wenn reboot) MongoDB service

Für mongodb

sudo systemctl start mongodb.service
sudo systemctl enable mongodb.service

oder

sudo service mongodb enable
sudo service mongodb restart

oder für mongod (eher warscheinlich)

sudo systemctl enable mongod.service
sudo systemctl start mongod.service

oder

sudo service mongod enable
sudo service mongod restart

acme installieren (optional)

ACME erzeugt Certifikate die alle 60 Tage automatisch erneuert werden.

Wichtig:
Die Erzeugung der Certifikate funktioniert nur mit den für diesen Server vorhandene Domain! Diese muß auf diesen Server (IP) per DNS-Auflösung erreichbar sein.
Serverfremde Domains (die nicht auf diesen Server zeigen) werden NICHT erzeugt.
Bitte beachtet auch, daß die vorhandenen Sicherheitsverfahren den Netzwerkverkehr zu diesem Server gewährleisten (wird leider oft vergessen).

Wichtiger Hinweis:
Ersetzt bitte folgendes:   DeineEmail@deine_Domain.com    durch eine gültige E-Mail-Adresse 
und                        deine_Domain.com               durch eine gültige Domain

sudo su - root
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh 
./acme.sh --install --accountemail DeineEmail@deine_Domain.com    
source ~/.bashrc
./acme.sh --issue --standalone -d deine_Domain.com --keylength 2048
./acme.sh --issue --standalone -d deine_Domain.com  --keylength ec-256

Check acme.sh Version

Achtung: du bist immernoch root !!!

./acme.sh --version

RSA und ECC/ECDSA certifikate für Deine domain/hostname erhalten

Wenn Du nur Certifikate zum testen benötigst, füge das --staging flag zum Commando hinzu. Beispiel:

acme.sh --issue --standalone **--staging** -d deine_Domain.com --keylength 2048

RSA 2048

acme.sh --issue --standalone -d deine_Domain.com --keylength 2048

ECDSA

acme.sh --issue --standalone -d deine_Domain.com --keylength ec-256

Zum auflisten Deiner Certifikate

./acme.sh --list
exit

Verzeichnis erstellen zum ablegen der Certifikate

We will use /etc/letsencrypt but it can be anything you prefer to store SSL certs.

sudo su - root
mkdir -p /etc/letsencrypt/deine_Domain.com 
mkdir -p /etc/letsencrypt/deine_Domain.com_ecc

Installieren / Kopieren der Certifikate nach /etc/letsencrypt

!!! funktioniert nicht mit fake domain-addressen da keine erstellt wurden !!! Consolenausgaben beachten!

All the certificates will be automatically renewed every 60 days

RSA

./acme.sh --install-cert -d deine_Domain.com --cert-file /etc/letsencrypt/deine_Domain.com/cert.pem
./acme.sh --install-cert -d deine_Domain.com --key-file /etc/letsencrypt/deine_Domain.com/private.key              # CERT fehlt bei fake-domain
./acme.sh --install-cert -d deine_Domain.com --fullchain-file /etc/letsencrypt/deine_Domain.com/fullchain.pem      # CERT fehlt bei fake-domain
#--reloadcmd "sudo systemctl reload nginx.service"

ECC/ECDSA

./acme.sh --install-cert -d deine_Domain.com --ecc --cert-file /etc/letsencrypt/deine_Domain.com_ecc/cert.pem
./acme.sh --install-cert -d deine_Domain.com --key-file /etc/letsencrypt/deine_Domain.com_ecc/private.key          # CERT fehlt bei fake-domain
./acme.sh --install-cert -d deine_Domain.com --fullchain-file /etc/letsencrypt/deine_Domain.com_ecc/fullchain.pem  # CERT fehlt bei fake-domain
#--reloadcmd "sudo systemctl reload nginx.service"
cd ~

Nach dem erhalten der Certifikate

exit vom Benutzer root und gehe zurück zu normal sudo Benutzer (user)

exit

UPDATE / UPGRADE

sudo apt-get update
sudo apt-get upgrade

Download und installiere NGINX vom offiziellen NGINX repo

sudo apt-get install -y nginx

Die nachfolgende Variante wird nur benötigt wenn Debian 9 (Strech) in einer Minimalversion für Docker installiert wird

sudo wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
sudo rm nginx_signing.key
sudo -s
printf "deb https://nginx.org/packages/mainline/debian/ $(uname -r) nginx\ndeb-src https://nginx.org/packages/mainline/debian/ $(uname -r) nginx\n" >> /etc/apt/sources.list.d/nginx_mainline.list

CHECK NGINX VERSION & START SERVICE & CONFIG NGINX

sudo nginx -v

Enable and start NGINX service

sudo service nginx restart
sudo service nginx enable

erstelle diese Verzeichnisse wenn nötig

sudo mkdir -p /etc/nginx
sudo mkdir -p /etc/nginx/conf.d

Run:

sudo nano /etc/nginx/conf.d/wiki.js.conf

and configure NGINX as an HTTPS reverse proxy.
The only thing you need to change in the above config is server_name directive, and potentially proxy_pass directive if you decide to configure some other than 3000 port. Wiki.js uses port 3000 by default.

füge nachfolgendes in die wiki.js.conf ein

entweder einzeln und nur was in den " " bzw. ' ' steht oder als script:

sudo echo "server {" > /etc/nginx/conf.d/wiki.js.conf
sudo echo "    listen [::]:443 ssl http2;" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "    listen 443 ssl http2;" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "    listen [::]:80;" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "    listen 80;" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "    server_name deine_Domain.com;" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "    charset utf-8;" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "    client_max_body_size 50M;" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "    ssl_certificate /etc/letsencrypt/deine_Domain.com/fullchain.pem;" >> /etc/nginx/conf.d/wiki.js.conf        # CERT fehlt bei fake-domain
sudo echo "    ssl_certificate_key /etc/letsencrypt/deine_Domain.com/private.key;" >> /etc/nginx/conf.d/wiki.js.conf      # CERT fehlt bei fake-domain
sudo echo "    ssl_certificate /etc/letsencrypt/deine_Domain.com_ecc/fullchain.pem;" >> /etc/nginx/conf.d/wiki.js.conf    # CERT fehlt bei fake-domain
sudo echo "    ssl_certificate_key /etc/letsencrypt/deine_Domain.com_ecc/private.key;" >> /etc/nginx/conf.d/wiki.js.conf  # CERT fehlt bei fake-domain
sudo echo "        location / {" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "            proxy_set_header Host "'$http_host'";" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "            proxy_set_header X-Real-IP "'$remote_addr'";" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "            proxy_pass http://127.0.0.1:3000;" >> /etc/nginx/conf.d/wiki.js.conf                             **# der Port muß mit dem Port in der wiki-config (config.yml) übereinstimmen!**
sudo echo "            proxy_http_version 1.1;" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "            proxy_set_header Upgrade "'$http_upgrade'";" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo '            proxy_set_header Connection "upgrade";' >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "            proxy_next_upstream error timeout http_502 http_503 http_504;" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "        }" >> /etc/nginx/conf.d/wiki.js.conf
sudo echo "}" >> /etc/nginx/conf.d/wiki.js.conf

oder per Hand via:

sudo nano /path/to/config 

und einzeln selbst schreiben.

ACHTUNG: Bitte immer auf die genaue Schreibweise und Leerzeichen achten!!

Check die NGINX Konfiguration und reload NGINX

sudo nginx -t

RESTART NGINX

sudo service nginx restart
sudo service nginx enable

oder

sudo systemctl enable nginx
sudo systemctl restart nginx

UPDATE / UPGRADE

sudo apt-get update
sudo apt-get upgrade

Installation und setup Wiki.js

Create a document root directory where Wiki.js should reside in

sudo mkdir -p /var/www/wiki.js
cd /var/www/wiki.js

Ändere den Benutzer und die Benutzergruppe

für das Verzeichnis: /var/www/wiki.js zu Deinem gewählten Benutzer (your_user - z.Bsp: wiki)

sudo chown -R your_user_ID:your_user_group_ID /var/www/wiki.js

NOTE: Ersetze your_user_ID mit Deiner non-root user ID und die your_user_group_ID mit der your_user_group_ID die Du für das Wiki erstellt und die ganze Zeit benutzt hattest.
z.Bsp.: non-root user = wiki und hat die userID 1002 und die groupID 1002 also muß der Befehl lauten: sudo chown -R 1002:1002 /var/www/wiki.js

Installation von wiki.js (immernoch nur als einfacher Benutzer ausführen)

führe das nachfolgende direkt im Verzeichnis: /var/www/wiki.js

curl -sSo- https://wiki.js.org/install.sh | bash

das Commando installiert die letzte / aktuellste Wiki.js Applikationsversion

noch im Verzeichnis: /var/www/wiki.js (als Benutzer ausführen)

um die aktuelle Version anzuzeigen

node wiki --version

ALLES bereinigen

sudo apt-get autoremove

WIKI konfigurieren und starten

Bitte bleiben Sie im Verzeichnis: /var/www/wiki.js

node wiki configure

Bitte die Ausgabe nach der Fertigstellung beachten!!

Bitte bleiben Sie im Verzeichnis: /var/www/wiki.js

node wiki start

OPTIONAL

#### Tell PM2 to configure itself as a startup service by running:

/var/www/wiki.js/node_modules/pm2/bin/pm2 startup


#### Finally, save the current PM2 configuration by running the command:

/var/www/wiki.js/node_modules/pm2/bin/pm2 save

#### Your Wiki.js now runs as a background process, using PM2 as its process manager. ####