IoT Server Installation und Setup

Nachdem mein Server zweimal durch einen Hardwaredefekt der Systemfestplatte eine Neuinstallation notwendig gemacht hat und das Backup schon einige Wochen alt war und deshalb umfangreich nachkonfiguriert werden musste, habe ich mich entschlossen mein komplettes Setup auf Ansible umzustellen.

Kurz zusammengefasst ist es Automatisiertes SmartHome Server Setup mit dem man quasi per “Knopfdruck” ein zu 100% fertig installiertes und konfiguriertes System erhält. In Verbindung mit Vagrant ergibt sich sogar die Möglichkeit das ganze in einer Virtual Machine zu testen.

Die benötigten Ansible Scripte und das Vagrant Script können unter folgender Url bezogen und ausprobiert werden.

https://github.com/HolgerHees/smartserver

Einfach runter laden, Vagrant installieren und mit

vagrant up

starten.

Arbeitsweise

Vagrant erstellt eine neue virtuelle Maschine oder startet eine bereits existierende. Am Anschluss wird das Ansible Skript ausgeführt welches das System installiert und konfiguriert. Später kann das Ansible Skript auch manuell ausgeführt werden um z.B. Updates oder Konfigurationsänderungen einzuspielen. Wenn im Falle eines Fehlers etwas schief geht (die meisten Fehler sind Netzwerkprobleme bei denen ein externer Server nicht erreichbar ist), kann Ansible jederzeit an der Stelle fortgesetzt werden. Führe das Skript einfach erneut aus. In meinem Fall verwende ich Vagrant um alles zu testen und auf meinem Produktivsystem starte ich Ansible direkt.

Eine Sache, die du beachten solltest. Du solltest das System niemals direkt konfigurieren. Alle Änderungen sollten innerhalb der Ansible Konfigurationen erfolgen und im Anschluss auf dem Server deployed werden. Es gibt 2 Verzeichnisse welche man sich anschauen sollte. Der erste ist der Configordner. Es enthält Variablen für Benutzernamen, Passwort, Dateipfade, Ports usw. Der zweite ist der Rollenordner. Er enthält Ansible Rollen, die die Logik zum Einrichten und Installieren einzelner Teile enthalten.

Nachfolgend eine Liste aller Dienste welche deployed werden. Alle benötigten Dateien werden entweder automatisch runtergeladen oder sind Teil des Ansible Projekts.

OpenVPN

Mein Zugang zum Heimnetz wird per OpenVPN umgesetzt. Zusätzlich wird mit einem Freund ein zweites VPN aufgebaut welches zum synchronisieren meiner Backups, als auch als Cloud “Spielwiese” verwendet wird.

Cron Script cloudy.sh

Dieses Script wrappt quasi alle meine CRON Jobs und logged sämtliche Aufrufe in das systemd journal. Falls ein Fehler auftritt, versendet es zusätzlich eine Nachricht an den root user. Ursprünglich war der eigentliche Grund für das Script die Möglichkeit ein vernünftiges Mail Subject zu vergeben was es einem erleichtert bessere Filter Rules für GMail zu erstellen.

Cron

Verschiedene cron Jobs werden eingerichtet um z.B. meine Data Partition auf mein Raid System zu spiegeln, Datenbanken zu sichern, Verzechnisse aufzuräumen oder das Bild des Tages (POTD) runter zu laden.

SSH

Als SSH Server kommt OpenSSH zum einsatz. Hierbei werden explizit die erlaubten User bzw. IP’s konfiguriert.

Firewall

Als Firewall verwende ich den firewalld um zu kontrollieren welche IP Netze und Dienste erlaubt sind.

DNS

Hauptsächlich wird es verwendet um meinen Mobile Zugang zu realisieren. Hierzu verwende ich einen öffentlichen registrierten Domainnamen, der allerdings auf 127.0.0.1 auflöst. Mein eigener DNS hingegen “überschreibt” den Eintrag und löst zum richtigen Server auf. d.h. ich muss mich entweder direkt in meinem Netz befinden oder per VPN verbunden sein um auf meinen Domainnamen zugreifen zu können. Um meine Handyapps (openhab, nextcloud etc) zu benutzen muss ich entweder zu Hause sein oder das VPN starten. Letzteres habe ich komfortabel durch einen OpenVPN Shortcut auf meinen Homescreen erreicht.

Postfix (Mail)

Das Mailsystem dient dazu sämtliche Mails an die User root oder postmaster an einen google account weiterzureichen. Der Vorteil ist, das alle weiteren Dienste nur an den Benutzer root zu senden brauchen.

MDADM

MDADM dient der RAID Überwachung und Fehlerbenachrichtigung.

SMARTD

SMARTD dient der Festplatten Hardware Überwachung und Fehlerbenachrichtigung.

NFS Server

Wird verwendet um für einen Freund, beim zuvor erwähnten zweiten VPN, einen Daten Container für seine verschlüsselten Backups bereitzustellen.

Samba Server

Samba stellt die Windowsfreigaben für Nextcloud Files bereit.

FTP Server

Eine meiner Außenkameras sendet bei Bewegung Bilder die hier abgelegt werden. Sie werden für 2 Tage aufgehoben und danach gelöscht. Der FTP Server ist dabei soweit zugezogen das es nur dieser Kamera erlaubt ist per FTP zu interagieren.

ClamAV

ClamAV ist ein Malware und Antivirenprogramm.

PHP und eine vielzahl an Modulen

Einige meiner Wartungsscript basieren auf PHP. Zusätzlich wird es für Nextcloud benötigt.

