Posts by mhs

    Moin


    Ich gehe einfach davon aus, dass "bot.py" eine Hintergrundanwendung ist.


    Du hast probiert das mit Passenger zu machen (das Zeug mit dem Screenshot) ... das ist aber unnötig aufwendig.


    Als Cronjob kannst du es nicht direkt laufen lassen, denn hier bist du im chroot gefangen. Du hast nur auf die Programme Zugriff, die du auch per ssh benutzen kannst - somit nicht Python.


    Du könntest jedoch dein Skript per CGI (als "Website") laufen lassen. Dafür musst du CGI-Unterstützung unter dem Punkt Hosting-Einstellungen aktivieren. Wenn du jetzt bot.cgi mit folgendem Shebang und so in den cgi-bin Ordner im Website Root hochlädst, kannst du es unter domain.de/cgi-bin/bot.cgi starten.

    Python: bot.cgi
    #!/usr/bin/python3
    # -*- coding: UTF-8 -*-
    print("Content-Type: text/plain")
    print()
    
    # ... dein Python 3 Code (bei mir ist es python3.5) ...

    Immer wenn du die URL domain.de/cgi-bin/bot.cgi aufrufst wird das Skript gestartet. Das kann jetzt mit einem Cronjob automatisiert werden.

    Unter Aufgabe planen musst du eine Neue anlegen mit der Einstellung diese URL abzurufen. Das kannst du jetzt Täglich oder sonst wie machen (z.B. im Cron-Stil hier ein Hilfs-Tool https://crontab.guru/).


    Wenn du noch extra Python Packages (z.B. von pip) brauchst, musst du auf deinem PC die venv env erstellen und da die Packages installieren.

    Jetzt hast du zwei einfache Optionen, diese für bot.cgi verfügbar zu machen:

    1. Die Packages von env/lib/python-x/site-packages direkt in den cgi-bin Ordner legen. (Dann wird alles vollgemüllt)

    2. Oder die Packages von env/lib/python-x/site-packages in den Ordner cgi-bin/meine-packageszu legen und dann mit folgendem Code zu "aktivieren" (dem Python Path hinzuzufügen):

    Python: bot.cgi
    # shebang und so
    
    import sys
    # sys.path[0] entspricht dem "cgi-bin" Ordner
    sys.path.insert(1, sys.path[0]+"/meine-packages")
    
    # ... ab hier kannst du deine Packages importieren.


    Viel Glück ;)

    Moin zusammen,

    bin wohl ein wenig spät zu meiner eigenen Party xD

    Vielen Dank für die Tipps ;) (Habe jetzt erst verstanden, dass man die Packages in den Passenger App Root Ordner manuell hochladen muss... musste...)


    Ich habe ein paar Sachen herausgefunden die bestimmt nützlich sind:

    • Wie man easy peasy Python Version xx auch auf einem !Webhosting (Webhosting8000) installiert
    • ... Python in der Konsole nutzen kann
    • ... Venvs macht
    • ... Packages installiert
    • ... Passenger Python 3.9 (die selbst installierte Python Version) nutzen lässt
      • ... auch das Python einer Venv mit Packages

    Mit App Root meine ich den Ordner, der im CCP unter dem Punkt Python > App Root eingestellt wird.

    In diesem Ordner sucht Passenger u.a. nach der Startup Datei (z.B. passenger_wsgi.py)


    Das Tutorial basiert teils auf dem Vorwissen meines 1. Beitrags.


    Vorher aber noch kurz eine Kleinigkeit:

    • Wenn man in dem App Root in dem Ordner „tmp“ die Datei „always_restart.txt“ ohne Inhalt erstellt, lädt Passenger bei jedem Reload (F5) die App neu.
    • Um die App besser Debuggen zu können kann man im CCP unter Python Passenger auf „Entwicklung“ stellen. Nur bei einem Fehler werden dann detaillierte Fehlermeldungen angezeigt, aber auch der allgemeine Output der App. z.B. auch print(„Hallo ich werde angezeigt wenn es einen Fehler gibt“).


    Jetzt zum eigentlichen Spaß:


    1. Setup und Installation von Miniconda3, Python 3.9,und Erstellung von Virtuellen Umgebungen:
      (Das alles hat noch nicht was mit Passenger zu tun deswegen ist hier der App Root Ordner erstmal egal...)
      m Python für den shared Webhosting User zugänglich zu machen muss „miniconda“ heruntergeladen werden. https://docs.conda.io/en/latest/miniconda.html Der neuste Installer funzt irgendwie manchmal nicht, deswegen einfach eine alte Version von https://repo.anaconda.com/miniconda/ nehmen. Der Miniconda3-4.5.11-Linux-x86_64.sh Installer funktioniert definitiv.
    2. Wenn ihr die richtige Shell Datei auf dem Server heruntergeladen habt könnt ihr die mit bash Miniconda3-*.sh installieren. Dieses Tutorial bezieht sich auf minicona3 und den Standard Installationspfad ($HOME/minicona3).
    3. Dann wird je nach Installer (Miniconda2 -> Python2 oder Miniconda3 -> Python3) Python in der jeweiligen Aktualität des Installer installiert. Der Miniconda3-4.5.11-Linux-x86_64.sh Installer bring Python3.7 mit.
    4. Ihr müsst bestätigen, dass ihr miniconda3 in PATH tun möchtet.
      WICHTIG: miniconda3 erstellt die Datei ~/.bashrc und denkt die wird geladen … Pustekuchen bei Netcup müssen wir erst die Datei ~/.profile mit folgendem Inhalt erstellen:
      Bash: ./profile
      if [ -f ~/.bashrc ]; then
          . ~/.bashrc
      fi
    5. Dann einmal ein und aus und ein loggen und voila!
    6. Nun können wir mit conda update -n base -c defaults conda alles aktualisieren.
      Falls etwas danach nicht ganz klappt das packet mit conda update pip aktualisieren geht auch mit conda update python oder conda update conda
      Jetzt sollte das neueste Python installiert sein (Python3.9)
    7. Mit conda create --name testenv können wir eine Venv mit den globalen Python Binaries erstellen. Wenn man PythonX braucht einfach conda create -n pythonx_venv python=X oder nachträglich conda install python=X
      Die venvs sind unter ~/miniconda3/envs zu sehen, man kann sie mit conda env list alle anzeigen. Um sie zu aktivieren und Packages nach zu installieren: conda activate testvenv (Beim ersten Mal kommt noch so eine Konfigurationssache, Ja drücken und relogin). Mit conda deactivate kann man die venv verlassen.
    8. Packages können mit conda selbst bzw. pip selbst wie gewohnt installiert werden.
      Ich würde conda nehmen da macht man nichts falsch, wenn man verschiedenen Python Versionen installiert hat.
      conda install <package>


    Jetzt ist alles bereit! Was man mit Passenger tun mus:


    Also die app.py mit flask oder django etc. liegt in diesem Beispiel auch im App Root.

    Im App Root müssen wir diese Datei erstellen: passenger_wsgi.py und diese im CCP unter dem Punkt Python > Startup Datei festlegen.

    Je nachdem was ihr jetzt anders gemach habt müsst ihr den angehängten Code zur passenger_wsgi.py ändern.

    Außerdem müsst ihr den Code in der letzten Zeile Ändern: from app import MyApp as application

    Uuuuuuund Fertig!!!

    Einfach auf die Seite gehen voila ;)


    Puh das hat mich auch 3 Tage gedauert um das alles zusammen zu basteln xD

    Euch noch nen schönen Tag!


    Ich habe eine kurze Frage, was Eure Erläuterungen betrifft.


    Ist es darüber denn auch möglich zusätzliche Python Packages zu nutzen (z.B: Numpy, SciKit etc...)?

    Also quasi alles erst einmal lokal entwickeln und dann auf den Server hochladen?

    Oder habe ich das falsch mitgelesen?

    Jo genau

    Könnt ihr nicht einfach selbst einen Interpreter hochladen? Wenn man Zugriff auf eine Shell hat, sollte es doch ein Leichtes sein, für den Benutzer ein eigenes Python aufzusetzen.

    Tadaaaa


    Lg

    Moin Moin :)


    Ich möchte letztendlich Python auf meinem Webhosting benutzen. Und zb Flask benutzen (also WSGI Webframeworks).


    Nun versuche ich dieses Tutorial [0] durchzuführen:

    [0] https://www.phusionpassenger.c…hroughs/start/python.html


    Und bin gescheitert...


    pasted-from-clipboard.png

    (ich habe erfolglos versucht die Error ID zu finden)



    Ich bin dem oben genannten Tutorial [0] gefolgt.


    Ich habe eine Subdomain angelegt: passenger.geheime-domain.de


    Ich habe wie im Tutorial [0] per ssh die Befehle ausgeführt:

    git clone https://github.com/phusion/passenger-python-flask-demo.git

    cd passenger-python-flask-demo Dieses Verzeichnis als Root der Subdomain festgelegt. (/ordnerstruktur/passenger-python-flask-demo)


    Bei der Subdomain unter dem Punkt "Python"  /ordnerstruktur/passenger-python-flask-demo als App Root angegeben.


    gemäß des Tutorials [0] /ordnerstruktur/passenger-python-flask-demo/passenger_wsgi.py erstellt und mit folgendem Inhalt versehen:

    # passenger_wsgi.py

    from app import MyApp as application


    Dann bei der Subdomain unter dem Punkt "Python" die "Anwendung einschalten" gedrückt:

    Log:

    Information: Die Einstellungen wurden gespeichert.

    Warnung: Aus Sicherheitsgründen sollte das App Root außerhalb des Documentroot liegen


    Und danach passenger.geheime-domain.de geöffnet und die oben genannte Fehlermeldung bekommen...


    Was habe ich falsch gemacht?


    Ich würde mich sehr über Hilfe freuen!


    Lg