django und apache2

Django, Flask, Bottle, WSGI, CGI…
Antworten
guhamail
User
Beiträge: 12
Registriert: Samstag 19. Februar 2022, 13:34

Hallo,

ich habe mein erstes Projekt mit Django fertig gestellt und es läuft unter dem integrierten Entwicklungsserver bestens. Nun geht es daran, die Seite online zu stellen.

Dafür steht ein Debian Server mit Apache2 2.4.52 und libapache2-mod-wsgi-py3 4.7.1-3+b1 zur Verfügung. Auf dem Server läuft noch keyhelp, aber ich denke das stört nicht weiter.

Ich habe einen vhost angelegt mit folgendem Inhalt:

Code: Alles auswählen

     <VirtualHost *:80>
     	ServerName django.Domain.de
     	DocumentRoot "/home/users/name/www"
     	
     	ErrorLog "/var/log/django_error.log"
     	
     	<Directory "/home/users/name/www/django/project"
     		<Files wsgi.py>
     			Require all granted
     		</Files>
	</Directory>
	
	WSGIDaemonProcess project python-path=/home/users/name/www/django/project python-home=/home/users/name/www/django/venv
	WSGIProcessGroup project
	WSGIScriptAlias / /home/users/name/www/django/project/wsgi.py
  </VirtualHost>


Beim Aufrufen der Seite erhalte ich einen Internen Serverfehler. Die django_error.log wirft folgende Fehler aus:

mod_wsgi (pid=2889918): Failed to exec Python script file
mod_wsgi (pid=2889918): Exception occurred processing WSGI script '/home/users/name/www/django/project/wsgi.py'.
ModuleNotFoundError: No module named 'project'

Ich denke mal alles hängt an der ersten Fehlerzeile.
Könnt ihr spontan einen Fehler in meinem Virtualhost erkennen? Muss ich vielleicht den python-home anders setzen?

Vielen Dank
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

also in der Django-Doku steht das etwas anders: https://docs.djangoproject.com/en/4.0/h ... i/modwsgi/
Hast du das schon mal probiert?

_Persönlich_ finde ich das Setup über Gunicorn als WSGI-Applikationsserver und dann nginx oder Apache als Reverse-Proxy davor einfacher. IMHO ist das auch gängiger. mod_wsgi finde ich immer "fummelig" und schwieriger zu debuggen als Gunicorn.

Gruß, noisefloor
guhamail
User
Beiträge: 12
Registriert: Samstag 19. Februar 2022, 13:34

Ja, ich habe es auch schon so wie in der Doku versucht. Gleicher Fehler. Aber ich werde es noch einmal versuchen. Vielleicht habe ich ja was übersehen.

Der Gedanke mit gunicorn kam mir gestern auch und habe es voller Tatendrang versucht umzusetzen. Aber ich wurde auch dort enttäuscht.

Code: Alles auswählen

[2022-03-03 09:37:59 +0100] [3018686] [INFO] Starting gunicorn 20.1.0
[2022-03-03 09:37:59 +0100] [3018686] [INFO] Listening at: http://127.0.0.1:8000 (3018686)
[2022-03-03 09:37:59 +0100] [3018686] [INFO] Using worker: sync
[2022-03-03 09:37:59 +0100] [3018687] [INFO] Booting worker with pid: 3018687
[2022-03-03 08:37:59 +0000] [3018687] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/home/users/name/www/django/env/lib/python3.9/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
    worker.init_process()
  File "/home/users/name/www/django/env/lib/python3.9/site-packages/gunicorn/workers/base.py", line 134, in init_process
    self.load_wsgi()
  File "/home/users/name/www/django/env/lib/python3.9/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/home/users/name/www/django/env/lib/python3.9/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/home/users/name/www/django/env/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
    return self.load_wsgiapp()
  File "/home/users/name/www/django/env/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/home/users/name/www/django/env/lib/python3.9/site-packages/gunicorn/util.py", line 359, in import_app
    mod = importlib.import_module(module)
  File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/home/users/name/www/django/project/wsgi.py", line 18, in <module>
    sys.path.append('/home/users/name/www/django')
NameError: name 'sys' is not defined
[2022-03-03 08:37:59 +0000] [3018687] [INFO] Worker exiting (pid: 3018687)
[2022-03-03 09:37:59 +0100] [3018686] [INFO] Shutting down: Master
[2022-03-03 09:37:59 +0100] [3018686] [INFO] Reason: Worker failed to boot.


Danach habe ich erstmal aufgegeben
guhamail
User
Beiträge: 12
Registriert: Samstag 19. Februar 2022, 13:34

nun gut, ein "import sys" in der wsgi.py brachte jetzt quick and dirty Abhilfe. gunicorn läuft erstmal. Werde mich dann heute Nachmittag mal dran setzen und den Apache-Proxy aufsetzen.

Ich melde mich wieder, wenn ich scheitere ;-)

Viele Grüße
Guido
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

hattest du das venv aktiviert, bevor du Gunicorn gestartet hast? Wenn nein musst du Gunicorn den Python-Path mitgeben: https://docs.gunicorn.org/en/stable/set ... pythonpath

Gruß, noisefloor
Antworten