Administration des Wiki-Linux-Servers

Installation

Update

$ sudo apt update && sudo apt list --upgradable && sudo apt upgrade -y

Hostname

Ersetze localhost durch Name plus Domain.

$ sudo nano /etc/hostname

bkb.wiki 
$ sudo nano /etc/hosts

127.0.0.1 localhost 
127.0.1.1 bkb.wiki bkb

Zeitzone setzen

$ sudo timedatectl set-timezone Europe/Berlin

Statische Adresse einrichten

Current DNS Server: 192.168.134.121
inet 192.168.134.10  
netmask 255.255.255.0  
broadcast 192.168.134.255

Gateway ermitteln:

$ ip r | grep ^def
default via 192.168.134.252 dev ens160 proto dhcp src 192.168.134.10 metric 100
$ sudo nano /etc/netplan/00-installer-config.yaml 

network:
renderer: networkd
ethernets:
  ens160:
    addresses: [192.168.134.10/24]
    routes:
     - to: default
       via: 192.168.134.252
    nameservers:
      addresses: [192.168.134.121]
version: 2
$ sudo netplan apply

Apache installieren

$ sudo apt install apache2 apache2-docs apache2-utils
$ sudo systemctl status apache2
$ sudo apache2ctl configtest
$ sudo systemctl restart apache2
$ sudo a2dissite 000-default.conf

Firewall einrichten

$ sudo ufw app list

Available applications:
 Apache
 Apache Full
 Apache Secure
 OpenSSH
 syncthing
 syncthing-gui
$ sudo ufw allow 'Apache Full'
$ sudo ufw allow OpenSSH
$ sudo ufw enable
$ sudo ufw status

Ordner anlegen

$ sudo mkdir /var/www/html/bkb.wiki
$ sudo mkdir /var/www/html/bkb.wiki/public_html
$ sudo mkdir /var/www/html/bkb.wiki/logs
$ sudo mkdir /var/www/html/bkb.wiki/backups
Ordner für test.wiki
$ sudo mkdir /var/www/html/test.wiki
$ sudo mkdir /var/www/html/test.wiki/public_html
$ sudo mkdir /var/www/html/test.wiki/logs
$ sudo mkdir /var/www/html/test.wiki/backups
Ordner für limesurvey
$ sudo mkdir /var/www/html/limesurvey
$ sudo mkdir /var/www/html/limesurvey/public_html
$ sudo mkdir /var/www/html/limesurvey/logs
$ sudo mkdir /var/www/html/limesurvey/backups

Konfig

$ sudo nano /etc/apache2/sites-available/bkb.wiki.conf
<VirtualHost *:80>
   ServerAdmin stefan.baeumer@berufskolleg-borken.de
   ServerName bkb.wiki   
   ServerAlias www.bkb.wiki   
   DocumentRoot /var/www/html/bkb.wiki/public_html/
   ErrorLog /var/www/html/bkb.wiki/logs/error.log
   CustomLog /var/www/html/bkb.wiki/logs/access.log combined
</VirtualHost>
$ sudo a2ensite bkb.wiki.conf
$ systemctl reload apache2
Konfig test.wiki
$ sudo nano /etc/apache2/sites-available/test.wiki.conf
<VirtualHost *:81>
   ServerAdmin stefan.baeumer@berufskolleg-borken.de
   ServerName test.wiki   
   ServerAlias www.test.wiki   
   DocumentRoot /var/www/html/test.wiki/public_html/
   ErrorLog /var/www/html/test.wiki/logs/error.log
   CustomLog /var/www/html/test.wiki/logs/access.log combined
</VirtualHost>
$ sudo ufw allow 81
$ sudo a2ensite test.wiki.conf
$ systemctl reload apache2
Konfig limesurvey
$ sudo nano /etc/apache2/sites-available/limesurvey.conf
<VirtualHost *:82>
   ServerAdmin stefan.baeumer@berufskolleg-borken.de
   ServerName limesurvey   
   ServerAlias www.limesurvey   
   DocumentRoot /var/www/html/limesurvey/public_html/
   ErrorLog /var/www/html/limesurvey/logs/error.log
   CustomLog /var/www/html/limesurvey/logs/access.log combined
</VirtualHost>
$ sudo ufw allow 82
$ sudo a2ensite limesurvey.conf
$ systemctl reload apache2

Test

$ sudo apt install w3m

Beenden mit q:

$ w3m 192.168.134.10
$ w3m http://bkb.wiki
$ w3m 192.168.134.10:81
$ w3m 192.168.134.10:82

