Softwarekonfiguration Basis

Nachdem ihr Euch durch die beiden Beiträge Grundkonfiguration und Basisinstallation  gekämpft habt steht nun der weiteren Installation benötigter Software für das Projekt nichts mehr im Wege.

Aufbau:

  1. Firewall
  2. Reverse Proxy
  3. Gunicorn Server
  4. Flask Applikation
  5. Samba Share

Was soll erreicht werden?:

  • den Webserver auf eine definierte Domain registrieren,
  • nur Requests auf definierte notwendige Ports zulassen
  • (für Entwickler) mit unterschiedlichen virtuellen Servern auf einen Raspi verfügbar machen
  •   Dateien auch über ein Laufwerk in das Netzwerk einbinden

Installation der erforderlichen Software

sudo apt update && sudo apt -y upgrade
sudo pip3 install numpy
sudo pip3 install --upgrade numpy
sudo apt install -y samba gunicorn python3-dev python3-pip nginx build-essential libssl-dev libffi-dev python3-setuptools libgstreamer1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good ffmpeg libilmbase-dev libopenexr-dev libopencv-dev libhdf5-dev libjasper-dev sqlite3 python3-venv libatlas-base-dev portaudio19-dev python-all-dev software-properties-common

sudo pip3 install flask werkzeug flask_RESTful flask-SQLAlchemy xlsxwriter matplotlib mpld3 pandas pyaudio

Nachdem nun nach 1-2 Kaffee die Installation abgeschlossen ist, starten wir mit der Konfiguration.

Erzeugen der Verzeichnisstruktur und Konfiguration des Samba Share

sudo mkdir /etc/birdshome
sudo chown -R pi:pi /etc/birdshome/
mkdir /etc/birdshome/application
mkdir /etc/birdshome/application/static
mkdir /etc/birdshome/application/static/media
mkdir /etc/birdshome/application/static/media/photos
mkdir /etc/birdshome/application/static/media/videos
mkdir /etc/birdshome/application/static/media/charts

sudo smbpasswd -a pi
sudo smbpasswd -e pi

Editieren der Samba Konfiguration. Hier wird die folgende Passage am Ende der Datei eingefügt. Es ermöglicht den Zugriff auf die Dateien im Media Verzeichnis für den User Pi mit dem hinterlegtem Samba-Passwort(dies kann zu dem eigentlichen Linux Passwort abweichen)

[bird_media]
path = /etc/birdshome/application/static/media
public = yes
writable = yes
comment = video share
printable = no
guest ok = no
valid users = pi, @pi
write list = pi, @pi

Einrichten des Service zum automatischen Start der App

Contents of /etc/systemd/system/myservice.service

Erstellen der Datei birdshome.service im Verzeichnis /etc/systemd/system

sudo nano /etc/systemd/system/birdshome.service

Inhalt der Datei ist wie folgt:

[Unit]
Description=birdhome Service
After=network.target

[Service]
Type=simple
User=pi
WorkingDirectory=/etc/birdshome
Restart=always
ExecStart=sh /etc/birdshome/birds_dev.sh

[Install]
WantedBy=multi-user.target

Nach dem speichern wird der Service noch aktiviert mittels

sudo systemctl enable birdshome.service

sudo systemctl start birdshome

Nachdem dies erfolgt ist sollte der service mittels sudo systemctl status birdshome einen laufenden Service anzeigen.

Einrichten des NGINX Servers

Hierbei handelt es sich um einen WebServer, welcher als Reverse Proxy verwendet wird um den direkten Zugriff auf den Gunicorn Server zu vermeiden.

Deaktivieren des Default Mappings
sudo unlink /etc/nginx/sites-enabled/default

Einrichten des Reverse Proxy  mittels editieren der Datei
sudo nano /etc/nginx/sites-available/reverse-proxy.conf

Folgende Konfiguration ist einzutragen, damit jeder Request via http ausgeführt wird auch an den Gunicorn Server weitergelietet wird.

server {
        listen 80;
        listen [::]:80;

        access_log /var/log/nginx/reverse-access.log;
        error_log /var/log/nginx/reverse-error.log;

        location / {
                    proxy_pass http://127.0.0.1:5000;
  }
}

Prüfen ob alle Einstellungen korrekt sind
sudo nginx -t

Laden der Konfiguration während der Server läuft

sudo nginx -s reload

 

Erstellen der Flask appliaktion