GNU/Linux >> Linux Esercitazione >  >> Panels >> Panels

Come configurare Django con Postgres, Nginx e Gunicorn su Ubuntu 20.04

Django è un framework web open source scritto in Python. È un popolare framework Web all-in-one e una delle migliori scelte per molti sviluppatori. Django offre molti vantaggi, come l'architettura MVT (Model View Template), il pannello di amministrazione automatico e il potente supporto del database ORM (Object Relational Mapping). Offre anche fantastici strumenti di debug per gli sviluppatori. In questo tutorial, ti mostreremo come installare Django con PostgreSQL come archivio del database invece di SQLite predefinito, Nginx come proxy inverso e Gunicorn come server delle applicazioni su Ubuntu 20.04.

Prerequisiti

  • Un Ubuntu 20.04 VPS
  • Accesso SSH con privilegi di root

Passaggio 1. Accedi al server

Innanzitutto, accedi al tuo server Ubuntu 20.04 tramite SSH come utente root:

ssh root@IP_Address -p Port_number

Dovrai sostituire "Indirizzo_IP" e "Numero_porta" con il rispettivo indirizzo IP e numero di porta SSH del tuo server. Inoltre, se necessario, sostituisci "root" con il nome utente dell'account amministratore.

Prima di iniziare, devi assicurarti che tutti i pacchetti del sistema operativo Ubuntu installati sul server siano aggiornati. Puoi farlo eseguendo i seguenti comandi:

# apt update -y
# apt upgrade -y

Passaggio 2. Crea un utente di sistema

Una volta effettuato l'accesso a Ubuntu 20.04 come root, creeremo un nuovo utente di sistema e gli concederemo i privilegi sudo. Useremo anche questo utente per completare questa installazione. In questo tutorial creeremo un nuovo utente di sistema chiamato 'master', puoi scegliere qualsiasi nome utente che ti piace.

# adduser master

Una volta creato, eseguiamo questo comando per aggiungere il nuovo utente al gruppo sudo. In Ubuntu, gli utenti che sono membri del gruppo sudo possono eseguire comandi sudo.

# usermod -aG sudo master

Aggiungeremo anche il master utente al nostro gruppo www-data

# usermod -aG www-data master

Ora possiamo accedere come nuovo utente "master"

# su - master

Passaggio 3. Installa i pacchetti

Per iniziare, installeremo tutti i pacchetti richiesti dal repository. Per installare Nginx, PostgreSQL, Python dal repository, possiamo eseguire questo comando:

$ sudo apt install postgresql postgresql-contrib python3-pip python3-dev libpq-dev nginx -y

Passaggio 4. Aggiungi database e utente database

Durante l'installazione di PostgreSQL, un utente di sistema denominato postgres è stato creato come utente amministrativo predefinito. Dobbiamo usare questo utente per accedere alla shell di PostgreSQL ed eseguire attività amministrative.

$ sudo -u postgres psql

Ti verrà richiesta la tua password "master" e la shell sarebbe così:

postgres=#

Nella shell postgreSQL, esegui i seguenti comandi:

postgres=# CREATE USER djangouser WITH PASSWORD 'm0d1fyth15';
postgres=# CREATE DATABASE djangodb;

Successivamente, dobbiamo anche modificare la codifica in UTF-8, il fuso orario e lo schema del database default_transaction_isolation.

postgres=# ALTER ROLE djangouser SET client_encoding TO 'utf8';
postgres=# ALTER ROLE djangouser SET default_transaction_isolation TO 'read committed';
postgres=# ALTER ROLE djangouser SET timezone TO 'UTC';

L'ultima parte, concediamo i privilegi al nuovo database, quindi usciamo dalla shell di PostgreSQL.

postgres=# GRANT ALL PRIVILEGES ON DATABASE djangodb TO djangouser;
postgres=# \q

Passaggio 5. Crea un ambiente virtuale Python

Django può essere installato in diversi modi, in questo articolo ti mostreremo come installarlo in un ambiente virtuale python.

$ sudo -H pip3 install --upgrade pip
$ sudo -H pip3 install virtualenv

Una volta completato, creiamo una nuova directory per l'installazione di django, quindi accediamo alla nuova directory

$ mkdir django && cd $_

Dopo essere entrati nella directory 'django', possiamo eseguire questo comando per creare un nuovo ambiente virtuale.

$ virtualenv djangoenv

Come si vede nell'immagine, il nuovo ambiente virtuale viene creato nella directory 'djangoenv'. Per installare Django, Gunicorn e Psycopg2 nell'ambiente virtuale, dobbiamo prima attivarlo.

