Flask Website wird nicht angezeigt

Django, Flask, Bottle, WSGI, CGI…
Antworten
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Hallo,

ich wollte soeben meine Flaskwebseite online stellen. Dafür habe ich via SFTP das gesamte Projekt bei IONOS auf den Server geladen. Jetzt passiert aber nichts weiter. Habe ich etwas falsch benannt oder eine falsche Ordnerstruktur?

Code: Alles auswählen

meineseite/
	__pycache__
	app/
		__init__py
		__pychache__
		views.py
		templates/
			base.html
			home.html
			andsoon.html
		static/
			css/
			js/
			images/
			fonts/
	venv
	run.py

run.py:

Code: Alles auswählen

from app import app

if __name__ == "__main__":
    app.run(debug=False)
__init__.py:

Code: Alles auswählen

from flask import Flask
from flask_bootstrap import Bootstrap
from flask_mail import Mail

app = Flask(__name__)
Bootstrap(app)


app.config['SECRET_KEY'] = 'xxx'
app.config.update(dict(
    #configs
))

mail = Mail(app)

from app import views

Rufe bei mir lokal immer via terminal:

Code: Alles auswählen

gunicorn -w 4 -b 127.0.0.1:8000 run:app
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

Die Dateien nur zu kopieren reicht nicht aus. Sie müssen auch ausgeführt werden. Z. B. wie in deinem Beispiel über einen WSGI-Server, über eine entsprechende Funktionalität des Webservers (z. B. mod_wsgi für Apache), etc.. Ionos scheint in den regulären Webhosting-Paketen soweit ich das sehe nur Python über CGI zu erlauben, was die am wenigstens empfohlene Methode ist. Falls das so ist, muss du schauen, wie man flask über CGI deployed: https://flask.palletsprojects.com/en/1. ... oying/cgi/. Aus meiner Sicht würde ich mir dann aber stattdessen eher einen anderen Hoster suchen.
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Ich kenne IONOS nicht, aber: Startest du denn deinen Server irgendwie? Das musst du tun.
Dazu: Der in Flask enthaltenen werkzeug-Server ist nicht für den Produktiveinsatz gedacht. Nimm einen anderen WSGI Server. Gunicorn ist recht beliebt. Ob das bei IONOS möglich ist, weiß ich nicht. Falls nur CGI machbar ist, solltest du eher einen anderen Hoster wählen.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Okey, danke. Mist. Also eher neuen Host oder doch über CGI probieren?

Welchen Host könnt ihr denn dafür empfehlen? Würde dann gerne meine Domain auch mitnehmen...
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Das Ding ist, ich habe so gar keine Ahnung von Serveradministration und co.

Ich habe mich mal per SSH auf den Server geschaltet und dort die venv aktiviert. Anschließend habe ich das versucht:

Code: Alles auswählen

(venv) (uiserver):u103xxx:~$ gunicorn -w 4 -b mysite.com:80 run:app
-bash: gunicorn: Kommando nicht gefunden.
Aber wenn ihr generell sagt, dass cgi eher semi ist, dann schaue ich mir mal Heroku oder pythonanywhere an.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
ich wollte soeben meine Flaskwebseite online stellen.
Der Satz macht so auch keinen Sinn. Das Webframework braucht einen Serverprozess, der das ausliefert, was Flask "produziert", also den Rückgabewert der einzelnen Funktion, an die du Routen gebunden hast.

Der Serverprozess kann der Build-In Server von Flask sein, der aber für den produktiven Einsatz _nicht_ empfohlen wird. Standard unter Python ist, Webapplikationen von einem WSGI-Server ausliefern zu lassen. Oder im Notfall via CGI, wurde ja schon erwähnt.

Wenn du den Server nicht selber administrieren willst oder kannst, dann brauchst du einen "managed server". Uberspace hat das, Firma mit Sitze in Deutschland, Serverstandort Deutschland, deutschsprachiger Support. Heroku oder so geht aber auch.

Was hast du denn bei 1&1 - Webspace oder einen (virtuellen) Server?

BTW: wenn man so was üben will, also wie man das auf einen vollwertigen Server deployt, bietet sich z.B. ein Raspberry Pi an, der nur im lokalen Netzwerk erreichbar ist. Meine private Django-Applikation läuft auf einem Raspberry Pi 1B. Natürlich nicht schnell, aber beim Deploy damals habe ich schon ein bisschen was über gunicorn, nginx und das Setup gelernt.

Gruß, noisefloor
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Danke noisefloor. Ich habe Webspace (geschenkt bekommen) mit Domain und Email.

Ich versuche einfach mal zu Übungszwecken doch cgi aus. Aber auf lange Sicht muss ich dann mal zu uberspace oder Heroku umziehen (inkl. domain).
Das mit dem Raspberry ist auch eine gute Idee.

