Seite 1 von 1

Module auf einem Server ohne ssh installieren

Verfasst: Mittwoch 29. Mai 2019, 12:07
von anonym110
Hallo,

ich habe ein einfaches Webhosting Paket. Es unterstützt leider kein SSH. Nun würde ich gerne eine flask Anwendung darauf laufen lassen. Zum testen habe ich mir in einer VirtualBox einen Demoserver installiert (apache2).

Der cgi-bin folder sieht so aus:

Code: Alles auswählen

.
├── index.py
└── site-packages
    ├── click
    ├── Click-7.0.dist-info
    ├── flask
    ├── Flask-1.0.3.dist-info
    ├── itsdangerous
    ├── itsdangerous-1.1.0.dist-info
    ├── jinja2
    ├── Jinja2-2.10.1.dist-info
    ├── markupsafe
    ├── MarkupSafe-1.1.1.dist-info
    ├── pip
    ├── pip-19.1.1.dist-info
    ├── pkg_resources
    ├── setuptools
    ├── setuptools-41.0.1.dist-info
    ├── werkzeug
    ├── Werkzeug-0.15.4.dist-info
    ├── wheel
    └── wheel-0.33.4.dist-info
Und die index.py Datei so:

Code: Alles auswählen

#!/usr/bin/python

import os
import sys
import logging

sys.path.insert(0, os.getcwd() + "/site-packages")

logging.error(sys.path)
logging.error(sys.version)
logging.error(sys.prefix)

from wsgiref.handlers import CGIHandler

from flask import Flask

app = Flask(__name__)


@app.route("/")
@app.route("/index")
def index():
    return "Hello, World!"

CGIHandler().run(app)
Wenn ich jetzt die Webseite aufrufe, erhalte ich einen "Internal Server Error". Im error log steht:

Code: Alles auswählen