$ source djangoenv/bin/activate

Eseguendo il comando sopra, la tua shell apparirà così:

(djangoenv) master@ubuntu20:~/django$

Mentre sei nella shell, esegui questo comando per installare django.

(djangoenv) master@ubuntu20:~/django$ pip install django gunicorn psycopg2

Una volta completato, dovresti vedere un output come questo:

Installing collected packages: sqlparse, backports.zoneinfo, asgiref, psycopg2, gunicorn, django
Successfully installed asgiref-3.4.1 backports.zoneinfo-0.2.1 django-4.0 gunicorn-20.1.0 psycopg2-2.9.2 sqlparse-0.4.2

Tutti i componenti necessari per avviare un progetto django devono essere installati nell'ambiente virtuale.

Passaggio 6. Crea un progetto Django

Nel passaggio precedente, abbiamo creato una directory ~/django o in questo caso /home/master/django . Creeremo un progetto django in questa directory, possiamo eseguire questo comando per installare il progetto django in ~/django . Il comando dovrebbe essere eseguito mentre siamo nell'ambiente virtuale.

(djangoenv) master@ubuntu20:~/django$ django-admin startproject djangoproject ~/django

Il comando sopra installerà il progetto django in ~/django/djangoproject . Se elenchi la directory, vedrai manage.py , djangoenv e djangoproject nel tuo ~/django .

Ora, poiché vogliamo usare PostgreSQL come archivio del database, dobbiamo modificare la configurazione.

$ nano ~/django/djangoproject/settings.py

Aggiungi questa riga nella parte superiore delle tue impostazioni.py

import os

E sostituisci le informazioni del database esistente con le seguenti.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'djangodb',
        'USER': 'djangouser',
        'PASSWORD': 'm0d1fyth15',
        'HOST': 'localhost',
        'PORT': '',
    }
}

Assicurati che il nome utente e la password del database corrispondano a quelli che abbiamo creato nel passaggio precedente. Sempre nello stesso file settings.py, trova ALLOWED_HOSTS quindi puoi aggiungere l'indirizzo IP del tuo server, i nomi di dominio, i nomi di sottodomini. Le voci devono essere separate da una virgola ed elencate tra virgolette.

ALLOWED_HOSTS = ['123.123.123.123', 'domain.com', 'sub.domain.com']

Quindi, trova la configurazione dei file statici di Django. Le modifiche sono necessarie per rendere accessibili i file statici di Django tramite nginx e per impedire a nginx di restituire messaggi di errore 404. Aggiungi questa riga dopo STATIC_URL ='/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

Non dimenticare di salvare le modifiche, quindi uscire.

Successivamente, è il momento di migrare lo schema del database iniziale nel nostro database PostgreSQL, eseguiamo questi comandi.

