Basis Installation Ubuntu 24.04
- 1. Hetzner
- 2. Pakete installieren und andere Grundeinstellungen
- 3. ZFS einbinden
- 4. nginx Konfiguration anpassen
- 5. postgresql Konfiguration anpassen
- 5.1. ZFS Unterordner anlegen
- 5.2. Berechtigungen des Datenverzeichnisses sicherstellen
- 5.3.
/etc/postgresql/16/main/postgresql.conf
- 5.4. PostgreSQL Dienst stoppen
- 5.5. PostgreSQL Daten auf ZFS kopieren
- 5.6. PostgreSQL Dienst starten
- 5.7. Datei
/etc/postgresql/16/main/postgresql.conf
anpassen - 5.8.
/usr/share/phppgadmin/conf/config.inc.php
- 6.
/etc/hosts
(nur bei internen Rechnern) - 7. Cockpit UI
- 8. Sicheren Passwort Store mit GnuPG2 einrichten
- 9. Let’s Encrypt Zertifikat installieren
- 10. 2-Faktor-Authentifizierung für ssh einrichten
1. Hetzner
Server in den Rescue-Modus schalten via https://robot.hetzner.com/server
SSH-Verbindung zum Server herstellen und installimage
ausführen.
ssh root@<ip-adresse>
installimage
Linux Distribution auswählen: Ubuntu 24.04.
Konfigurationsdatei anpassen.
-
HOSTNAME <subdomain>
(Damit später<subdomain>.locr.com
als Domain funktioniert, kann aber nachträglich viahostnamectl set-hostname <hostname>
geändert werden). -
SWRAID 0
("RAID aus", optional). -
SW_RAID_LEVEL 0
(nur mitSWRAID 1
: Festplattenkapazität addiert sich, optional). -
Reihenfolge der Platten ändern, so dass
/dev/sda
an 1. Stelle steht (optional).
installimage
ausführen und danach Rechner neu starten.
reboot
SSH-Verbindung zum Server herstellen.
ssh root@<ip-adresse>
User serverconnect
anlegen
adduser serverconnect
usermod -aG sudo serverconnect
Abmelden und mit serverconnect
anmelden.
Schlüssel auf dem Server für serverconnect
anlegen.
ssh-keygen -t ed25519
Optional den Client-Schlüssel auf dem Server hinterlegen.
# Linux-Client:
# ssh-keygen -t ed25519 # Wenn noch nicht vorhanden
ssh-copy-id serverconnect@<ip-adresse>
# Windows-Client Powershell:
# ssh-keygen # Wenn noch nicht vorhanden
# type $env:USERPROFILE\.ssh\id_rsa.pub | ssh -p 12622 serverconnect@locroffice.dyndns.org "cat >> .ssh/authorized_keys"
root
Zugang deaktivieren (/etc/ssh/sshd_config
bearbeiten).
PermitRootLogin no
SSH Service neustarten.
sudo service ssh restart
2. 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
serverconnect
die Rechte geben, Services zu starten und zu stoppen. Sorgt dafür, dass Dienste weiterlaufen, wenn serverconnect
sich ausloggt.
loginctl enable-linger serverconnect
Neue .htpasswd
Datei für serverconnect
erstellen (für Passwortschutz von Webseiten).
sudo htpasswd -c /etc/nginx/.htpasswd serverconnect
3. ZFS einbinden
3.1. Bei vorhandenem ZFS Pool
# 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
3.2. ZFS Pool erstellen
Partitionen ermitteln.
- ls /dev
zeigt alle devices an.
- cfdisk /dev/sda
, cfdisk /dev/nvme0n1
zeigt Partitionierungen an.
# um ein neuen zfs pool zu erstellen
sudo zpool create -o ashift=12 zfs_pool /dev/sda1
# Optional: 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
# Status des Pools abfragen
sudo zpool status
sudo zpool list
# 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.
4. nginx Konfiguration anpassen
4.1. /etc/nginx/nginx.conf
PHP-Version ermitteln.
php_version=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')
echo "Gefundene PHP-Version: $php_version"
sudo nano /etc/nginx/nginx.conf
...
http {
...
upstream php {
server unix:/run/php/php<php_version>-fpm.sock; # `<php_version>` anpassen!
}
...
}
...
Socket kontrollieren ob er existiert
ls -l /run/php/php${php_version}-fpm.sock
4.2. /etc/nginx/conf.d/php
sudo tee /etc/nginx/conf.d/php > /dev/null <<'EOF'
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;
}
EOF
4.3. /etc/nginx/sites-enabled/default
sudo nano /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;
# Hinzufügen: Let's Encrypt darf sofort auf das .well-known Verzeichnis zugreifen.
location /.well-known {
try_files $uri $uri/ =404;
}
# Weiterleitung von HTTP zu HTTPS
if ($scheme = http) {
return 301 https://$host$request_uri;
}
# Anpassen: für späteren Zugriff auf die Subdomain
server_name <domain_name>; # "<domain_name>" anpassen, z.B. "services1.locr.com".
# Anpassen: für späteren Let's Encrypt Zugriff
root /var/www;
# Anpassen: für phpmyadmin/phppgadmin
index index.php index.html index.htm index.nginx-debian.html;
# Hinzufügen für PHP
location ~ ^/phppgadmin {
root /usr/share;
include conf.d/php; # Die Datei von oben einbinden!
}
...
}
5. postgresql Konfiguration anpassen
5.2. Berechtigungen des Datenverzeichnisses sicherstellen
sudo chown -R postgres:postgres /zfs_pool/dbs/postgresql
5.3. /etc/postgresql/16/main/postgresql.conf
...
data_directory = '/zfs_pool/dbs/postgresql/16/main'
...
5.7. Datei /etc/postgresql/16/main/postgresql.conf
anpassen
sudo nano /etc/postgresql/16/main/postgresql.conf
Einstellungen wie unter PGTune empfohlen durchführen!
5.8. /usr/share/phppgadmin/conf/config.inc.php
Damit sich auch der "postgres" user über die admin Oberfläche anmelden kann!
sudo nano /usr/share/phppgadmin/conf/config.inc.php
$conf['extra_login_security'] = false;
5.8.1. Zugriff überprüfen: https://<subdomain>.locr.com/phppgadmin
-
Benutzer: postgres
6. /etc/hosts
(nur bei internen Rechnern)
...
192.168.100.130 maps2.locr.com
192.168.100.131 maps3.locr.com
...
7. 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.
8. 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 (Allgemeine Befehle)
# pass insert <password-name>
# pass edit <password-name>
# pass <password-name>
9. Let’s Encrypt Zertifikat installieren
9.1. Zertifikat anfordern (neues Verfahren)
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx
9.2. Zertifikat anfordern (altes Verfahren)
sudo apt install certbot
sudo certbot certonly --email entwicklung@locr.com --webroot -w /var/www -d <subdomain>.locr.com
10. 2-Faktor-Authentifizierung für ssh einrichten
10.2. Zeile in /etc/pam.d/sshd
hinzufügen
sudo nano /etc/pam.d/sshd
auth required pam_google_authenticator.so nullok
10.4. /etc/ssh/sshd_config
anpassen
sudo nano /etc/ssh/sshd_config
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
KbdInteractiveAuthentication yes
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication yes