SSL

$ sudo apt install certbot python3-certbot-apache
$ sudo certbot --apache -d bkb.wiki
$ sudo mv www.bkb.wiki_private_key.key /etc/ssl/private/
$ sudo mv www.bkb.wiki_ssl_certificate.cer /etc/ssl/certs/
$ sudo nano /etc/apache2/sites-available/bkb.wiki.conf

<VirtualHost *:443>
  DocumentRoot "/var/www/html/bkb.wiki"
  ServerName bkb.wiki
      SSLEngine on
      SSLCertificateFile  /etc/ssl/certs/www.bkb.wiki_ssl_certificate.cer
      SSLCertificateKeyFile /etc/ssl/private/www.bkb.wiki_private_key.key
      #SSLCertificateChainFile /path/to/DigiCertCA.crt
</VirtualHost>

URL-Rewrite

$ sudo nano /var/www/html/bkb.wiki/public_html/.htaccess:

## Uncomment these rules if you want to have nice URLs using
## $conf['userewrite'] = 1 - not needed for rewrite mode 2
RewriteEngine on
#
RewriteRule ^_media/(.*)              lib/exe/fetch.php?media=$1  [QSA,L]
RewriteRule ^_detail/(.*)             lib/exe/detail.php?media=$1  [QSA,L]
RewriteRule ^_export/([^/]+)/(.*)     doku.php?do=export_$1&id=$2  [QSA,L]
RewriteRule ^$                        doku.php  [L]
RewriteCond %{REQUEST_FILENAME}       !-f
RewriteCond %{REQUEST_FILENAME}       !-d
RewriteRule (.*)                      doku.php?id=$1  [QSA,L]
#RewriteRule ^index.php$               doku.php
#
## Not all installations will require the following line.  If you do,
## change "/dokuwiki" to the path to your dokuwiki directory relative
## to your document root.
#RewriteBase /bkb.wiki
sudo nano /etc/apache2/apache2.conf: 

<Directory /var/www/>
      Options Indexes FollowSymLinks
      # Folgende Zeile ersetzen
      #AllowOverride None 
      # durch diese Zeile:
      AllowOverride AuthConfig FileInfo Limit
      Require all granted
</Directory>

Backup Strategie

$ sudo chmod +x rsync-bkb-wiki-nach-home-stefan-public_html.sh
$ sudo chmod +x rsync-bkb-wiki-nach-test-wiki.sh
$ sudo chmod +x rsync-push2dokuwiki.sh
$ sudo crontab -e
# jede Stunde:
0 * * * * sh /home/stefan/rsync-bkb-wiki-nach-home-stefan-bkb-wik>
0 * * * * sh /home/stefan/rsync-bkb-wiki-nach-test-wiki.sh
0 * * * * sh /home/stefan/rsync-push2dokuwiki.sh

rsync-bkb-wiki-nach-home-stefan-bkb-wiki-backup.sh

#!/bin/bash 

# https://www.dokuwiki.org/de:faq:backup
# Mit dem Schalter --delete könnten zusätzlich die gelöschten Dateien im Backup gelöscht werden. 
# Aus Sicherheitsgründen wird der Schalter nicht gesetzt.

# aktuelle Seiten
rsync -a -i  /var/www/html/bkb.wiki/public_html/data/pages/ /home/stefan/bkb-wiki-backup/data/pages/

# alte Versionen
rsync -a -i /var/www/html/bkb.wiki/public_html/data/attic/ /home/stefan/bkb-wiki-backup/data/attic/

# Metadaten zu den Seiten (Wer hat die Seite erstellt, …)
rsync -a -i /var/www/html/bkb.wiki/public_html/data/meta/ /home/stefan/bkb-wiki-backup/data/meta/

# Beinhaltet die Medien (Bilder, PDFs, …)
rsync -a -i /var/www/html/bkb.wiki/public_html/data/media/ /home/stefan/bkb-wiki-backup/data/media/

# Veraltete Medien
rsync -a -i /var/www/html/bkb.wiki/public_html/data/media_attic/ /home/stefan/bkb-wiki-backup/data/media_attic/

# Metadaten für die Medien
rsync -a -i /var/www/html/bkb.wiki/public_html/data/media_meta/ /home/stefan/bkb-wiki-backup/data/media_meta/

# Konfigurationseinstellungen
rsync -a -i /var/www/html/bkb.wiki/public_html/conf/ /home/stefan/bkb-wiki-backup/conf/

rsync-bkb-wiki-nach-test-wiki.sh

#!/bin/bash