(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py makemigrations
(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py migrate

Quindi, crea un superutente.

(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py createsuperuser

Ti verrà chiesto di creare un nome utente, fornire un indirizzo e-mail e la password del nome utente. Vorresti salvare le informazioni su questo utente amministrativo e password perché le utilizzerai per accedere al backend di Django.

Per l'ultimo, esegui il comando seguente per raccogliere i file statici.

(djangoenv) master@ubuntu20:~/django$ ~/django/manage.py collectstatic

Dovrai confermare l'azione rispondendo con sì, quindi vedrai questo output dopo aver confermato:

128 static files copied to '/home/master/django/static'

Disattiva l'ambiente virtuale per uscire.

(djangoenv) master@ubuntu20:~/django$ deactivate

Passaggio 7. Crea un file di sistema Gunicorn

Per gestire il servizio Gunicorn, creeremo un file di unità systemd in /etc/systemd/system/gunicorn.service.

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

Incolla queste righe

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

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

[Install]
WantedBy=multi-user.target

Salva il file quindi esci. Quindi ricarica systemd e avvia gunicorn.

$ sudo systemctl daemon-reload
$ sudo systemctl start gunicorn

Per verificare se gunicorn è in esecuzione o meno, esegui questo comando:

$ sudo systemctl status gunicorn

Passaggio 8. Configura Nginx

Gunicorn è in esecuzione e ora siamo pronti per configurare nginx in modo che agisca come proxy inverso per il nostro progetto Django. Creiamo un blocco server nginx per Django ed eliminiamo il blocco server predefinito nginx.

$ sudo rm /etc/nginx/sites-enabled/default
$ sudo nano /etc/nginx/conf.d/django.conf

Incolla queste righe in /etc/nginx/conf.d/django.conf

server {
    listen 80;
    server_name 123.123.123.123;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        alias /home/master/django/static/;
        }
    location /.well-known {
    alias /home/master/django/;
}
    

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/master/django/djangoproject.sock;
    }
}

Prima di salvare i file, assicurati di sostituire 123.123.123.123 con l'indirizzo IP effettivo del tuo server e il percorso del socket è corretto. Quindi, controlla eventuali errori e riavvia nginx per ricaricare la nuova configurazione.

$ sudo nginx -t
$ sudo systemctl restart nginx

A questo punto, dovresti essere in grado di accedere al tuo progetto Django su http://YOUR_SERVER_IP_ADDRESS e l'URL amministrativo su http://YOUR_SERVER_IP_ADDRESS/admin utilizzando il tuo browser web preferito.

Passaggio 9. Installa il certificato SSL

Questo passaggio è facoltativo ma altamente consigliato da completare. Nell'era moderna, i siti Web dovrebbero essere eseguiti in HTTPS anziché HTTP. Questo passaggio ti guiderà attraverso l'installazione SSL da Let's Encrypt.

$ sudo apt install certbot python3-certbot-nginx -y

Una volta installato, modifica il blocco del server del tuo sito Web Django e sostituisci il server_name con il tuo dominio o sottodominio effettivo puntato all'indirizzo IP del tuo server. Assicurati che il record DNS del dominio o del sottodominio sia già indirizzato al tuo server prima di emettere il certificato SSL.

Apri /etc/nginx/conf.d/django.conf e modifica questa parte

server {
    listen 80;
    server_name 123.123.123.123;

a

server {
    listen 80;
    server_name yourdomain.com;

Assicurati di sostituire yourdomain.com con il tuo nome di dominio effettivo. Salva il file, quindi esci e ricarica Nginx.

$ sudo systemctl reload nginx

Ora siamo pronti per installare il certificato SSL, esegui questo comando:

$ sudo certbot

Dovresti fornire il tuo indirizzo e-mail, accettare i TOS Let's Encrypt e se desideri condividere o meno il tuo indirizzo e-mail con la Electronic Frontier Foundation. Quindi, devi scegliere per quali nomi desideri attivare HTTPS. Scegli il tuo sito web Django digitando il numero e premendo INVIO. Let's encrypt installerà il certificato e ti chiederà se configurare il reindirizzamento da HTTP a HTTPS o meno, puoi scegliere il reindirizzamento, quindi certbot creerà il reindirizzamento e ricaricherà Nginx se tutto è a posto.

Ora dovresti essere in grado di accedere al tuo sito Web Django in modalità HTTPS su https://yourdomain.com .

Ecco fatto, hai imparato a configurare Django con PostgreSQL, Nginx e Gunicorn.

Ovviamente, non devi configurare Django con PostgreSQL, Nginx e Gunicorn su Ubuntu 20.04 se utilizzi uno dei nostri servizi di hosting VPS Django, nel qual caso puoi semplicemente chiedere ai nostri esperti amministratori Linux di configurare Django con PostgreSQL , Nginx e Gunicorn su Ubuntu 20.04 VPS per te. Sono disponibili 24 ore su 24, 7 giorni su 7 e si prenderanno immediatamente cura della tua richiesta.

PS. Se ti è piaciuto questo post su come configurare Django con PostgreSQL, Nginx e Gunicorn su Ubuntu 20.04, condividilo con i tuoi amici sui social network usando i pulsanti qui sotto o lascia semplicemente una risposta nelle sezioni commenti. Grazie.


Panels
  1. Come installare Nginx con PHP5 e MySQL su Ubuntu 11.10

  2. Come installare phpMyAdmin con HHVM, Nginx e MariaDB su un VPS Ubuntu 14.04

  3. Come creare ed eliminare utenti su Ubuntu 16.04

  4. Come distribuire l'applicazione Flask con Nginx e Gunicorn su Ubuntu 20.04

  5. Come installare e configurare lo stack MERN con Nginx su Ubuntu 20.04

Come installare Magento 2 con Nginx e Letsencrypt su Ubuntu 18.04

Come installare Gitlab con PostgreSQL e Nginx su Ubuntu 15.04

Come installare Drupal 8 con Nginx, PHP-FPM e SSL su Ubuntu 15.10

Come installare Django con PostgreSQL e Nginx su Ubuntu 16.04

Come configurare l'ambiente di sviluppo Django su Ubuntu 18.04

Configura Django con Postgres, Nginx e Gunicorn su Ubuntu 18.04