Automatisiertes ioBroker- und Linux-Update-Skript mit Logging

Einleitung

In der heutigen vernetzten Welt sind regelmäßige Updates für Systemsoftware und Anwendungen entscheidend, um Sicherheit und Stabilität zu gewährleisten. Gerade für ioBroker, eine beliebte Plattform zur Steuerung von Smart-Home-Geräten, und Linux-basierte Systeme ist eine kontinuierliche Aktualisierung wichtig, um von den neuesten Funktionen und Sicherheitsupdates zu profitieren.

Mit diesem Bash-Skript stelle ich eine einfache Lösung vor, die den ioBroker sowie das Linux-Betriebssystem automatisch aktualisiert und dabei alle Schritte in einer Logdatei dokumentiert. Das Skript prüft, ob Updates verfügbar sind, installiert diese und startet den ioBroker bei Bedarf neu. Zusätzlich führt es Systemupdates durch und startet das System automatisch neu, falls dies erforderlich ist. So kannst du sicherstellen, dass dein System stets aktuell ist – ganz ohne manuellen Aufwand. Viel Spaß beim Ausprobieren und Anpassen! 😊

Schritt 1: Skript erstellen

Erstelle zunächst das Bash-Skript. Speichere es als iobroker_update.sh auf deinem System.

Ersetze {Username} durch deinen Usernamen

mkdir /home/{Username}/skripte
mkdir /home/{Username}/skripte/logs

nano /home/{Username}/skripte/iobroker_update.sh

Füge nun folgendes Skript ein:

#!/bin/bash

# ioBroker- und Linux-Update-Skript mit Logging
LOGFILE="/home/iobroker/skripte/logs/iobroker_update.log"

# Funktion zum Schreiben ins Log
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOGFILE"
}

log_message "Update-Skript gestartet..."

# Wechseln zum ioBroker-Verzeichnis
cd /opt/iobroker || { log_message "Fehler: ioBroker-Verzeichnis nicht gefunden!"; exit 1; }

# ioBroker-Update prüfen und durchführen
log_message "Überprüfe auf ioBroker-Updates..."
UPDATE_AVAILABLE=$(iobroker upgrade | grep "Update available")

if [ -n "$UPDATE_AVAILABLE" ]; then
    log_message "Update verfügbar. ioBroker wird aktualisiert..."

    # Führe das Update von ioBroker selbst aus
    if iobroker upgrade self; then
        log_message "ioBroker erfolgreich aktualisiert."

        # Update aller Module durchführen
        if iobroker upgrade; then
            log_message "Alle Module erfolgreich aktualisiert."

            # ioBroker neu starten
            if iobroker restart; then
                log_message "ioBroker wurde erfolgreich neu gestartet."
            else
                log_message "Fehler: ioBroker konnte nach dem Update nicht neu gestartet werden."
            fi
        else
            log_message "Fehler beim Update der ioBroker-Module."
        fi
    else
        log_message "Fehler beim Update von ioBroker."
    fi
else
    log_message "Kein Update verfügbar. ioBroker ist auf dem neuesten Stand."
fi

# Linux-Systemupdates durchführen
log_message "Überprüfe und installiere Systemupdates..."

# Paketlisten aktualisieren
if sudo apt update -y; then
    log_message "Paketlisten erfolgreich aktualisiert."

    # Sicherheits- und Systemupdates installieren
    if sudo apt upgrade -y; then
        log_message "Systemupdates erfolgreich installiert."

        # Optional: Neustart, falls benötigt
        if [ -f /var/run/reboot-required ]; then
            log_message "Neustart erforderlich. System wird jetzt neu gestartet."
            sudo reboot
        else
            log_message "Kein Neustart erforderlich."
        fi
    else
        log_message "Fehler bei der Installation der Systemupdates."
    fi
else
    log_message "Fehler beim Aktualisieren der Paketlisten."
fi

log_message "Update-Skript beendet."

Speicher und schließe das Skript mit STRG+O und STRG+X

Schritt 2: sudo ohne Passwortabfrage für das Skript einrichten

Damit das Skript ohne Passwortabfrage ausgeführt werden kann, müssen wir die sudoers-Datei anpassen. Das gibt dem Benutzer die Erlaubnis, sudo-Befehle wie apt update, apt upgrade und reboot ohne Passwort auszuführen.