Warum ist denn Python eigentlich nicht so gängig bei den Anbietern?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
__blackjack__
User
Beiträge: 13071
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@naheliegend: Es wird wahrscheinlich mehr Kosten beim Support verursachen. Entweder weil die Kunden mehr fragen haben, oder weil sie es nicht vernünftig konfiguriert bekommen. Perl, Ruby, Java, und C# sind ja beispielsweise auch nicht gängig bei den Anbietern, damit werden aber auch Webanwendungen geschrieben. Die Anbieter haben meistens nur PHP, weil's für den Anbieter einfach zu administrieren ist und vom Ablauf her kaum Fragen aufkommen die nicht irgendwann irgendwo im Netz schon beantwortet sind, und man einiges damit auch einfach nicht machen kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

@Danke __blackjack__. Das ist sehr schade. Wie ist es eigentlich mit JS im Backend? Läuft denn sowas oder geht wirklich nur PHP bei den "Gängigen"?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Warum ist denn Python eigentlich nicht so gängig bei den Anbietern?
Wenn du ein Python Applikation via WSGI auslieferst, braucht der WSGI-Server einen Einstiegspunkt. Bei Flask ist das z.B. in den ganzen Dokus das `app` Objekt deiner Hauptdatei. Du kannst das Objekt und die Datei aber frei benennen, also es geht auch z.B. `totaler_mist:wurstwasser`. Das ist schon mal ein Grund, weswegen man als Hoster mindestens da eine Konvention ansetzen muss (z.B. `main:app`), damit der Einstiegspunkt überhaupt automatisch gefunden werden könnte. Bei Django ist es noch so, dass man, je nach dem, von wo der WSGI-Server gestartet wird, noch den Pfad zur Config-Datei von Django mit angeben muss.
Und dann ist noch ein Thema, dass deine Web-App ja i.d.R. bestimmte Python Module braucht, ggf. in einer bestimmten Version. Also müsstest du soviel Zugriff auf den Server haben, dass du zumindest für den Nutzer, unter dessen Rechten die App läuft, Python-Module installieren kannst.

Bei JavaScript, also node.js, ist das AFAIK auch nicht "besser", weil z.B. node.js der Server ist. Plus nutzt AFAIK kaum eine Applikation nur node.js, sondern nutzt X Module, die du per npm nachinstallierst.

Bei PHP ist das einfacher. HTML/PHP Datei hochladen, fertig (davon ausgehend, dass PHP im Webserver aktiviert ist). Natürlich gibt es auch bei PHP viele Zusatzmodule, aber ich kann dir gerade nicht sagen, wie das Modul-Management bei PHP funktioniert.

Gruß, noisefloor
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

naheliegend hat geschrieben: Montag 11. Januar 2021, 18:01 @Danke __blackjack__. Das ist sehr schade. Wie ist es eigentlich mit JS im Backend? Läuft denn sowas oder geht wirklich nur PHP bei den "Gängigen"?
Aus meiner Sicht sind solche Shared Hosting Angebote von Ionos eher im "low-end" Bereich anzusiedeln und richten sich eher an Privatpersonen oder kleinere Firmen und Vereine. PHP sowie CGI sind da schon so das, was sich nach meinem Eindruck in dem Sektor als Standardleistung für ein eher niedrig-preisiges Hosting-Paket eingebürgert hat.

Es ist eines der Hauptmerkmale von PHP, dass das Deployment und die einmalige Einrichtung für den Admin so einfach sind, wie Noisefloor schon meinte. Man legt eine Datei mit der entsprechenden Endung im richtigen Ordner ab, und der in den Webserver eingebettete Interpreter führt den Code dann aus. Abgesehen von PHP (und ggf. Perl) hat sich das aber kaum durchgesetzt bzw. gehalten und die meisten anderen verbreiteten Technologien, einschließlich Python und JavaScript sind etwas komplexer im Deployment. Dafür mietet man sich dann z.B. ein Server/eine VM, was entsprechend teurer ist.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Ich danke euch. Das reicht erstmal an Informationen, damit ich die nächsten 2 Wochen weiterlernen kann. Das mit dem Raspberry ist glaube ich auch eine gute Idee und das dann mal selbst auszuprobieren.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

ich habe eine Frage, wie ich meine app über cgi zum Laufen bekomme. Oben steht ihr ja meine Ordnerstruktur.

Ich hätte das jetzt so gemacht:

Code: Alles auswählen

/cgi-bin/
	myapp.cgi
	.htaccess 
	app/
		__init__py
		__pychache__
		views.py
		templates/
			base.html
			home.html
			andsoon.html
		static/
			css/
			js/
			images/
			fonts/
	venv
	

Die myapp.cgi:

Code: Alles auswählen

#!/usr/bin/python
from wsgiref.handlers import CGIHandler
from app import app

CGIHandler().run(app)

und die .htaccess:

Code: Alles auswählen

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f # Don't interfere with static files
RewriteRule ^(.*)$ was_muss_hier_rein$1 [L]
was_muss_hier_rein ist in meinem Fall was?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Antworten