I am programming a ticket system, where users can upload their favorite thing: screenshots with red circles! Each ticket gets an ID and has an upload field. I use one django project with one app that uses this upload function.
What I’ve done
- I followed the official steps on How to use Django with Apache and mod_wsgi and that works. My website is available under http://localhost.
Where I am stuck
- I am stuck at the next step of the documentation How to authenticate against Django’s user database from Apache
- When I come to the part where they suggest to add the following code, the whole website gets an
500 Internal Server Error
Code to be added to wsgi.py:
import os
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
from django.contrib.auth.handlers.modwsgi import check_password
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
I didn’t touch nor change the wsgi.py code. I replaced it with the code above from the documentation. And then the 500 Error shows up.
Previous code, that I didn’t change in wsgi.py that works:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = get_wsgi_application()
Below is my project.conf file
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/project/mysite
ServerAdmin webmaster@localhost
Alias /favicon.ico /var/www/project/mysite/static/tickets/img/ibe.ico
Alias /media/ /var/www/mysite/media/
Alias /static/ /var/www/mysite/static/
<Directory /var/www/mysite/static/>
Require all granted
</Directory>
<Directory /var/www/mysite/tickets/media>
Require all granted
</Directory>
<Directory /var/www/project/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias / /var/www/project/mysite/mysite/wsgi.py
<Location /var/www/mysite/media>
AuthType Basic
AuthName "Top Secret"
Require valid-user
AuthBasicProvider wsgi
WSGIAuthUserScript /var/www/project/mysite/mysite/wsgi.py
</Location>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Infos
- I serve static files (CSS, JS) after I did
python manage collectstatic
and the website and the admin pages look nice and it works. - I can upload images and pdf files to a file location outside my django project and apache serves them, so that works, too. But with the url to the image, everybody can see it.
- I use PAM authentication with
django_pam
and users, that I can register with the django admin tools - in the settings I switched to
DEBUG = False
- in urls.py I commented out the
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
so the serving is with apache I’d say
What I want
The tickets’ images / uploads should only be viewable by the author of the ticket.
What I’d expect after I followed the documentation
That the configured logic and the authentication workes with apache after I followed the steps in the documentation.
Help would be appreciated!