Beiträge von mustafa

    Du kannst auch händisch eine eigene Python Distribution auf dem Webhosting installieren, anstatt die vorinstallierte Variante zu nutzen. Hier ist ein Weg mit Miniconda beschrieben, wo du mit dem Paketmanager dann freie Hand bekommen solltest:


    WSGI Python mit Phusion Passenger auf Webhosting 8000 - netcup Kundenforum
    Moin Moin Ich möchte letztendlich Python auf meinem Webhosting benutzen. Und zb Flask benutzen (also WSGI Webframeworks). Nun versuche ich dieses Tutorial…
    forum.netcup.de

    Ich hatte Directus mit der Hilfe dieses Forums auch zum Laufen gebracht. Mit der Performance war ich aber auch nicht zufrieden. Anscheinend legt sich die Anwendung bei Lastpausen schlafen und wacht erst bei Zugriffen wieder auf. Oft konnten einige Dinge nicht nachgeladen werden. Also insgesamt überschaubarer Erfolg.


    Strapi scheint ja auch so ein Kandidat zu sein, den man nur mit Mühe zum Laufen bringen kann. Und Netcup anzubeten oder anzuflehen, eine bessere Node.JS-Unterstützung bereitzustellen, hilft auch nicht. Daher probiere ich gerade folgenden Ansatz, der vielversprechender aussieht:


    * Download des NodeJS Binary Pakets und auspacken in /nodejs/node-v14.20.0-linux-x64. Alternativ habe ich auch node-v16.16.0-linux-x64. Aber da scheint npm einen Bug zuhaben. Ich würde die Version wählen, die man im Webhosting auswählt.

    * Path erweitern in ~/.profile um /nodejs/node-v14.20.0-linux-x64/bin

    * Nach einem neuen Login in der Shell kann npm, npx und was auch immer mit NodeJS in der Konsole alles möglich ist,innerhalb eines Webhosting Accounts ausgeführt werden.

    * Grundsätzlich geht das auch mit Python (für Flask oder Django z.B:), was auch hier im Forum irgendwo dokumentiert ist.


    Aktuell hatte ich Strapi schon einwandfrei zum Laufen gebracht. Ich lerne noch. Deswegen ist mir dann irgend ein Fehler unterlaufen, den ich gerade untersuche. Das wird schon wieder. Dennoch lief es schon mal ziemlich gut und sehr flott auf einem Webhosting 4000. Ich wollte das hier nur als einen weiteren Weg für ein Headless CMS aufzeigen.


    Folgende Eigenheiten würde ich beachten:


    * mit dem Quickstart-Kommando wird eine index.js (Anwendungsdatei) hinterlegt, wo ein Bootstrapping vorgeschaltet ist. Das scheint mit Netcups Webhosting nicht zu funktionieren. Alternative Konfigurationen gibt es in der Strapi-Doku (letzter Code-Schnipsel).

    * Einige Konfigurationsänderungen erfordern ein Rebuild der Adminoberfläche. Wenn man das vergisst, hagelt es Fehler.

    * All das ist aber gut dokumentiert.

    * Es kann vorkommen, dass das npm-Modul Sharp nicht installiert wird (Logging beobachten). Das lässt sich dank der Shell aber einfach nachziehen mit: npm install --ignore-scripts=false --foreground-scripts --verbose sharp

    * Und Strapi verfolgt einen anderen Ansatz als Directus: Also Development auf einem Client und Übertragen des Datenmodells auf den Server. Zeitgleich entwickeln und veröffenlichen wie Directus es tut, sehen die Entwickler nicht vor.


    Hier noch die Einstellungen für das Netcup Webhosting:


    pasted-from-clipboard.png


    Nachtrag: jetzt habe ich meinen Fehler auch gefunden: Bei der Installation und beim Rebuild der Admin-Oberfläche mit npm taucht in der Konsole hin und wieder "/bin/sh: hostname: command not found" auf. Ich hatte das ignoriert. Beim Rebuild setzt das Script dann in der Konfigurationsdateie den Hostnamen auf 0.0.0.0. Das scheint eine Begrenzung in der Shell des Webhostings zu sein. Wenn ich die IP 0.0.0.0 in der config/server.js mit der Subdomain meines Webhostings ersetze und ein npm run build läuft alles wieder einwandfrei:


    pasted-from-clipboard.png

    Der hat noch nicht geantwortet. Aber zwischenzeitlich kam doch noch etwas Motivation und ich habe es mit dem MySQL-Connector hinbekommen. Auf dem Entwicklungsrechner: pip install mysql-connector-python --allow-external mysql-connector-python und dann alle heruntergeladenen Bibliotheken mit hochladen.


    Der soll zwar nicht so performant sein wie der mysqlclient. Aber zumindest funktioniert es erstmal.

    Django unterstützt verschiedene DB-Backends (ich meine sogar zeitgleich mit mehreren DBs) und erzeugt das Schema entsprechend. Ich kann sehr wohl lokal mit SQLite testen und die selbe Anwendung im Web gegen MySQL laufen lassen. Dabei werden keine Dumps erzeugt. Auch Demodaten lassen sich als sog. Fixture DB-unabhängig in diesem Prozess einspielen. Leider scheitert mein Vorhaben gerade daran, an den mysqlclient oder einer Alternative als Python 3.5 Bibliothek zu kommen. Python 3.5, welches auf dem Server im Hintergrund läuft, ist auf den aktuellen Linux-Betriebssystemen nicht vorhanden und beim Kompillieren fehlen mir immer einige Abhängigkeiten, was mich gerade etwas an diesem Vorhaben zweifeln lässt.


    Aber danke für das Kommando help("modules"), welches in der Python Shell genau das ausgibt, was ich brauche. Aber auf dem Netcup Server ist ja leider kein Python Interpreter installiert. Ich müsste mir also eine kleine Flask oder Django-App bauen, die mir die Ausgabe des Kommandos erzeugt. Das wird mir aber gerade zu viel.


    Ich persönlich schließe für mich das Thema ab und sage, dass Python im Webhosting bei Netcup nur eingeschränkt (vielleicht mit SQLite als DB-Backend) nutzbar ist. Ohne Python Interpreter und PIP wird man dazu genötigt, Brücken zu bauen, die man eigentlich gar nicht betreten möchte...

    Manchmal kommt die Ernüchterung etwas zeitversetzt. Offensichtlich war die alte DB-Session noch im Cache:


    Code
    django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
    Did you install mysqlclient?

    Wie es aussieht, ist der mysqlclient doch nicht vorinstalliert. Wär ja auch zu schön gewesen...

    H6G: Ich habe den Ansatz von dir versucht. Es scheint ganz gut zu funktionieren. Vielen Dank nochmal dafür! Allerdings hat die Verbindung zur Datenbank per IP-Adresse nicht geklappt. Aber der Hostname des DB-Servers war dann wohl in Ordnung. Hier ein Beispiel für die settings.py:



    Sehr lobenswert ist, dass der mysqlclient auf dem Server in der Python-Umgebung wohl vorinstalliert ist. Das ist nämlich immer ein ziemlicher Krampf, den zu Django passenden Client mit der geforderten Python-Version zu finden und zu installieren. Mit pip geht das ja regelmäßig schief. Auf dem Entwicklungsrechner musste ich da dann erst mal durch. Umso überraschter war ich, dass ich nach dem Erzeugen des Schemas und Hochladen der Dateien nichts mehr weiter unternehmen musste und es auf Anhieb lief.


    Ich werde die settings.py noch mit einer kleinen Logik versehen, die je nach dem, auf welcher Umgebung es sich befindet, entweder SQLite (Entwicklungsumgebung) oder MySQL (auf dem Netcup-Server) verwendet.


    Damit bin ich dann erst mal zufrieden. Allerdings wäre es schon gut zu wissen, welche Python-Module noch so vorinstalliert sind. Ins Lib/site-packages-Verzeichnis kann ich ja nicht reinschauen.


    Noch etwas: ich habe als Entwicklungsrechner Windows verwendet. Da der mysqlclient ja bereits vorinstalliert ist, bleibt alles andere Plattform-unabhängig und läuft damit auf beiden Systemen.


    Gruß,

    Mustafa

    Danke H6G. Wieder was dazu gelernt. Ich persönlich lasse eigentlich nur Zugriffe von localhost auf die DB-Server zu. Die DNS-Einträge der DBs hatte ich zwar gesehen, aber mir noch keine weiteren Gedanken gemacht. Das ist tatsächlich ein sehr guter Ansatz, den ich mal ausprobieren werde. Mein Webhosting 4000 garantiert mir ja 6GB RAM, womit auch mal ein größeres Projekt realisierbar wird.

    Super gemacht Zang! Jetzt haben wir die beiden wichtigsten Python Web Frameworks Flask und Django am Laufen.


    Aber für die Erzeugung des DB-Schema auf einem DB-Server braucht man noch das manage.py Script von Django. Da sehe ich mangels Python Interpreter im Moment schwarz. Mit SQLite könnte man das Schema noch auf dem Entwicklungsrechner erzeugen (mit manage.py makemigration und danach manage.py migrate) und die SQLite-Datei anschließend mit hochladen. Für kleinere Projekte könnte das gut und gerne reichen.


    Als Workaround für einen DB-Server könnte ich mir sowas vorstellen:

    Code
    python manage.py sqlmigrate polls 0001

    Das spuckt dann die SQL Statements aus, womit man das Schema auf dem DB-Server manuell erzeugen könnte. Also z.B.:

    Code
    -- Create model Question
    --
    CREATE TABLE "polls_question" (    "id" serial NOT NULL PRIMARY KEY,    "question_text" varchar(200) NOT NULL,    "pub_date" timestamp with time zone NOT NULL
    );
    ...
    
    COMMIT;

    Aber das ist alles echt umständlich. Nur wenn man ein fertiges Projekt in Betrieb nehmen möchte und dann keine weiteren Änderungen mehr plant, macht das vielleicht Sinn. Mangels Python Interpreter, Pip etc. wird man aber wohl sowieso bei einem VPS landen.


    Gruß

    Mustafa

    Ok, war doch ganz anders als gedacht. Nach etwas Googeln fand ich https://qflw.de/netcup-flask/


    Darin wird erklärt, dass Flask selbst und alle Python-Abhängigkeiten davon erst noch auf den Webhosting Account übertragen werden müssen. Also wird per Virtualenv Flask isoliert installiert und dann aus dem site-packages-Ordner alle Abhängigkeiten herausgegriffen und zusammen mit der Passenger Beispiel-App (https://github.com/phusion/passenger-python-flask-demo) auf den Webspace geladen. Ich meine das geht mit einem pip-Parameter auch einfacher (kriege ich gerade nicht zusammen).


    Wichtig: der Port scheint in Flask bei mir nicht ausgewertet zu werden. Ich hatte es so gemacht in der app.py:


    Code
    if __name__ == '__main__':
          app.run(host='0.0.0.0', port=8080)

    ...und gehofft, es auf einer vorhandenen Domain auf Port 8080 laufen zu lassen. Aber danach war mein Wordpress erst mal weg und die Flask-Beispiel-App erschien auf Port 80. Du hattest es also schon richtig gemacht, die App auf einer separaten Domain zu betreiben.


    Ich verstehe nur nicht, warum Netcup die Abhängigkeiten nicht einfach in einem der lib-Verzeichnisse bereitstellt. Dann würde es doch von vornherein schon funktionieren ?!


    Ich vermute mal mit den Abhängigkeiten von Django sollte das genauso funktionieren. Allerdings sind das schon ganz schön viele, weshalb ich das gar nicht erst probieren werde. Aber ganz einfache Flask-Apps lassen sich so schon mal gut betreiben.


    Gruß,

    Mustafa

    Paul, das mag richtig sein, was du schreibst. Allerdings gebe ich auch zu bedenken, dass es immer mal wieder vorkommt, dass Passwörter im Netz landen (Stichwort: HaveIBeePawned). Da sind sicher auch viele Administratoren dabei, die genau diese Passwörter auch munter in Putty für ihre Server verwendet haben. Das ist noch ein Faktor, der vielleicht grundsätzlich gegen Username/Passwort spricht. Daher werde ich mir wohl die SSH Key- Authentifikation einrichten.

    Hallo zusammen,


    ich habe gerade einen Root Server bekommen und muss schon seit dem ersten Tag feststellen, dass extrem viele Angriffe per SSH stattfinden. Bin gerade dabei, den Server zu sichern. Fail2Ban ist schon an Bord. Per root logge ich mich nicht ein und nutze einen weniger priveligierten User mit sudo. Bisher ist noch nichts weiter veröffentlicht und so stelle ich mir die Frage, ist das normal? Seit gestern 17:00 Uhr zähle ich etwa 5000 fehlerhafte Logins?!


    Wie sind eure Erfahrungen? Sollte das der normale Wahnsinn sein, frage ich mich auch, warum Server immer noch mit aktiviertem SSH ausgeliefert werden. Ich denke, der Port 22 gehört auf jeden Fall dicht gemacht.


    Gruß,

    Mustafa