ERROR:root:['/usr/lib/cgi-bin/site-packages', '/usr/lib/cgi-bin', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-i386-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/gtk-2.0']
ERROR:root:2.7.13 (default, Sep 26 2018, 18:42:22) 
[GCC 6.3.0 20170516]
ERROR:root:/usr
Traceback (most recent call last):
  File "/usr/lib/cgi-bin/index.py", line 15, in <module>
    from flask import Flask
ImportError: No module named flask
[Wed May 29 13:06:25.697818 2019] [cgid:error] [pid 3899:tid 3029318464] [client 127.0.0.1:42736] End of script output before headers: index.py

Re: Module auf einem Server ohne ssh installieren

Verfasst: Mittwoch 29. Mai 2019, 12:11
von __deets__
Es ist riskant sich auf getcwd zu verlassen. Weißt du, wohin das zeigt? Es hat jedenfalls nicht implizit etwas mit der Python Datei die du ausführst zu tun.

Was aber damit zu tun hat ist die Variable __file__, die zeigt auf index.py, und daran kannst du dich lang hangeln.

Re: Module auf einem Server ohne ssh installieren

Verfasst: Mittwoch 29. Mai 2019, 12:13
von anonym110
Das habe ich mir eigentlich angeguckt gehabt. Habe es auch ausprobiert indem ich den Pfad einfach direkt eingegeben habe.

Re: Module auf einem Server ohne ssh installieren

Verfasst: Mittwoch 29. Mai 2019, 12:28
von __deets__
Hm. Interessant. Hab auch jetzt erst den Pfad gesehen (auf dem iPhone unterwegs, da liest es sich schlechter).

Ich würde es trotzdem nicht per cwd machen, aber natürlich muss das Ergebnis erstmal stimmen.

Hast du mal eigene Module hingelegt & probiert? Ist die unter Verzeichnis Struktur von flask etc vernünftig.

Re: Module auf einem Server ohne ssh installieren

Verfasst: Mittwoch 29. Mai 2019, 13:09
von anonym110
Also ich habe ein ganz einfaches test module erstellt, was nur eine __init__.py enthält. Dieses funktioniert.

Zudem habe ich ausprobiert, das Skript ganz normal per python zu starten:

Code: Alles auswählen

python index.py
Dies hat soweit funktioniert:

Code: Alles auswählen

ERROR:root:['/usr/lib/cgi-bin/site-packages', '/usr/lib/cgi-bin', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-i386-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/gtk-2.0']
ERROR:root:2.7.13 (default, Sep 26 2018, 18:42:22) 
[GCC 6.3.0 20170516]
ERROR:root:/usr
hi
Traceback (most recent call last):
  File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "/usr/lib/cgi-bin/site-packages/flask/app.py", line 2328, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/lib/cgi-bin/site-packages/flask/app.py", line 2306, in wsgi_app
    ctx = self.request_context(environ)
  File "/usr/lib/cgi-bin/site-packages/flask/app.py", line 2223, in request_context
    return RequestContext(self, environ)
  File "/usr/lib/cgi-bin/site-packages/flask/ctx.py", line 284, in __init__
    self.url_adapter = app.create_url_adapter(self.request)
  File "/usr/lib/cgi-bin/site-packages/flask/app.py", line 2040, in create_url_adapter
    subdomain=subdomain)
  File "/usr/lib/cgi-bin/site-packages/werkzeug/routing.py", line 1489, in bind_to_environ
    wsgi_server_name = get_host(environ).lower()
  File "/usr/lib/cgi-bin/site-packages/werkzeug/wsgi.py", line 169, in get_host
    rv = environ["SERVER_NAME"]
KeyError: 'SERVER_NAME'
Status: 500 Internal Server Error
Content-Type: text/plain
Content-Length: 59

A server error occurred.  Please contact the administrator.root@testwebserver:/urorroot@terrorrorrrr

Re: Module auf einem Server ohne ssh installieren

Verfasst: Mittwoch 29. Mai 2019, 15:15
von Sirius3
Es sieht komisch aus, dass Du in `/usr/` irgendwelche Dateien ablegen kannst. Als normaler Nutzer darf man das normalerweise nicht.

Wie hast Du denn `python index.py` ausgeführt, wenn Du gar keinen SSH-Zugang hast?
Da aber sys.path gleich aussieht, sollten auch die gleichen Pakete gefunden werden.

Re: Module auf einem Server ohne ssh installieren

Verfasst: Mittwoch 29. Mai 2019, 15:34
von anonym110
Wie ich Anfangs geschrieben habe, hab ich mir einen eigenen Apache Webserver in einer VirtualBox eingerichtet, um es dort testen zu können, da auf dem WebHosting noch nur python2.6 installiert ist, und ich warten muss bis sie mir das umstellen.

Re: Module auf einem Server ohne ssh installieren

Verfasst: Mittwoch 29. Mai 2019, 15:45
von __blackjack__
@Jnnk: Um einen Hoster der immer noch Python 2.6 anbietet, würde ich einen grossen Bogen machen. Wenn das dann auch noch die aktuellste Version ist, die angeboten wird, ist panisch mit den Armen fuchteln und schreiend wegrennen angesagt…

Re: Module auf einem Server ohne ssh installieren

Verfasst: Mittwoch 29. Mai 2019, 16:51
von anonym110
Würde ich auch gerne – habe da bloß leider keinen/nur geringen Einfluss. Bin am versuchen die Personen von einem besseren Anbieter zu überzeugen.

Re: Module auf einem Server ohne ssh installieren

Verfasst: Freitag 31. Mai 2019, 22:34
von anonym110
Hat jmd. noch eine Idee wie das ursprüngliche Problem gelöst werden kann? Wäre halt auch interessant zu wissen, wenn man sich nach einem alternativen Hoster umschaut.

Re: Module auf einem Server ohne ssh installieren

Verfasst: Donnerstag 6. Juni 2019, 10:49
von DeaD_EyE
In dem du deinen Webhoster hackst. Ist aber verboten.
Wechseln ist einfacher.

Da eine generelle Aussage zu treffen, ist nicht einfach, da es immer von Anbieter abhängt, was du alles machen kannst/darfst.