Raspberry Pi zu einem mini Server Konfigurieren

Erstellt: 18.02.2023 Bearbeitet: 29.09.2024

Ich habe vor, ein Raspberry Pi zu einem kleinen Server aufzubauen, nachdem ich feststellen musste, dass meine Kodi-Box doch zu instabil ist, um wichtige Services zu hosten.

Als Basis nutze ich Raspberry Pi OS Lite also ein Debian.

Vorbereitung

Als erstes habe ich das OS auf eine SSD installiert mithilfe des Installers von Raspberry Pi OS mit eingeschalteten SSH und einen User den man bei dem Installer bei den Zusatzoptionen angeben kann und einmal das OS und die firmware komplett geupdated. WLAN eingerichtet, was sich als etwas hackelig herausgestellt hatte und nun step by step meine Docker Umgebung.

Install Dockerd

Als erstes Installiere ich alles, wo ich glaube es zu brauchen.

sudo apt update
sudo apt install docker.io docker-compose
sudo usermod -aG docker ${USER}

Bei meiner CoreELEC Docker installation hatte ich meine Daten irgendwie unglücklich mit der Directory-Struktur verschachtelt, was ich jetzt natürlich verbessern möchte :)

sudo mkdir /home/docker
sudo chmod 777 /home/docker

Setup Services

Setup PI-hole Service

Unter Debian liegen die Service files in /etc/systemd/system also baue ich meine Systemd startup config ein wenig um.

Wir legen also eine leere Datei in /home/docker an und erzeugen einen Symlink in /etc/systemd/system/ für das File um es zentral in unserem Home zu haben.

touch /home/docker/pi-hole.docker.service
sudo ln -s /home/docker/pi-hole.docker.service /etc/systemd/system/pi-hole.docker.service

Das soll nun unser neues pi-hole.docker.service sein.

[Unit]
Description=%p container
Requires=network-online.target
After=network-online.target

[Service]
Restart=always
RestartSec=10s
TimeoutStartSec=0
ExecStartPre=-/bin/sh -c "mkdir -p /home/docker/%p/etc-pihole /home/docker/%p/dnsmasq"
ExecStartPre=-/bin/sh -c "/usr/bin/docker rm %p"
ExecStartPre=-/bin/sh -c "ntpd -d -n -q -p 157.90.24.29"
ExecStart=/usr/bin/docker run \
    --rm \
    --name %p \
    -p 53:53/tcp -p 53:53/udp \
    -p 8053:80 \
    -e TZ="Europe/Berlin" \
    #-e # WEBPASSWORD: 'set a secure password here or it will be random' \
    -v "/home/docker/%p/etc-pihole:/etc/pihole" \
    -v "/home/docker/%p/dnsmasq:/etc/dnsmasq.d" \
    --dns=192.168.1.1 --dns=192.168.8.1 \
    #--restart=unless-stopped \
    --hostname raspberrypi \
    -e VIRTUAL_HOST="raspberrypi" \
    -e FTLCONF_LOCAL_IPV4="192.168.8.190" \
    pihole/pihole:latest
    # before set a new docker have u to pull it manual
    # docker pull pihole/pihole:latest
    # ohne dns kein pull ohne pull kein docker :)
ExecStop=/usr/bin/docker stop %p

[Install]
WantedBy=multi-user.target

Und nun teste ich erst mal ob der neue Service hoch kommt und wenn ja, setzte ich das er immer beim Booten gestartet werden soll.

docker pull pihole/pihole:latest
sudo systemctl daemon-reload
sudo systemctl start pi-hole.docker.service
systemctl status pi-hole.docker.service
sudo docker ps -a
sudo systemctl enable pi-hole.docker.service

Setup InfluxDB2 Service

Hier machen wir jetzt einfach das selbe mit ein paar Anpassungen.

touch /home/docker/influxdb.docker.service
sudo ln -s /home/docker/influxdb.docker.service /etc/systemd/system/influxdb.docker.service

Das soll nun unser neues influxdb.docker.service sein.

[Unit]
Description=%p container
Requires=network-online.target
After=network-online.target
After=pi-hole.docker.service

[Service]
Restart=always
RestartSec=10s
TimeoutStartSec=0
ExecStartPre=-/bin/sh -c "mkdir -p /home/docker/%p/etc /home/docker/%p/influxdb"
ExecStartPre=-/bin/sh -c "/usr/bin/docker rm %p"
ExecStart=/usr/bin/docker run \
    --rm \
    --name %p \
    -p 8086:8086 \
    # ip-hole is not bound on host localhost only inside the bridge
    --dns=172.17.0.1 \
    --add-host host.docker.internal:host-gateway \
    #--network=host \
    --hostname raspberrypi \
    -v "/home/docker/%p/etc:/etc/influxdb2" \
    -v "/home/docker/%p/influxdb:/var/lib/influxdb2" \
    -e INFLUXD_LOG_LEVEL="warn" \
    -e TZ="Europe/Berlin" \
    # docker wand pull a arm/v7 image wat not exist for influxdb2
    #--platform linux/arm64 \
    influxdb:2.6
    # https://hub.docker.com/_/influxdb/tags
