So richten Sie Django mit Postgres, Nginx und Gunicorn unter Debian 11 ein

Einführung

Django ist ein vielseitiges Python-Framework für die Entwicklung von Webanwendungen, das sich durch Skalierbarkeit und Sicherheit auszeichnet. In Kombination mit PostgreSQL, einer Datenbanklösung, die für ihre Leistungsfähigkeit bekannt ist, Nginx als Webserver und Gunicorn als WSGI-HTTP-Server, entsteht eine solide und effiziente Basis für den Betrieb von Django-Applikationen. Diese Anleitung führt Sie Schritt für Schritt durch den Prozess der Einrichtung einer Django-Umgebung mit PostgreSQL, Nginx und Gunicorn auf einem Debian 11 Server.

Erforderliche Voraussetzungen

Bevor Sie mit der Installation beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:

  • Einen Debian 11 Server
  • Einen Benutzer mit Sudo-Rechten, der nicht der Root-Benutzer ist
  • Einen Domainnamen (optional)
  • Ein SSL-Zertifikat (optional)

Detaillierte Installationsschritte

1. Installation von PostgreSQL

Zunächst aktualisieren Sie die Paketquellen und installieren PostgreSQL sowie die zugehörigen Zusatztools:

sudo apt update
sudo apt install postgresql postgresql-contrib

Starten und aktivieren Sie den PostgreSQL-Dienst, um sicherzustellen, dass er automatisch beim Systemstart ausgeführt wird:

sudo systemctl enable postgresql
sudo systemctl start postgresql

Erstellen Sie anschließend einen dedizierten Datenbankbenutzer und eine Datenbank für Ihr Django-Projekt:

sudo -u postgres psql -c "CREATE USER django WITH PASSWORD 'password';"
sudo -u postgres psql -c "CREATE DATABASE my_django_db OWNER django;"

2. Einrichtung der Python-Umgebung

Installieren Sie Python 3 und den Paketmanager Pip:

sudo apt install python3 python3-pip

Erstellen Sie eine isolierte virtuelle Umgebung für Ihr Django-Projekt:

python3 -m venv venv
source venv/bin/activate

Installieren Sie Django und die benötigte Datenbankbibliothek:

pip install django psycopg2-binary

3. Erstellung eines Django-Projekts

Starten Sie ein neues Django-Projekt:

django-admin startproject my_django_project
cd my_django_project

Um zu überprüfen, ob Django korrekt installiert wurde, können Sie den integrierten Entwicklungsserver starten:

python3 manage.py runserver

4. Installation und Konfiguration von Nginx

Installieren Sie den Nginx-Webserver:

sudo apt install nginx

Erstellen Sie eine neue Konfigurationsdatei für Ihr Django-Projekt:

sudo nano /etc/nginx/sites-available/my_django_project

Fügen Sie die folgende Konfiguration in die Datei ein und passen Sie die Platzhalter für den Domainnamen und den Django-Port entsprechend an:


server {
    listen 80;
    server_name example.com;  

    location / {
        proxy_pass http://localhost:8000;  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }
}

Aktivieren Sie die erstellte Konfiguration:

sudo ln -s /etc/nginx/sites-available/my_django_project /etc/nginx/sites-enabled/my_django_project
sudo systemctl restart nginx

5. Gunicorn installieren und konfigurieren

Installieren Sie Gunicorn, den WSGI-Server:

pip install gunicorn

Erstellen Sie eine Konfigurationsdatei für Gunicorn als Systemdienst:

sudo nano /etc/systemd/system/gunicorn.service

Fügen Sie die folgende Dienstkonfiguration ein, und passen Sie den Benutzernamen, die Gruppe und den Pfad zu Ihrem Django-Projekt an:


[Unit]
Description=Gunicorn daemon
After=network.target

[Service]
User=django
Group=www-data
WorkingDirectory=/home/django/my_django_project
ExecStart=/home/django/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock my_django_project.wsgi:application

[Install]
WantedBy=multi-user.target

Aktivieren und starten Sie den Gunicorn-Dienst:

sudo systemctl daemon-reload
sudo systemctl enable gunicorn
sudo systemctl start gunicorn

6. Django für Gunicorn anpassen

Öffnen Sie die settings.py-Datei Ihres Django-Projekts:

nano my_django_project/settings.py

Fügen Sie Ihren Domainnamen zur ALLOWED_HOSTS-Liste hinzu, um Ihre Anwendung vor unautorisierten Zugriffen zu schützen:


ALLOWED_HOSTS = ['example.com', 'www.example.com']

Stellen Sie den Pfad zur WSGI-Anwendung in der WSGI_APPLICATION-Einstellung sicher:


WSGI_APPLICATION = 'my_django_project.wsgi.application'

7. Optionale SSL-Konfiguration

Wenn Sie ein SSL-Zertifikat verwenden möchten, bearbeiten Sie die Nginx-Konfigurationsdatei:

sudo nano /etc/nginx/sites-available/my_django_project

Fügen Sie folgende Zeilen zum Serverblock hinzu, und passen Sie die Pfade zum Zertifikat und zum Schlüssel an:


listen 443 ssl;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/certificate.key;

Starten Sie Nginx neu, um die Änderungen zu aktivieren:

sudo systemctl restart nginx

Abschluss

Sie haben nun erfolgreich Django mit PostgreSQL, Nginx und Gunicorn auf Ihrem Debian 11 Server eingerichtet. Diese Konfiguration bildet eine solide Basis für Ihre Webanwendungen. Vergessen Sie nicht, regelmäßige Updates durchzuführen und Sicherheitsmaßnahmen zu implementieren, um Ihre Anwendung zu schützen.

FAQ – Häufig gestellte Fragen

1. Wie greife ich auf die PostgreSQL-Datenbank zu?

Sie können die Datenbank über die Konsole oder mit einem Python-Skript erreichen:


# Konsole:
psql -U django -d my_django_db

# Python:
import psycopg2
conn = psycopg2.connect(database="my_django_db", user="django", password="password")

2. Wie starte ich den Gunicorn-Server neu?

sudo systemctl restart gunicorn

3. Wie greife ich auf die Django-Admin-Oberfläche zu?

Verwenden Sie die URL im Browser:

https://your_domain_name/admin/

4. Wie füge ich weitere Django-Apps hinzu?

Erstellen Sie neue Apps mit python manage.py startapp app_name und registrieren Sie sie in der INSTALLED_APPS-Liste in settings.py.

5. Kann ich eine andere Datenbank verwenden?

Django unterstützt neben PostgreSQL auch MySQL, SQLite und Oracle.

6. Wie optimiere ich die Leistung meiner Django-Anwendung?

  • Caching-Mechanismen nutzen
  • SQL-Abfragen optimieren
  • Anzahl der gleichzeitigen Anfragen reduzieren

7. Wie sichere ich meine Django-Anwendung?

  • Starke Passwörter verwenden
  • Zwei-Faktor-Authentifizierung aktivieren
  • Eine Web Application Firewall (WAF) nutzen

8. Wo finde ich weitere Infos zu Django?