Dash mit Apache2 installieren

Hast du dich jemals gefragt, wie du Dash(Plotly) mit Apache2 installierst? Mit diesem Blog Eintrag möchte ich dich mit auf die Reise nehmen, Apache2 für dash zu konfigurieren. So wie viele andere ist Apache2 ein Webserver, mit dem du deine Seite veröffentlichen kannst und somit auch deine dash-app. Dash ist ein framework um schöne Dashboards in python zu kreieren. Wenn du interessiert bist, was mit dash möglich ist, folge diesen Link.

Dash selber kommt mit einem kleinen Webserver. Dieser ist jedoch nur für die Entwicklung gedacht. Aufgrund der Sicherheit sollte dieser also nicht für die Veröffentlichung benutzt werden. Der Entwickler empfiehlt dies ebenfalls nicht. Während der Entwicklung habe ich virtualenv benutzt, um so meine Umgebung zu isolieren und unterschiedliche dash bzw. python Versionen gegenüber meinen regulären Server zu benutzen. Sobald ich meine Entwicklung abgeschlossen habe, kopiere ich diesen Ordner nach /var/www/html/ und somit auch die virtuelle Umgebung.

cp -p /<path>/Dash /var/www/html/Dash

Für Apache2 wird noch eine Abhängigkeit benötigt, um dash lauffähig zu machen. Die Version unterscheidet sich mit der Python Version. Für Python 3 installiere bitte folgendes Modul: libapache2-mod-wsgi-py3

sudo apt-get install libapache2-mod-wsgi-py3

Falls du nicht genau weißt, was wsgi ist, hilft dieser Link weiter: http://wsgi.tutorial.codepoint.net/
Kurz erklärt ist wsgi eine Schnittstellen Spezifizierung, wie Server und Applikation kommunizieren können. Ich habe meine wsgi Datei hier erzeugt: /var/www/html/Dash/wsgi.py.

#cat wsgi.py
import sys
sys.path.insert(0,"/var/www/html/Dash/")
from app import server as application

Das app in “from app import server as application” steht für meinen Dash-Dateinamen. Du wirst wahrscheinlich einen anderen Dateinamen mit deinem Code haben.

Apache2 konfigurieren

Zusätzlich müssen wir Apache2 noch einrichten. Es gibt mehrere Wege Dash in Apache lauffähig zu machen. Ich beschreibe es hier mit einer weiteren Portfreigabe. Zurzeit lauscht Apache2 nur auf den Port 80/443. Für unsere Applikation müssen wir einen Neuen wie 8050 hinzufügen. Ändere deine ports.conf in /etc/apache2/ und füge einen zweites Listen ein.

#cat ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80
Listen 8050

[...]

Sobald dies getan ist, können wir eine neue Seite in Apache2 erstellen. Erzeuge dafür eine neue Datei in /etc/apache/sites-available/. Ich habe meine dash.conf benannt, aber das ist soweit dir überlassen.

#user@server:/etc/apache2/sites-available# cat dash.conf
<VirtualHost *:8050>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/Dash

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        WSGIDaemonProcess Dash threads=5 user=www-data group=www-data python-path=/var/www/html/Dash python-home=/var/www/html/Dash/bin
        WSGIScriptAlias / /var/www/html/Dash/wsgi.py

        <Directory /var/www/html/Dash>
                <Files wsgi.py>
                        #Require all granted 
                        AuthType Basic #required for Authentication
                        AuthName <name> #required for Authentication
                        AuthUserFile "/<path>/.htusers" #required for Authentication
                        Require valid-user #required for Authentication
                </Files>
                WSGIProcessGroup Dash
                WSGIApplicationGroup %{GLOBAL}
                Order deny,allow
                Allow from all
        </Directory>

</VirtualHost>

*Bitte beachte, dass die Kofiguration schon den Code für die Basic Authentication im nächsten Kapitel enthält.

WSGIDaemonProcess läuft mit dem Benuter/Gruppe www-data. Dies ist meist der Benutzer den Apache2 benutzt. Es sollte soweit gesetzt werden, um Apache2 zu beschränken.
Wir können nun die Seite aktiv schalten.

a2ensite dash

a2ensite benutzt unserer Datei in sites-available, um ein Symlink in sites-enable zu erstellen.

Da unser WSGIProcess mit www-data Rechten läuft, müssen wir diesen Benutzer/Gruppe Zugriff auf unserem Ordner erteilen. Der Besitzer(root) hat Vollzugriff und die Gruppe(www-data) darf lesen und ausführen. Andere haben keinen Zugriff auf den Ordner.

ls -ltr /var/www/html/
drwxr-x--- 9 root www-data  4096 Sep 28 15:28 Dash

Benutze dafür die Kommandos chmod bzw. chown. Ich musste die Einstellung, wie unten angegeben, vornehmen. Bei dir könnte es jedoch leicht abweichen. Das “-R” steht für rekursive Ausführung.

chown -R :www-data Dash/
chmod -R o-rw Dash/

Falls du dich nicht chmod/chown auskennst, hilft dieser Link dir weiter: https://www.unixtutorial.org/difference-between-chmod-and-chown/#:~:text=The%20chmod%20command%20stands%20for,a%20user%20and%20a%20group.

Dash Konfigurieren

Wenn du bis hierher gekommen bist, so ist dein Dash-Code nun dran. Bitte füge die folgende Zeile hinzu “server = app.server”.

server = app.server
if __name__ == '__main__':
    app.run_server(debug=True,host='0.0.0.0',port='8050')

Zu guter Letzt kommt die Portfreigabe in der Firewall. Iptables und ufw sind die meist bekanntesten. Falls du Iptables benutzt, wie ich, sollte dies den Port freigeben.

iptables -I INPUT 3 -p tcp --dport 8050 -j ACCEPT

Dies berechtigt jeden deine Seite zu sehen. Natürlich kannst du deine Seite weiter absichern, indem du z.B. einige IP-Blöcke ausgrenzt, aber das habe ich hier soweit nicht gemacht. Dies ist soweit die einfachste Möglichkeit, den Port freizugeben.

Sichere deine App mit Basic Authentication ab

Normalerweise unterstützt dash Basic Authentication mit dem python Code, aber ich habe es in der Live-Umgebung nicht hinbekommen, dass dies funktioniert. Ich erhielt zwar die Benutzer/Password Maske, aber egal was ich eintrug, ich wurde nicht weitergeleitet und musste Benutzer/Password erneut eingeben. So entschied ich mich dafür dies mittels htpasswd umzusetzen.

htpasswd -c -B <filename(ie. .htusers)> <username>

Während der Ausführung wird dich das Programm nach einem Passwort für deinen Benutzer fragen. Danach wird eine Datei erzeugt, die du, wie oben in der dash.conf beschrieben, verlinken solltest.

Das wars, dash sollte nun mit deinem Apache2 kommunizieren können. In meinem nächsten Artikel werde ich näher auf die Apps eingehen, die ich entwickelt habe.

Viel Glück bei der Einrichtung 🙂

Ein Gedanke zu „Dash mit Apache2 installieren

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.