ExecStop=/usr/bin/docker stop %p

[Install]
WantedBy=multi-user.target

Und weiter geht es mit starten und testen.

docker pull influxdb:2.6
sudo systemctl daemon-reload
sudo systemctl start influxdb.docker.service
systemctl status influxdb.docker.service
sudo docker ps -a
sudo systemctl enable influxdb.docker.service

Setup OpenHAB Service

Und noch einmal mit OpenHAB.

touch /home/docker/openhab.docker.service
sudo ln -s /home/docker/openhab.docker.service /etc/systemd/system/openhab.docker.service

Das soll nun unser neues openhab.docker.service sein.

[Unit]

Description=%p container
Requires=network-online.target
Requires=influxdb.docker.service
After=network-online.target
After=pi-hole.docker.service


[Service]
Restart=always
RestartSec=10s
TimeoutStartSec=0
ExecStartPre=-/bin/sh -c "mkdir -p /home/docker/%p/conf /home/docker/%p/addons /home/docker/%p/userdata"
ExecStartPre=-/bin/sh -c "/usr/bin/docker rm %p"
ExecStart=/usr/bin/docker run \
    --rm \
    --name %p \
    -e TZ="Europe/Berlin" \
    --network=host \
    --hostname %p \
    -v "/home/docker/%p/conf:/openhab/conf" \
    -v "/home/docker/%p/addons:/openhab/addons" \
    -v "/home/docker/%p/userdata:/openhab/userdata" \
    -v "/etc/localtime:/etc/localtime:ro" \
    -v "/etc/timezone:/etc/timezone:ro" \
    --device=/dev/ttyACM0:/dev/ttyACM0 \
    -e OPENHAB_HTTP_PORT=8090 \
    -e OPENHAB_HTTPS_PORT=8094 \
    -e CRYPTO_POLICY="unlimited" \
    -e USER_ID=1000 \
    -e GROUP_ID=1000 \
    -e EXTRA_JAVA_OPTS="-Xms1024m -Xmx2048m -Duser.timezone=Europe/Berlin" \
    openhab/openhab:3.4.2
    # https://hub.docker.com/r/openhab/openhab/tags
    # docker pull openhab/openhab:latest
ExecStop=/usr/bin/docker stop %p

[Install]
WantedBy=multi-user.target

Und weiter geht es mit starten und testen.

docker pull openhab/openhab:3.4.2
sudo systemctl daemon-reload
sudo systemctl start openhab.docker.service
systemctl status openhab.docker.service
sudo docker ps -a
sudo systemctl enable openhab.docker.servicee

Daten sichern und übertragen

Pi-Hole

Quellsystem, in meinem fall die Kodi-Box.

cd /storage/dockerdata/
tar cfvz pihole.tar.gz pi-hole.docker/config/

Kopieren zum Zielsystem und Entpacken.

cd /home/docker
sudo systemctl stop pi-hole.docker.service
# Alte Daten vom test lösche
sudo rm -rf influxdb.docker/*
sudo tar xfvzp pihole.tar.gz -C pi-hole.docker/ --strip-components=2
sudo systemctl start pi-hole.docker.service

InfluxDB

Quellsystem.

cd /storage/dockerdata/
tar cfvz influx.tar.gz influxdb.docker/data/

Kopieren zum Zielsystem und Entpacken.

cd /home/docker
sudo systemctl stop influxdb.docker.service
# Alte Daten vom test lösche
sudo rm -rf influxdb.docker/*
sudo tar xfvzp influx.tar.gz -C influxdb.docker --strip-components=2
sudo systemctl start influxdb.docker.service

OpenHAB

Quellsystem.

# source system
cd /storage/dockerdata/
tar cfvz openhab.tar.gz openhab.docker/data/openhab/

Kopieren zum Zielsystem und Entpacken.

cd /home/docker
sudo systemctl stop openhab.docker.service
rm -rf openhab.docker/*
sudo tar xfvzp openhab.tar.gz -C openhab.docker/ --strip-components=3
sudo chown -r 1000:1000 openhab.docker
sudo systemctl start openhab.docker.service

Jetzt sollte, nach einem Reboot, Systemd alles wie gewollt starten und unsere neue Box alles Kontrollieren.

Viel Spaß beim Nachbauen.