1. Öffne die sudoers-Datei mit dem Befehl:

      sudo visudo
      

      2. Füge folgende Zeile am Ende der Datei hinzu (ersetze username durch den tatsächlichen Namen des Benutzers, der das Skript ausführt):

      username ALL=(ALL) NOPASSWD: /usr/bin/apt update, /usr/bin/apt upgrade, /usr/sbin/reboot
      

      3. Speichere die Änderungen und verlasse den Editor.

      Schritt 3: Skript ausführbar machen

      Um das Skript ausführen zu können, müssen wir die Berechtigungen anpassen:

      chmod +x /home/iobroker/skripte/iobroker_update.sh
      

      Schritt 4: Automatische Ausführung mit cron

      Du kannst das Skript in regelmäßigen Abständen automatisch ausführen lassen, indem du einen cron-Job einrichtest.

      1. Öffne die Crontab-Datei für den Benutzer:

      crontab -e
      

      2. Füge folgende Zeile hinzu, um das Skript täglich um 3 Uhr morgens auszuführen:

      0 3 * * * /home/iobroker/skripte/iobroker_update.sh
      

      Hinweis: Die Zeitangaben kannst du nach Bedarf anpassen.

      3. Speichere und schließe die Crontab-Datei.


      WireGuard Site-to-Site VPN Verbindung mit zwei Linux Server

      Für die Einrichtung einer WireGuard Site-to-Site VPN-Verbindung zwischen zwei Servern benötigen wir zwei Linux-Server, auf denen das Betriebssystem installiert ist. Im folgenden Beispiel werden wir davon ausgehen, dass beide Server über das gleiche Betriebssystem (z. B. Ubuntu oder Debian) verfügen.

      Beispiel Daten die in dieser Doku Verwendet werden:

      Subnet Server-1: 192.168.0.0/24
      Subnet Server-2: 192.168.178.0/24

      Beide Server

      Zunächst solltest du sicherstellen, dass beide Server auf dem neuesten Stand sind, indem du alle verfügbaren Updates installierst. Dies kannst du mit den folgenden Befehlen tun:

      apt-get update && apt-get upgrade -y
      

      Anschließend installieren wir WireGuard auf beiden Servern. Auf beiden Servern kannst du dies mit dem folgenden Befehl tun:

      apt install wireguard
      

      Damit der Server Daten zwischen den Netzwerken weiterleiten kann, muss die IP-Weiterleitung aktiviert werden. Dies erfolgt durch die Bearbeitung der Datei /etc/sysctl.conf. Öffne die Datei mit einem Texteditor:

      nano /etc/sysctl.conf
      
      uncomment net.ipv4.ip_forward=1
      

      Suche die Zeile mit net.ipv4.ip_forward=1 und entferne das Kommentarzeichen (#) davor. Dadurch wird die IP-Weiterleitung aktiviert. Speichere die Datei und schließe den Editor. Wende die Änderungen an, indem du den folgenden Befehl ausführst:

      sysctl -p
      

      WireGuard benötigt für jede Verbindung ein Public/Private Key-Paar. Dies kannst du auf jedem Server generieren:

      cd /etc/wireguard
      
      umask 077; wg genkey | tee privatekey | wg pubkey > publickey
      

      Dieser Befehl generiert ein PrivateKey und ein PublicKey, die du später in der Konfiguration verwenden wirst.

      Server 1

      Für Server 1 erstellen wir die Datei wg0.conf, welche die Verbindungseinstellungen enthält. Öffne dafür die Konfigurationsdatei:

      nano /etc/wireguard/wg0.conf
      

      Füge die folgenden Konfigurationen ein, wobei du die Platzhalter <site-1 private-key> und <site-2 public-key> durch die entsprechenden Schlüssel ersetzt:

      [Interface]
      PrivateKey = <site-1 private-key>
      Address = 10.0.0.1/24
      SaveConfig = true
      PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
      PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
      ListenPort = 51820
      
      [Peer]
      PublicKey = <site-2 public-key>
      AllowedIPs = 10.0.0.0/24, 192.168.178.0/24
      PersistentKeepalive = 25
      

      Erklärung:

      • PrivateKey: Der private Schlüssel von Server 1.
      • Address: Die IP-Adresse, die Server 1 im VPN-Netzwerk verwenden soll.
      • PostUp und PostDown: Befehle, die ausgeführt werden, wenn die VPN-Verbindung gestartet oder gestoppt wird, um die Netzwerkrouten zu konfigurieren.
      • Peer: Hier definieren wir Server 2 als Peer und geben den öffentlichen Schlüssel von Server 2 sowie die erlaubten IP-Bereiche an.

      Server 2

      Für Server 2 erstellst du ebenfalls eine wg0.conf-Datei. Öffne die Konfigurationsdatei mit:

      nano /etc/wireguard/wg0.conf
      

      Füge die folgenden Konfigurationen ein, wobei du die Platzhalter <site-2 private-key> und <site-1 public-key> durch die entsprechenden Schlüssel ersetzt und den Platzhalter <FQDN> durch deinen Öffentlichen DYNDNS Namen.

      [Interface]
      PrivateKey = <site-2 private-key>
      Address = 10.0.0.3/24
      SaveConfig = true
      PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
      PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
      
      [Peer]
      PublicKey = <site-1 public-key>
      Endpoint = <FQDN>:51820
      AllowedIPs = 10.0.0.0/24, 192.168.0.0/24
      PersistentKeepalive = 25
      

      Erklärung:

      • PrivateKey: Der private Schlüssel von Server 2.
      • Address: Die IP-Adresse, die Server 2 im VPN-Netzwerk verwenden soll.
      • Endpoint: Die öffentliche IP-Adresse oder der FQDN von Server 1.
      • AllowedIPs: Hier definieren wir, welche IP-Bereiche von Server 2 erreichbar sind.

      Beide Server

      Nachdem die Konfigurationsdateien auf beiden Servern erstellt wurden, kannst du die VPN-Verbindung starten:

      wg-quick up wg0
      

      Um den Status der VPN-Verbindung zu überprüfen, kannst du den folgenden Befehl verwenden:

      wg show
      

      Um sicherzustellen, dass die VPN-Verbindung bei jedem Neustart des Servers automatisch gestartet wird, kannst du WireGuard so konfigurieren, dass es beim Hochfahren des Systems startet:

      systemctl enable wg-quick@wg0
      

      Damit ist die VPN-Verbindung automatisch aktiv, wenn der Server hochfährt.

      Wenn man den Wireguard Dienst beenden will muss man folgenden Befehl verwenden.

      wg-quick down wg0
      

      Mit dieser Konfiguration hast du nun eine funktionierende WireGuard Site-to-Site VPN-Verbindung zwischen zwei Linux-Servern eingerichtet.


      Yourls URL Shorter unter Linux installieren

      apt install lamp-server^
      
      mysql
      
      CREATE DATABASE yourls; 
      
      CREATE USER 'yourlsuser'@'localhost' IDENTIFIED BY 'password_here';
      
      GRANT ALL PRIVILEGES ON yourls.* TO 'yourlsuser'@'localhost';
      
      FLUSH PRIVILEGES;
      EXIT;
      
      apt install git
      
      cd /var/www/
      git clone https://github.com/YOURLS/YOURLS.git
      
      mv YOURLS yourls
      
      cd yourls/user
      cp config-sample.php config.php
      
      nano config.php
      
      chown -R www-data:www-data /var/www/yourls
      chmod -R 775 /var/www/yourls
      
      nano /etc/apache2/apache2.conf
      
      Change the: AllowOverride None to AllowOverride All
      a2enmod rewrite
      
      nano /etc/apache2/sites-available/yourls.conf
      
      &lt;VirtualHost *:80>
          ServerName short.domain.com
          DocumentRoot "/var/www/yourls"
      
          &lt;Directory "/var/www/yourls">
              Require all granted
              Options Indexes FollowSymLinks
              AllowOverride All
              Order allow,deny
              Allow from all
          &lt;/Directory>
      
         ErrorLog ${APACHE_LOG_DIR}/error.log
         CustomLog ${APACHE_LOG_DIR}/access.log combined
         
      &lt;/VirtualHost>
      
      a2ensite yourls.conf
      
      service apache2 restart 
      
      http://domain.com/admin
      
      chmod 0600 /var/www/yourls/user/config.php
      
      apt install certbot python3-certbot-apache
      
      certbot --apache -m master@domain.com -d cloud.domain.com
      

      Nextcloud – Datenspeicher auf eine Mount Point umziehen

      Ich wollte meinen Nextcloud Speicher auf mein NAS umziehen.

      Bedeutet die Nextcloud läuft weiterhin auf einer VM nur die Hochgeladenen Dateien sollen auf dem NAS liegen.

      Vorbereitungen

      Als erstes musst du einen neuen User auf deinem NAS erstellen.

      NAS Mounten

      Gehe hierfür in den fstab

      nano /etc/fstab
      
      //IP-Adresse_vom_NAS/Freigabe_Ordner  /mountpoint_Verzeichniss cifs username=Username_vom_NAS,password=Passwort_vom_NAS,uid=33,gid=33 0 0
      

      Systemlink erstellen

      ln -s /Pfad/zum/MountPoint /Pfad/zum/symlink /Pfad/zum/Systemlink
      

      Rechte setzen

      chown -R www-data:www-data /Pfad/zum/Systemlink
      
      chmod -R 755 /Pfad/zum/Systemlink
      

      Nextcloud – Daten Automatisch löschen

      Ich hatte die Anforderung das die Daten in der Nextcloud nach 30 Tagen automatisch gelöscht werden sollen. Dann habe ich mich hingesetzt und ein Bash Skripte geschrieben. Ebenfalls sollten bestimmte User ausgenommen werden. Das habe ich auch mit aufgenommen.

      #!/bin/sh
      # Script zum löschen der Nextcloud Dateien nach X Tagen
      
      # 0 = 24 Stunden
      LOESCHEN_NACH_TAGEN=29
      NEXTCLOUD_DATA=/mnt/ncdata
      
      dirs=$(find $NEXTCLOUD_DATA -maxdepth 1 -type d -printf "%f\n" | awk  '!match($0,/^(ncdata|Allgemein|appdata_oc65lc0lmz8d|root|files_external|\
      Admin|\
      8561CAA3-924D-4591-9AB4-2077C4076AD3|\
      B8F060D2-A833-4F3D-AD19-4992243E587E|\
      F3031267-8C27-4141-8826-6CA337742B67\
      )$/)')
      
      echo "\nFolgende Ordner werden gescannt:"
      echo $dirs
      
      for d in $dirs; do
          if [ -d "$NEXTCLOUD_DATA/$d/files" ]; then
            echo "\n\n#############################################################################"
            echo "\nPruefe auf Daten im Benutzerordner $NEXTCLOUD_DATA/$d/files - diese Dateien werden gelöscht:"
            find $NEXTCLOUD_DATA/$d/files/ -type f -ctime +$LOESCHEN_NACH_TAGEN -delete
            find $NEXTCLOUD_DATA/$d/files/ -mindepth 1 -type d -ctime +$LOESCHEN_NACH_TAGEN -delete
            echo "\nExplizite Bereinigung und Pruefung des Benutzers $d auf Konsistenz"
            sudo -u www-data /usr/bin/php /var/www/nextcloud/occ files:scan --path $d/files
          else
            echo "\n\n#############################################################################"
            echo "\n$d wird uebersprungen, da der Ordner $NEXTCLOUD_DATA/$d/files nicht vorhanden ist"
          fi
      done
      
      
      for d in $dirs; do
          if [ -d "$NEXTCLOUD_DATA/$d/files_trashbin/files" ]; then
            echo "\n\n#############################################################################"
            echo "\nPruefe auf Daten im Benutzerordner $NEXTCLOUD_DATA/$d/files - diese Dateien werden gelöscht:"
            find $NEXTCLOUD_DATA/$d/files/ -type f -ctime +$LOESCHEN_NACH_TAGEN -delete
            find $NEXTCLOUD_DATA/$d/files/ -mindepth 1 -type d -ctime +$LOESCHEN_NACH_TAGEN -delete
            echo "\nExplizite Bereinigung und Pruefung des Benutzers $d auf Konsistenz"
            sudo -u www-data /usr/bin/php /var/www/nextcloud/occ files:scan --path $d/files
          else
            echo "\n\n#############################################################################"
            echo "\n$d wird uebersprungen, da der Ordner $NEXTCLOUD_DATA/$d/files nicht vorhanden ist"
          fi
      done
      
      
      echo "\n\n#############################################################################"
      echo "\nFinale Bereinigung und pruefen der Benutzerdaten auf Konsistenz"
      sudo -u www-data /usr/bin/php /var/www/nextcloud/occ files:scan --all
      sudo -u www-data /usr/bin/php /var/www/nextcloud/occ files:scan-app-data
      sudo -u www-data /usr/bin/php /var/www/nextcloud/occ files:cleanup
      
      echo "\nScript abgeschlossen"
      
      

      Im Anschluss muss noch das Skript ausführbar gemacht werden und in den Crontab eingebunden werden.

      sudo chmod +x ./Skriptname.sh
      
      sudo crontab -e
      
      0 0 * * * /root/nextcloud_autodelete.sh > /var/log/nextcloud_autodelete_`date +\%Y-\%m-\%d_\%H:\%M:\%S-cron.log`
      
      

      Heimdall installation unter Linux im Docker

      Was ist Heimdall

      Heimdall ist ein Dashboard mit dem du dir all deine Webanwendungen organisieren kannst. Es ist auch möglich eine Suchzeile für Google, Bing und DuckDuckGo einzubinden.

      Installation

      Docker

      apt-get update &amp;&amp; apt-get upgrade -y
      
      apt install docker.io docker-compose -y 
      
      mkdir /heimdall
      
      cd /heimdall
      
      mkdir /heimdall-data
      
      nano docker-compose.yml
      
      version: "2.2"
      services:
        heimdall:
          image: linuxserver/heimdall
          container_name: heimdall
          volumes:
            - /heimdall-data:/config
          environment:
            - PUID=1000
            - PGID=1000
            - TZ=Europe/Berlin
          ports:
            - 80:80
            - 443:443
          restart: unless-stopped
      
      docker-compose up -d
      


      OpenVPN in Proxmox LXC Container installieren

      Was ist OpenVPN überhaupt?

      OpenVPN ist eine Opensource VPN Lösung. Diese kannst du dir in daheim installieren und im Anschluss aus der Ferne auf dein Netzwerk zugreifen.

      Besonderheiten im LXC Container

      OpenVPN in einem LXC Container zu installieren ist nicht ganz so einfach, da man hier am Proxmox Server selber ein par Einstellungen machen muss.

      Installation

      Erstelle dir als erstes einen neuen LXC Container. Nach dem erstellen installiere zunächst einmal die wichtigsten Updates.

      apt-get update &amp;&amp; apt-get upgrade -y
      

      Einstellungen tätigen

      Wenn die Updates installiert sind fahre den Container herunter, da man am Proxmox Server selber nun ein par zwei Einstellungen tätigen muss.

      Schalte dich hierfür per Shell auf deinen Host auf und gib den folgenden Befehl ein. Denke aber daran die richtige Container Nummer anzugeben. 123 steht hier nur als Beispiel.

      nano /etc/pve/lxc/123.conf
      

      Füge am Ende der Datei diese zwei Zeilen ein.

      lxc.cgroup2.devices.allow: c 10:200 rwm
      lxc.mount.entry: /dev/net dev/net none bind,create=dir
      

      Mit Strg + O speicherst du die Datei und mit Strg + X schließt du den Editor.

      Jetzt müssen wir nur noch die Berechtigungen anpassen das machst du mit:

      chown 100000:100000 /dev/net/tun
      

      Kontrolliere im Anschluss ob die Berechtigungen auch richtig gesetzt wurden.

      ls -l /dev/net/tun
      
      #########Hier müsste nun diese Ausgabe am Bildschirm erscheinen#########
      
      crw-rw-rw- 1 100000 100000 10, 200 Dec 22 13:26 /dev/net/tun
      

      Wenn das passt kannst du den Container wieder starten entweder über die GUI oder per CLI mit

      pct start 123
      

      Wechsle nun wieder zur Shell des LXC Containers. Hier gibst du folgenden Befehle ein.

      wget https://git.io/vpn -O openvpn-install.sh &amp;&amp; bash openvpn-install.sh
      

      OpenVPN installieren

      Nun wird das Skript heruntergeladen und ausgeführt.

      Im ersten Schritt wird gefragt wie die Server Adresse lautet. Hier gibst du deine Domain oder DynDNS an.

      Als zweitest wirst du gefragt mit welchem Protokoll OpenVPN arbeiten soll. Hier kannst du einfach mit Enter zum nächsten Schritt gehen. Es wird automatisch das UDP Protokoll verwendet.

      Welcher Port soll OpenVPN verwenden? Dies kannst du in diesem Schritt angeben entweder du Bestätigst mit Enter, dann wird der Port 1194 verwendet oder du gibst einen anderen Port wie zum Beispiel 5987 an.

      Der vorletzte Schritt heißt DNS. Hier kannst du auswählen welcher DNS Server verwendet wird. Standardmäßig ist es die Nummer 1.

      Nun kannst du noch im letzten Schritt deinen ersten VPN User anlegen. Gib hierfür einfach den Namen ein den du hierfür vergeben möchtest.

      Neue User anlegen

      Um weitere User anlegen zu können musst du das Skript ausführbar machen. Dies machst du mit

      chmod +x ./openvpn-install.sh
      

      Jetzt kannst du das Skript mit diesem Befehl ausführen.

      ./openvpn-install.sh
      

      Quellen

      OpenVPN in LXC – Proxmox VE
      openvpn-install/openvpn-install.sh at master · Nyr/openvpn-install · GitHub


      Raspberry Pi Image Sicherung

      Du möchtest ein Image deines Raspberry Pis im laufenden Betrieb machen. Dann verwende folgende Befehle.

      Sichern

      Ermittle die Bezeichnung deiner SD-Karte

      sudo fdisk -l
      

      Erstelle das Image mit folgendem Befehl

      sudo dd if=/dev/mmcblk0 of=/"Zielverzeichniss"/pibackup.img
      
      Mit Datum:
      sudo dd if=/dev/mmcblk0 of=/"Zielverzeichniss"/pibackup`date-l`.img
      
      Mit Uhrzeit:
      sudo dd if=/dev/mmcblk0 of=/"Zielverzeichniss"/pibackup`date +%H%M%S`.img
      

      Wiederherstellen

      sudo dd if=/"Quellverzeichnis"/pibackup.img of=/dev/"Name_der_SD-Karte"
      

      WordPress Installation unter Linux

      Updaten

      apt-get update
      apt-get upgrade
      

      Schritt 1 – Installiere einen MySQL Server

      apt-get -y install mysql-server
      mysql_secure_installation
      
      $ mysql_secure_installation
      NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
      In order to log into MySQL to secure it, we'll need the current
      password for the root user. If you've just installed MySQL, and
      you haven't set the root password yet, the password will be blank,
      so you should just press enter here.
      
      Enter current password for root (enter for none):
      OK, successfully used password, moving on...
      
      Setting the root password ensures that nobody can log into the MySQL
      root user without the proper authorisation.
      
      You already have a root password set, so you can safely answer 'n'.
      
      Change the root password? [Y/n] n
      ... skipping.
      
      By default, a MySQL installation has an anonymous user, allowing anyone
      to log into MySQL without having to have a user account created for
      them. This is intended only for testing, and to make the installation
      go a bit smoother. You should remove them before moving into a
      production environment.
      
      Remove anonymous users? [Y/n] y
      ... Success!
      
      Normally, root should only be allowed to connect from 'localhost'. This
      ensures that someone cannot guess at the root password from the network.
      
      Disallow root login remotely? [Y/n] y
      ... Success!
      
      By default, MySQL comes with a database named 'test' that anyone can
      access. This is also intended only for testing, and should be removed
      before moving into a production environment. 
      
      Remove test database and access to it? [Y/n] y
      - Dropping test database...
      ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
      ... Failed! Not critical, keep moving...
      - Removing privileges on test database...
      ... Success!
      
      Reloading the privilege tables will ensure that all changes made so far
      will take effect immediately. 
      
      Reload privilege tables now? [Y/n] y
      ... Success!
      
      Cleaning up...
      
      All done! If you've completed all of the above steps, your MySQL
      installation should now be secure.
      
      Thanks for using MySQL!
      

      Schritt 2 – Erhöhe die Sicherheit deines MySQL Servers

      mysql -u root -p
      
      create database wordpress;
      create user wordpress@localhost identified by 'mein_passwort';
      grant all privileges on wordpress.* to wordpress@localhost;
      flush privileges;
      exit;
      

      Schritt 4 – Apache installieren

      apt-get update
      apt-get install apache2 php7.4 php7.4-mysql libapache2-mod-php7.4
      service apache2 restart
      apt-get install php7.4-xml php7.4-curl php7.4-gd php7.4-mbstring
      apt-get install php7.4-bz2 php7.4-zip php7.4-xml php7.4-curl
      apt-get install php7.4-json php7.4-opcache php7.4-readline
      

      Konfiguration

      nano /etc/apache2/sites-available/wordpress.conf
      
      &lt;VirtualHost *:80>
          ServerAdmin master@domain.com
          DocumentRoot /var/www/html/wordpress/
          ServerName festival.it-hense.de
      
          Alias /nextcloud "/var/www/html/wordpress/"
      
          &lt;Directory /var/www/html/wordpress/>
             Options +FollowSymlinks
             AllowOverride All
             Require all granted
               &lt;IfModule mod_dav.c>
                 Dav off
               &lt;/IfModule>
             SetEnv HOME /var/www/html/wordpress
             SetEnv HTTP_HOME /var/www/html/wordpress
          &lt;/Directory>
      
          ErrorLog ${APACHE_LOG_DIR}/error.log
          CustomLog ${APACHE_LOG_DIR}/access.log combined
      
      &lt;/VirtualHost>
      
      a2ensite wordpress.conf
      a2enmod rewrite
      a2enmod ssl
      a2enmod headers
      a2enmod env
      a2enmod dir
      a2enmod mime
      service apache2 restart
      

      PHP konfiguration

      sudo nano /etc/php/7.4/apache2/php.ini
      
      file_uploads = On
      max_execution_time = 300
      memory_limit = 256M
      post_max_size = 16G
      max_input_time = 60
      max_input_vars = 4440
      session.gc_maxlifetime = 7200
      sudo service apache2 restart
      

      Schritt 5 – WordPress herunterladen und konfigurieren

      cd /tmp
      wget https://wordpress.org/latest.tar.gz
      tar -zxvf latest.tar.gz
      mv wordpress /var/www/html/
      chown www-data.www-data /var/www/html/wordpress/* -R
      

      Nun nur noch die Seite mittels der IP / Hostname oder Domain ansurfen und WordPress fertig einrichten.


      MediaWiki Installation

      LAMP-Server installieren

      Installiere zunächst den Apache und den MariaDB-Server mit dem folgenden Befehl:

      sudo apt-get install apache2 mariadb-server -y
      

      Sobald beide Pakete installiert sind, musst du das Ondrej PHP-Repository zu Ihrem System hinzufügen. Du kannst es mit dem folgenden Befehl hinzufügen:

      sudo apt-get install software-properties-common -y
      sudo add-apt-repository ppa:ondrej/php -y
      

      Sobald das Repository installiert ist, aktualisiere das Repository und installiere PHP zusammen mit allen erforderlichen PHP-Bibliotheken:

      sudo apt-get update -y
      sudo apt install php7.3 libapache2-mod-php7.3 php7.3-common php7.3-gmp php7.3-curl php7.3-intl php7.3-mbstring php7.3-xmlrpc php7.3-mysql php7.3-gd php7.3-xml php7.3-cli php7.3-zip php7.3-imagick
      

      Sobald alle Pakete installiert sind, öffne die Datei php.ini mit dem folgenden Befehl:

      sudo nano /etc/php/7.3/apache2/php.ini
      

      Nehme die folgenden Änderungen vor:

      memory_limit = 1024M
      upload_max_filesize = 16G
      post_max_size = 16G
      date.timezone = Europe/Berlin
      

      Speicher und schließe die Datei, starte dann den Apache und MariaDB-Dienst und ermögliche ihnen, beim Booten zu starten:

      sudo systemctl start apache2
      sudo systemctl enable apache2
      sudo systemctl start mysql
      sudo systemctl enable mysql
      

      MariaDB konfigurieren

      Sicher zunächst die MariaDB-Installation mit dem folgenden Befehl:

      sudo mysql_secure_installation
      

      Beantworten alle Fragen wie unten gezeigt:

      Enter current password for root (enter for none):
      Set root password? [Y/n]: N
      Remove anonymous users? [Y/n]: Y
      Disallow root login remotely? [Y/n]: Y
      Remove test database and access to it? [Y/n]:  Y
      Reload privilege tables now? [Y/n]:  Y
      

      Sobald die MariaDB gesichert ist, melde dich bei der MariaDB-Shell an:

      sudo mysql
      

      Erstelle dann eine Datenbank und einen Benutzer für Mediawiki:

      CREATE DATABASE mediadb;
      CREATE USER 'media'@'localhost' IDENTIFIED BY 'password';
      

      Als nächstes erteile dem mediadb alle Privilegien mit dem folgenden Befehl:

      GRANT ALL ON mediadb.* TO 'media'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
      

      Als nächstes leere die Privilegien und verlassen Sie die MariaDB-Shell:

      FLUSH PRIVILEGES;
      EXIT;
      

      Mediawiki installieren

      Lade zunächst die neueste Version von Mediawiki von der offiziellen Website herunter:

      wget https://releases.wikimedia.org/mediawiki/1.31/mediawiki-1.31.0.tar.gz
      

      Wenn der Download abgeschlossen ist, extrahiere die heruntergeladene Datei mit dem folgenden Befehl:

      tar -xvzf mediawiki-1.31.0.tar.gz
      

      Kopiere anschließend das extrahierte Verzeichnis in das Apache-Wurzelverzeichnis und gebe die entsprechenden Berechtigungen ein:

      sudo cp -r mediawiki-1.31.0 /var/www/html/mediawiki
      sudo chown -R www-data:www-data /var/www/html/mediawiki
      sudo chmod -R 777 /var/www/html/mediawiki
      

      Erstelle anschließend eine virtuelle Apache-Hostdatei für Mediawiki mit dem folgenden Befehl:

      sudo nano /etc/apache2/sites-available/mediawiki.conf
      

      füge die folgenden Zeilen hinzu:

      &lt;VirtualHost *:80>
      ServerAdmin admin@example.com
      DocumentRoot /var/www/html/mediawiki/
      ServerName Hier die IP des Servers eintragen
      &lt;Directory /var/www/html/mediawiki/>
      Options +FollowSymLinks
      AllowOverride All
      &lt;/Directory>
      ErrorLog /var/log/apache2/media-error_log
      CustomLog /var/log/apache2/media-access_log common
      &lt;/VirtualHost>
      

      Speicher die Datei und aktiviere dann die virtuelle Hostdatei und das Apache Umschreibmodul mit dem folgenden Befehl:

      sudo a2ensite mediawiki.conf
      sudo a2enmod rewrite
      

      Starte schließlich den Apache-Webserver neu, um die Änderungen vorzunehmen:

      sudo systemctl restart apache2
      

      Auf Mediawiki zugreifen

      Öffne nun den Webbrowser und gebe die IP-Adresse ein. Du wirst auf die folgende Seite weitergeleitet:

      Klicken Sie nun auf die Schaltfläche Wiki einrichten. Du solltest die folgende Seite sehen:

      Wähle hier deine Wiki-Sprache und klicke auf die Schaltfläche Fortfahren. Du solltest die folgende Seite sehen:

      Klicke nun auf die Schaltfläche Fortfahren. Du solltest die folgende Seite sehen:

      Gebe nun die Datenbankdaten an und klicke auf die Schaltfläche Fortfahren. Du solltest die folgende Seite sehen:

      Wähle nun die Speicher-Engine aus und klicken Sie auf die Schaltfläche Fortfahren. Du solltest die folgende Seite sehen:

      Gebe nun deinen Wiki-Sitennamen, deinen Benutzernamen und dein Passwort ein. Klicke dann auf die Schaltfläche Fortfahren. Du solltest die folgende Seite sehen:

      Markiere nun alle gewünschten Einstellungen und klicke im Anschluss auf die Schaltfläche Fortfahren. Du solltest die folgende Seite sehen:

      Klicke nun auf die Schaltfläche Fortfahren, um die Installation zu starten. Du solltest die folgende Seite sehen:

      Klicke nun auf die Schaltfläche Fortfahren. Du solltest die folgende Seite sehen:

      Hier musst du die Datei LocalSettings.php herunterladen und in das MediaWiki-Stammverzeichnis legen.

      /var/www/html/mediawiki
      

      Öffne nun deinen Webbrowser und gebe die IP-Adresse ein. Du solltest deine MediaWiki-Seite im folgenden Bild sehen:

      Weitere Domains hinzufügen

      Wenn das Wiki von mehreren IPs/Hostnamen bzw Domains erreicht werden soll muss das noch konfiguriert werden.
      Öffne dazu mit dem Nanoeditor die Config

      sudo nano /etc/apache2/sites-available/mediawiki.conf
      

      Füge hier das ganze nochmal ein und ändere die Serveradresse ab

      Es muss aber auch noch in der LocalSettings.php angepasst werden.

      sudo nano /var/www/html/mediawiki/LocalSetting.php
      

      WordPress Cookie Plugin von Real Cookie Banner