Python Dash App über https öffentlich zur Verfügung stellen

Django, Flask, Bottle, WSGI, CGI…
Antworten
Katharina
User
Beiträge: 7
Registriert: Freitag 31. August 2018, 19:27

Hallo,

folgender Hintergrund, ich habe die Möglichkeit über einen privaten Server (den verwalte jedoch nicht ich und ich habe bislang(!) auch keine Administratorrechte) meinen Kunden .pdf-Files, Excel-Files etc. über URLs, wie https://XYZ.pdf, zum Download bereitzustellen. Nun habe ich in Anacoda Python ein Dash App programmiert bzw. ich bin gerade dabei es zu programmieren und ich möchte dieses Dash App meinen Kunden übers Internet (URL: https://etc.at) zur Verfügung stellen, also wie gesagt, nicht den in Anaconda Python programmierten Code, sondern den Output von diesem, also das Dash App.

Gibt es denn eine Möglichkeit bzw. eine Anleitung, wie ich das Dash App über diesen privaten Server mit einer URL (z.B.: https://etc.at) veröffentlichen kann?

Wichtig ist mir dabei es muss über diesen privaten Server funktionieren, damit es kostenlos bleibt, weil wie ich das beschriebene Problem mit z.B.: PythonAnywhere lösen kann, dass weiß ich, nur das ist mit der Zeit nun einmal nicht kostenlos, und dann wäre mein Projekt so gut wie gestorben ...

Ich bin für jegliche Antworten sehr dankbar! LG Katharina

P.S.: Sry für meine fast schon kindliche Beschreibung meines Problems; manch einer wird sich viel einen ablachen oder einfach nur den Kopf schütteln; zu meiner Verteidigung darf ich jedoch noch anmerken: ich bin kein ITler und werde auch nie einer werden und mit Servern kenne ich mich auch nicht aus, ABER: Ich programmiere sehr gerne mit Python, um kleine Routineaufgaben zu automatisieren :D
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

DER Standard für Python Webapplikation heißt WSGI. Dabei wird, vereinfacht gesagt, eine Python-Funktion an eine URL gebunden. Wird die URL aufgerufen, wird die Funktion ausgeführt und liefert was sinnvolles wie eine HTML Seite zurück. Wie gesagt, das ist das vereinfachte Grundprinzip.

Um eine Webapplikation zu erstellen nutzt man in der Regel ein WSGI Framework wie Flask oder Django. Django kommt "all in" mit ORM, Formularframework, Template Engine und das ganze ich hoch integriert. Flask ist für kleine / einfache Sachen einfacher.

Wie einfach es ist, deine Dash App als Webapplikation umzustricken -> keine Ahnung, wir keinen deine Dash App nicht.

Ob dein Server Python WSGI Applikationen ausführen kann -> keine Ahnung, wir kennen das Setup deines Server nicht. Gängiges Setup: Die WSGI Applikation wird von einem WSGI Applikationsserver wie gunicorn ausgeführt, vor gunicorn sitzt nginx oder Apache als Reverse Proxy. Klingt vielleicht kompliziert, ist es aber nicht.

Gruß, noisefloor
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

@noisefloor Mit Dash ist wahrscheinlich https://plot.ly/products/dash/ gemeint.

@Katharina Es ist schwer die Hilfe zu geben ohne mehr Informationen über diesen privaten Server zu haben. Grundsätzlich würde ich empfehlen einen Blick auf Heroku und Cloudflare zu nehmen. Bei Heroku bekommt man kostenlos einen kleinen Server und Cloudflare bietet SSL und einen CDN ebenfalls kostenlos. Diese Angebote sind zum Einstieg gedacht und sind dementsprechend eingeschränkt, reichen aber in deinem Fall vielleicht schon aus.
khz
User
Beiträge: 38
Registriert: Freitag 3. August 2012, 22:47
Kontaktdaten:

Hallo Katharina

wenn du schon eine python/DASH app programmiert hast sollte es eigentlich kein (grosses) Problem sein diese auch im web zu veröffentlichen.
Es kann natürlich schon sein das ein paar infrastrukturelle Fragen zu klären sin.

Um deine app zu hosten musst du sie auf einem öffentlich zugänglichen server bereitstellen. Das kann ein eigener Server/vserver sein, in der cloud, Heroku oder was auch immer.
Dann muss der Server aber auch Zugriff auf deine Daten haben (wo immer die sind) ..

entweder hat der server die auch (sync) oder er kann auf die Daten zugreifen (API) oder ...

Wenn das soweit ok ist bist du fast fertig.

Jetzt brauchst du noch die Domain (abc.xyz) [kaufen bei Strato und co oder den Admin fragen der deiner Domain managed]
und musst den DNS Eintrag auf deinen Server / Service (ip:port) lenken....

Ein Beispiel und eine Anleitung kannst du hier sehen https://www.pythononwheels.org/dash.
http://www.pythononwheels.org
11to1 sparetime development and all pm.
khz
User
Beiträge: 38
Registriert: Freitag 3. August 2012, 22:47
Kontaktdaten:

Hier nochmal etwas spezifischer:

1. Erledigt : Öffentlich zugänglichen Server haben.
2. Optional: Domainname für den Service haben oder erstellen (sieht ja besser aus und kostet beinahe nix mehr, wenn du einen Server hast)
DNS Eintrag für die Domain machen der auf den Server zeigt : www.xyz.abc => auf die IP deines Server
Das macht man über die Tools des Domain anbieters per Web Oberfläche. (DNS A Record)

Todo: Du brauchst jetzt schon "Admin" oder "sudo" Rechte auf dem privaten Server (oder jemand macht das folgende für dich)
Der Admin muss:
* Einen Webserver installieren oder konfigurieren (Beispiel: NGINX siehe unten)
* Natürlich python installieren
* die Berechtigungen auf einem zentralen Verzeichnis geben (z.B.:

Code: Alles auswählen

/var/www 
.. Siehe unten,, damit du deine DashApp da pflegen und updaten kannst)
* Es ist übrigens prima die App lokal zu entwicklen und mit git und GitHub oder GitlAb oder sowas zu syncen.
* dannn auf dem server nur "pullen"


Basics: (Ich gehe mal von einem Linux Server aus. Unter windows läuft das aber ähnlich. Nur die Pfade sind unterschiedlich)
* deine Dash App auf den Server kopieren
Am besten in ein zentrales web Verzeichnis wie

Code: Alles auswählen

/var/www/deineapp
* virtual environment einrichten

Code: Alles auswählen

virtualenv /var/www/deineapp/venv
* Virtual env aktivieren

Code: Alles auswählen

source /var/www/deineapp/venv/bin/activate
* Dash app requirements installieren (pip ...)
* Dash App lokal starten und testen
* http://deineserver-IP:port

Wenn das läuft:

Bereitstellung per Webserver einrichten
Beispiel Nginx (kann man aber ähnlich auch mit dem Apache machen ..)
* Server Config erstellen:
Auszug:

Code: Alles auswählen

 
 
 http {
    # Enumerate all the Tornado servers here
    upstream frontends {
        server 127.0.0.1:8000;
        #server 127.0.0.1:8080;
    }
 server {
	
       listen 80;
       listen [::]:80;
       
        root /var/www/deineapp;

        # Add index.php to the list if you are using PHP
        index index.html index.htm;

        server_name www.deinedomain.abc

        # Allow file uploads
        client_max_body_size 50M;

        location ^~ /static/ {
            root /var/www/deineapp;
            if ($query_string) {
                expires max;
            }
        }
        location = /favicon.ico {
            rewrite (.*) /static/favicon.ico;
        }
        location = /robots.txt {
            rewrite (.*) /static/robots.txt;
        }

        location / {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://frontends;
        }
        
 }
}
Das so als ein Beispielconfig. Die hört auf www.deinedomain.abc:80 und forwarded dann an den internen prozeß der auf 127.0.0.1:8000 antwortetr.
Das musst du bei upstream frontends so anpassen das deine Dash App antwortet.

Live Beispiel hier: https://www.pythononwheels.org/dash da läuft das genauso, nur das eben keine reine Dash App sondern eine embedded Dash app in PythonOnWheels lokal läuft. Wird aber auch über NGINX geliefert. Prinzip ist genau gleich.
http://www.pythononwheels.org
11to1 sparetime development and all pm.
Antworten