rsync -a -i --delete /var/www/html/bkb.wiki/public_html/ /var/www/html/test.wiki/public_html/

# bkb.wiki durch test.wiki ersetzen
sudo sed -i 's|#cbe4cf|#FFAAA8|g' /var/www/html/test.wiki/public_html/conf/tpl/sprintdoc/style.ini

sudo sed -i "s|https://bkb.wiki/|http://192.168.134.10:81/|g" /var/www/html/test.wiki/public_html/conf/local.php

sudo sed -i "s|Berufskolleg Borken|Testinstanz|g" /var/www/html/test.wiki/public_html/conf/local.php

# Fancy URLs, indem der Wert auf 1 gesetzt wird.
sudo sed -i "s|\$conf\['userewrite'\] = .*;|\$conf['userewrite'] = '1';|g" /var/www/html/test.wiki/public_html/conf/local.php
  
# Dateien für www-data schreibbar machen
chown -R www-data:www-data /var/www/html/test.wiki/public_html/*

# Hinweis auf Testinstanz in die erste Zeile
sudo sed -i '1i<WRAP ALERT>Testinstanz</WRAP>' /var/www/html/test.wiki/public_html/data/pages/start.txt

rsync-push2dokuwiki.sh

#!/bin/bash
# Mit dem Schalter --delete könnten zusätzlich die gelöschten Dateien im Backup gelöscht werden. 
# Aus Sicherheitsgründen wird der Schalter nicht gesetzt.

# einzelne Seiten / Ordner werden ge-rsynct:

rsync -a -i  /home/stefan/push2dokuwiki-seiten/klausurbelegungsplaene.txt /var/www/html/bkb.wiki/public_html/data/pages/bildungsgaenge/berufliches_gymnasium/klausurbelegungsplaene.txt  
chown -R www-data:www-data /var/www/html/data/pages/bildungsgaenge/berufliches_gymnasium/

Backup mit syncthing

Syncthing muss so eingestellt sein, dass der Ordner /home/stefan/public_html/ zum Backup-Target BM01 syncronisiert wird.

$ sudo apt install syncthing

$ sudo nano /etc/systemd/system/syncthing@.service
[Unit]
Description=Syncthing - Open Source Continuous   File Synchronization
Documentation=man:syncthing(1)
After=network.target

[Service]
User=%i
ExecStart=/usr/bin/syncthing -no-browser -logflags=0
Restart=on-failure
SuccessExitStatus=3 4

RestartForceExitStatus=3 4

[Install]
WantedBy=default.target
# Don't start after Reboot:
$ sudo systemctl enable syncthing@stefan.service
$ sudo systemctl start syncthing@stefan.service
$ sudo systemctl status syncthing@stefan.service

Syncthing von extern erreichbar machen

127.0.0.1 muss nach 0.0.0.0 geändert werden

$ sudo nano ~/.config/syncthing/config.xml

<gui enabled="true" tls="false" debugging="false">
      <address>0.0.0.0:8384</address>
$ sudo ufw allow 22000/tcp
$ sudo ufw reload
$ systemctl restart syncthing@stefan.service

Syncthing steuern

$ sudo systemctl start syncthing@stefan.service
$ sudo systemctl stop syncthing@stefan.service
$ systemctl status syncthing@stefan.service
$ w3m http://localhost:8384

http://192.168.134.10:8384

LDAP-Auth

$ sudo ufw allow out to 10.40.38.181 port 389 proto tcp
$ sudo ufw allow out to 10.40.38.181 port 636 proto tcp
$ sudo ufw status numbered

XMLRPC

SQLite

$ sudo find /var/www/html/bkb.wiki/public_html -type f -name "*.sqlite3"

/var/www/html/bkb.wiki/public_html/data/meta/tagging.sqlite3
/var/www/html/bkb.wiki/public_html/data/meta/struct.sqlite3

$ sudo apt install sqlite
$ sqlite3 struct.sqlite3 ".tables"
  
$ sqlite3 struct.sqlite3 "select * from reliabwaehler;"

$ sqlite3 struct.sqlite3 "select * from data_reliabwaehler;"

$ sqlite3 struct.sqlite3 ".dump data_reliabwaehler;" > data_reliabwaehler.sql

SSH/OpenSSH/Keys

Generating RSA Keys

Auf dem Client:

mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/stefan/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/stefan/.ssh/id_rsa.
Your public key has been saved in /home/stefan/.ssh/id_rsa.pub.

Transfer Client Key to Host

ssh-copy-id stefan@192.168.134.10

Wiki checken

Hoping for the best