Basis Installation Ubuntu 22.04

1. Pakete installieren und andere Grundeinstellungen

sudo apt update
sudo apt upgrade -y
sudo apt install -y apache2-utils cockpit cockpit-podman gnupg2 nginx pass php php-fpm phppgadmin pinentry-tty podman postgis postgresql ssl-cert zfsutils-linux
sudo apt purge apache2
sudo apt autoremove

# Normalen Benutzern die rechte geben, Services zu starten und zu stoppen
loginctl enable-linger <username> # <username> => serverconnect

# SSH-Schlüssel erstellen
ssh-keygen -t ed25519

# neue .htpasswd Datei mit einem neuen Benutzer erstellen (für Passwortschutz von Webseiten)
sudo htpasswd -c /etc/nginx/.htpasswd <username> # <username> => serverconnect

2. ZFS einbinden

# welche pools sind nicht eingebunden?
sudo zpool import

# wenn poolname nicht 'zfs_pool' heißt, dann
sudo zpool import -f <poolname> zfs_pool
# ansonsten
sudo zpool import -f zfs_pool

# um ein neuen zfs pool zu erstellen
sudo zpool create -o ashift=12 zfs_pool /dev/sda1
# um eine Datei für zfs_pool vorzubereiten
sudo dd if=/dev/zero of=/media/zfs/simulate.disk1 bs=1G count=500
# um weitere Partitionen hinzuzufügen
sudo zpool add zfs_pool /dev/sdb1

# weitere Optionen
sudo zfs set compression=lz4 zfs_pool # Komprimierung aktivieren
sudo zfs set checksum=off zfs_pool # schreiben von Checksummen deaktivieren, wenn Datenintegrität nicht sehr hohe Priorität hat!
sudo zfs set atime=off zfs_pool # Zugriffszeit auf Dateien wird nicht mehr von ZFS geschrieben.

3. nginx Konfiguration anpassen

3.1. /etc/nginx/nginx.conf

...
http {
...
    upstream php {
        server unix:/run/php/php8.1-fpm.sock;
    }
...
}
...

3.2. /etc/nginx/conf.d/php

Datei neu anlegen: touch php

location ~ \.php$ {
    fastcgi_pass php;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_read_timeout 86400;

    include fastcgi_params;
}

3.3. /etc/nginx/sites-enabled/default

server {
...
    # Kommentare entfernen
    listen 443 ssl default_server http2;
    listen [::]:443 ssl default_server http2;

    # Kommentar entfernen oder echtes Let's Encrypt Zertifikat hinzufügen!
    include snippets/snakeoil.conf;

    # Let's Encrypt darf sofort auf das .well-kown Verzeichnis zugreifen.
    location /.well-known {
        try_files $uri $uri/ =404;
    }

    # alle anderen Anfrage werden ggf. auf https umgeleitet!
    if ($scheme != "https") {
        rewrite ^ https://$host$uri permanent;
    }

    index index.php index.html index.htm index.nginx-debian.html;

    location ~ ^/phppgadmin {
        root /usr/share;

        include conf.d/php;
    }
...
}

3.4. nginx Server neustarten

sudo service nginx restart

4. postgresql Konfiguration anpassen

4.1. Berechtigungen des Datenverzeichnisses sicherstellen

sudo chown -R postgres:postgres /zfs_pool/dbs/postgresql

4.2. /etc/postgresql/14/main/postgresql.conf

...
data_directory = '/zfs_pool/dbs/postgresql/14/main'
...

4.3. /etc/postgresql/14/main/postgresql.conf

Einstellungen wie unter PGTune empfohlen durchführen!

4.3.1. PostgreSQL Server neustarten

sudo service postgresql restart

4.4. /usr/share/phppgadmin/conf/config.inc.php

Damit sich auch der "postgres" user über die admin Oberfläche anmelden kann!

$conf['extra_login_security'] = false;

5. /etc/hosts (nur bei internen Rechnern)

...
192.168.100.130 maps2.locr.com
192.168.100.131 maps3.locr.com
...

6. Cockpit UI

Um auf die Cockpit Oberfläche zuzugreifen, im Browser <ip-adresse>:9090 eingeben!
Dort kann man sich dann die Podman Images und laufenden Container ansehen/verwalten.

7. Sicheren Passwort Store mit GnuPG2 einrichten

gpg2 --full-generate-key # defaults akzeptieren. Real name: locr. Email address: support@locr.com
sudo update-alternatives --config pinentry # Den Eintrag mit '/usr/bin/pinentry-tty' auswählen!
pass init support@locr.com

Passwörter hinzufügen, bearbeiten und anzeigen

pass insert <password-name>
pass edit <password-name>
pass <password-name>

8. 2-Faktor-Authentifizierung für ssh einrichten