Oracle Java

Wird unter anderem für openHAB als auch für Cloudsync verwendet. Zusätzlich wird die Java Security Policy deployed was für eine hochwertige Cloudsync Verschlüsselung notwendig ist.

Apache Maven

Maven ist ein Build Tool und wird für Cloudsync verwendet.

Apache Ant

Ant ist ein Build Tool und wird für Jython verwendet.

Java Jython

Jython ist eine Python Runtime für Java. Wird von der openHAB Python Rule Engine verwendet.

Apache Webserver

Der Apache Webserver agiert als Proxy für sämtliche nach außen verfügbaren Web Dienste. Der Vorteil liegt darin das die Zugangsverwaltung zentralisiert über den Apache erfolgen kann.

Apache Web UI

Eine rudimentäre Weboberfläche um alle Dienste zu erreichen.

MySQL

MySQL ist eine SQL Datenbank.

phpMyAdmin

phpMyAdmin ist eine Weboberfläche um MySQL zu verwalten.

InfluxDB

InfluxDB ist eine Timeseries Datenbank und wird von openHAB mit Daten befüllt um später mit Grafana visualisiert zu werden.

Elasticsearch

Elasticsearch ist eine NoSQL Datenbank. Wird verwendet um alle Meldungen des Systems zentral abzuspeichern und später auszuweiten. Mehr dazu unter den Punkten Fluentd und Kibana.

Kibana

Kibana ist eine Weboberfläche um Logmeldungen in Elasticsearch komfortabel zu durchsuchen.

Redis

Redis ist eine Memorydatenbank um Nextcloud zu beschleunigen.

Nextcloud

Nextcloud ist eine web basierende Cloud Lösung um Dateien, Kontakte, Termine u.s.w. zu verwalten.

Zusätzlich verwende ich das News Plugin als meinen zentralen Newsfetcher. Dieser holt mir aus verschiedenen Quellen jeden Tag ca. 300 Meldungen ab, welche ich dann auf meinem Telefon, Tablet oder am Desktop lesen kann. Wobei sich zentral gemerkt wird was ich schon gelesen habe.

Weiter verwende ich auch noch das Keeweb Plugin was mir eine Platform und Deviceübergreifende Passwortverwaltung erlaubt.

Netdata

Netdata wird für die Serverüberwachung eingesetzt. Es benachrichtigt bzw. warnt einen bei “nicht normalen” Serververhalten. In meinem Fall misst und überwacht es jede Sekunde ca. 2000 Werte auf meinem Server.

Grafana

Grafana verwende ich zur Visualisierung meiner InfluxDB Daten. Sie können entweder direkt über die Web UI aufgerufen werden oder sind an den relevanten Stellen in meiner openHAB Sitemap eingebettet.

Mosquitto

Mosquitto ist ein MQTT broker welcher zur Kommunikation mit meinem Roomba Staubsaugerroboter benötigt wird.

Roomba

Dienst zur Kommunikation mit meinen Staubsaugerroboter. Dieser verbindet sich mit meinem Roomba und überträgt die bereitgestellen Werte in den Mosquitto broker welcher wiederum die Daten für openHAB bereitstellt.

VControld

VControld ist ein Dienst um mit meiner Heizung zu kommunizieren. Er wird für meine openHAB Heizungssteuerung benötigt.

Stromzähler

Dieses Script liest meinen Stromzähler periodisch aus und überträgt die Daten per REST Interface nach openHAB.

openHAB

Kurz zusammengefasst dient openHAB dazu meine unterschiedlichen Systeme (KNX,Funk,USB,Serial,Netzwerk etc) über “Bindings” anzusteuern. Über eine Rulesengine können selbst komplexe Steuerungsszenarien abgebildet werden. Es können Daten erfasst, protokolliert und grafisch aufbereitet werden. Visualisiert wird das ganze entweder über eine Weboberfläche oder über Android/iOS Apps. Zusätzlich gibt es auch noch eine REST API zum System.

Es ist quasi das Herz meiner IOT Lösung.

openHAB Toolbox

Kleine Sammlung an Scripten welche ich für weiterführende Funktionalitäten benötige. Es gibt z.B. einen Wetter Fetcher welche Daten für die spätere Visualisierung in Habpanel zieht. Weiterhin enthält es CLI Script mit deren Hilfe ich sämtliche InfluxDB Timeseries aus meinen MySQL Daten generieren kann.

openHAB Wall mounted Display

Eine auf Habpanel aufbauende Web UI für Tablets.

Alexa Skill

Alexa Skill für meine Haussteuerung.

Fluentd

Fluentd ist ein Logfile Collector welcher mir die Systemd-, Apache und openHAB Logs generalisiert und in Elasticsearch speichert. Sämtliche anderen Dienste senden Ihre Daten bereits ins systemd log ins sind somit bereits abgedeckt.

Zusätzlich überwache ich http statuscodes wie 404 oder 500 um individuelle Loglevel zu generieren.

Elastalert

Elastalert ist meine zentrale Fehlerüberwachung. Es fragt periodisch Elasticsearch nach Logmeldungen vom Level ERROR oder WARN ab, gruppiert sie und benachrichtigt mich per Mail.

Cloudsync

Cloudsync ist meine eigene Backuplösung welche ähnlich wie rsync arbeitet. Das allerdings komplett verschüsselt.

Dir hat diese Seite gefallen?
Dann unterstütze mich durch einen Besuch meiner Werbepartner. Klicke einfach auf den Banner unten.
http://www.intranet-der-dinge.de/
http://www.intranet-of-things.com/