Django, Postgres, Nginx & Gunicorn på Ubuntu: Komplett guide


Oppsett av Django med Postgres, Nginx og Gunicorn på Ubuntu

Introduksjon

Django er et utbredt Python-rammeverk som muliggjør utvikling av robuste og skalerbare webapplikasjoner. Postgres, et avansert objektrelasjonelt databasehåndteringssystem, fungerer optimalt for datahåndtering i Django-applikasjoner. Nginx er en høytytende webserver som brukes som en omvendt proxy for Django-applikasjoner. Gunicorn er en WSGI HTTP-server som hoster selve Django-applikasjonen.

Ved å kombinere Django med Postgres, Nginx og Gunicorn på en Ubuntu-server, etableres en effektiv og sikker plattform for webapplikasjoner. Denne veiledningen gir en trinnvis forklaring på hvordan du konfigurerer denne teknologistakken på ditt Ubuntu-system.

Forutsetninger

  • Et Ubuntu-system med administratortilgang
  • Python 3 eller en nyere versjon
  • Pip, Pythons pakkehåndteringsverktøy
  • PostgreSQL
  • Nginx
  • Gunicorn

Trinn 1: Installere Postgres

1. Oppdater pakkeoversikten:

sudo apt update

2. Installer PostgreSQL ved hjelp av følgende kommando:

sudo apt install postgresql postgresql-contrib

3. Start PostgreSQL-tjenesten:

sudo systemctl start postgresql

4. Opprett en ny database og bruker for Django-applikasjonen:

sudo -u postgres psql -c "CREATE DATABASE mydatabase;"
sudo -u postgres psql -c "CREATE USER myuser WITH PASSWORD 'mypassword';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;"

Trinn 2: Installere Django

1. Opprett et virtuelt miljø for Django-prosjektet ditt:

python3 -m venv django-env
source django-env/bin/activate

2. Installer Django ved hjelp av pip:

pip install Django

3. Opprett et nytt Django-prosjekt:

django-admin startproject myproject

4. Installer Django-pakker for tilkobling til Postgres:

pip install django-psycopg2

Trinn 3: Konfigurere Django-innstillinger

1. Åpne innstillingsfilen for Django-prosjektet:

nano myproject/settings.py

2. Konfigurer databaseinnstillingene for å koble til Postgres-databasen:


    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'mydatabase',
            'USER': 'myuser',
            'PASSWORD': 'mypassword',
            'HOST': 'localhost',
            'PORT': '5432',
        }
    }
    

Trinn 4: Installere Nginx

1. Installer Nginx:

sudo apt install nginx

2. Start Nginx-tjenesten:

sudo systemctl start nginx

Trinn 5: Konfigurere Nginx som omvendt proxy

1. Opprett en ny serverblokk for Django-applikasjonen i Nginx-konfigurasjonsfilen:

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

2. Lim inn følgende konfigurasjon i filen:


    server {
        listen 80;
        server_name www.example.com;

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

3. Aktiver den nye serverblokken ved å koble den til hovedkonfigurasjonsfilen:

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/myproject

4. Last inn endringene i Nginx-konfigurasjonen:

sudo nginx -t
sudo systemctl reload nginx

Trinn 6: Installere Gunicorn

1. Installer Gunicorn:

pip install gunicorn

Trinn 7: Konfigurere Gunicorn for Django

1. Opprett en systemd-tjenestefil for Gunicorn:

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

2. Lim inn følgende konfigurasjon i filen:


    [Unit]
    Description=Gunicorn service for Django project

    [Service]
    User=username
    Group=www-data
    WorkingDirectory=/path/to/myproject
    Environment=DJANGO_SETTINGS_MODULE=myproject.settings
    ExecStart=/django-env/bin/gunicorn myproject.wsgi:application \
      --bind 127.0.0.1:8000 \
      --workers 3 \
      --threads 4
    ExecReload=/bin/kill -HUP $MAINPID
    Restart=on-failure

    [Install]
    WantedBy=multi-user.target
  

3. Start og aktiver Gunicorn-tjenesten:

sudo systemctl start gunicorn
sudo systemctl enable gunicorn

Konklusjon

Ved å følge disse trinnene har du etablert en robust og sikker plattform for webapplikasjoner ved bruk av Django, Postgres, Nginx og Gunicorn på Ubuntu. Denne stakken legger grunnlaget for utvikling og distribusjon av skalerbare og pålitelige webapplikasjoner.

Optimalisering av ytelse, sikkerhet og pålitelighet bør være en kontinuerlig prosess. Ytterligere forbedringer kan inkludere bruk av memcache eller Redis for hurtigbufring, implementering av SSL/TLS-kryptering for sikker kommunikasjon, og overvåking av systemytelsen for å opprettholde optimal effektivitet.

Vanlige spørsmål

1. Er et virtuelt miljø nødvendig for Django?
Absolutt. Det anbefales å opprette et virtuelt miljø for å isolere Django-prosjektet fra andre installerte Python-pakker, og dermed unngå konflikter og sikre stabilitet.

2. Kan jeg bruke en annen database enn Postgres?
Ja, Django er fleksibel og støtter flere database-backends som MySQL, SQLite og Oracle. Du kan konfigurere databasen ved å endre innstillingene i Django-prosjektet ditt i henhold til dine preferanser.

3. Hvordan beskytter jeg Django-applikasjonen min mot CSRF-angrep?
Djangos middleware for CSRF-beskyttelse er nøkkelen. Legg til «django.middleware.csrf.CsrfViewMiddleware» i «MIDDLEWARE» listen i innstillingsfilen for å aktivere denne beskyttelsen.

4. Hvordan feilsøker jeg problemer i Django?
Aktiver Django DEBUG-modus i innstillingsfilen for å få detaljert feilinformasjon. I tillegg kan «runserver –traceback» gi mer dyptgående sporing av feil.

5. Hvordan optimaliserer jeg ytelsen til min Django-applikasjon?
Bruk caching-mekanismer som memcache eller Redis for å lagre ofte brukte data. Optimaliser også koden din, for eksempel ved å bruke Django-pakker for å optimalisere databaseforespørsler.

6. Hvordan distribuerer jeg Django-applikasjonen min på en produksjonsserver?
Konfigurer Nginx og Gunicorn tilpasset et produksjonsmiljø. For distribusjon av selve Django-appen, vurder system- eller containerbaserte distribusjonsmetoder.

7. Hvordan sikrer jeg min Django-applikasjon?
Implementer SSL/TLS-kryptering for sikker kommunikasjon. Bruk Django-pakker for å etablere autorisasjons- og autentiseringssystemer. Overvåk systemets ytelse og loggfiler for å avdekke og håndtere sikkerhetshendelser.

8. Hvilke ressurser kan jeg benytte for videre læring?
* Django Documentation
* Postgres Documentation
* Nginx Documentation
* Gunicorn Documentation