Raspberry Pi zu einem mini Server Konfigurieren
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.