Introduzione

Django è un framework Web gratuito, open source e di alto livello utilizzato per lo sviluppo di applicazioni Web Python. Viene fornito con un set di strumenti che consente di creare applicazioni Web sicure e scalabili. Il suo obiettivo principale è facilitare la creazione di applicazioni complesse e prendersi cura della struttura interna.

In questo tutorial impareremo come installare Django e configurare Nginx come proxy inverso per Django su CentOS 8.

Prerequisiti

  • Un server che esegue CentOS 8.
  • Un utente non root con privilegi sudo.

Se desideri installare Django Python Framework su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Installare Python e PIP

Django è un framework basato su Python, quindi dovrai installare Python e PIP nel tuo sistema. Installeremo anche l'editor di testo da terminale nano per facilitare la modifica dei file, altrimenti puoi utilizzare vi installato di default sul sistema. Puoi installarli eseguendo il seguente comando:

sudo dnf install nano python36 python3-pip -y

Una volta installati entrambi i pacchetti, è possibile procedere al passaggio successivo.

Installare Django

Puoi installare Django con il comando PIP come mostrato di seguito:

sudo pip3 install Django

Dopo aver installato Django, puoi verificare la versione di Django con il seguente comando:

django-admin --version

Dovresti vedere la versione di Django nel seguente output:

3.0.4

Creare un progetto Django

A questo punto, Django è installato. Ora è il momento di creare una nuova applicazione Django.

Puoi creare una nuova applicazione Django usando il comando django-admin nella directory /opt come mostrato di seguito:

cd /opt
django-admin startproject djangoproject

Una volta creato il progetto django, cambia la directory in djangoproject e migra le modifiche con i seguenti comandi:

cd djangoproject
sudo python3 manage.py migrate

Dovresti ottenere un messaggio di output simile al seguente:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying sessions.0001_initial... OK

Successivamente, dovrai creare un account utente amministratore per la gestione del progetto Django. Puoi crearlo con il seguente comando:

sudo python3 manage.py createsuperuser

Ti verrà chiesto di fornire nome utente, e-mail e password. Puoi fornirli secondo la tua scelta come mostrato di seguito:

Username (leave blank to use 'root'): noviello
Email address: [email protected]
Password: 
Password (again): 
Superuser created successfully.

Al termine, puoi procedere al passaggio successivo.

Avviare l'applicazione Django

Per impostazione predefinita, non è possibile accedere all'applicazione Django dagli host remoti. Quindi dovrai consentire Django per host esterni. Puoi farlo aggiungendo il tuo IP del server o il nome dominio nel file settings.py:

sudo nano /opt/djangoproject/djangoproject/settings.py

Cambia la seguente riga:

ALLOWED_HOSTS = ['tuo_dominio_o_Ip']

Salva e chiudi il file. Quindi, avvia l'applicazione Django con i seguenti comandi:

cd /opt/djangoproject
python3 manage.py runserver 0.0.0.0:8000

Dovresti vedere il seguente output:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
March 25, 2020 - 22:37:03
Django version 3.0.4, using settings 'djangoproject.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

A questo punto, l'applicazione Django è ora avviata e funziona sulla porta 8000. È ora possibile procedere al passaggio successivo.

Configurare SELinux e Firewall (opzionale)

Successivamente, se hai il firewall di CentOs attivo, sarà necessario consentire le porte 8000 e 80 tramite firewalld. Puoi permetterli con i seguenti comandi:

sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

Quindi, configurare SELinux con il seguente comando:

sudo setsebool httpd_can_network_connect on -P

Al termine, puoi procedere al passaggio successivo.

Accedere all'applicazione Django

Puoi accedere all'applicazione Django visitando l'URL https://tuo_dominio_o_ip:8000. Dovresti vedere la seguente pagina:

Puoi anche accedere all'interfaccia di amministrazione di Django usando l'URL https://tuo_dominio_o_ip:8000/admin . Dovresti vedere la seguente pagina:

Fornire l'amministratore nome utente, password e fare clic sul pulsante Login.

Installare Nginx e Gunicorn

In questa sezione, installeremo Gunicorn per creare e gestire il servizio Django e Nginx per servire l'applicazione Django.

Innanzitutto, installa Nginx con il seguente comando:

sudo dnf install nginx -y

Quindi, installa Gunicorn usando il comando PIP come mostrato di seguito:

sudo pip3 install gunicorn

Una volta installati entrambi i pacchetti, avviare il servizio Nginx e abilitarlo all'avvio dopo il riavvio del sistema con il comando seguente:

sudo systemctl start
sudo systemctl enable nginx

Successivamente, modifica la proprietà della directory /opt/djangoproject in Nginx come mostrato di seguito:

sudo chown -R nginx:nginx /opt/djangoproject

Creare un file di servizio Systemd per Django

Successivamente, crea un file di servizio systemd per la gestione del servizio Django con il seguente comando:

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

Aggiungi le seguenti righe:

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

[Service]
User=nginx
Group=nginx
WorkingDirectory=/opt/djangoproject
ExecStart=/usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application

[Install]
WantedBy=multi-user.target

Salvare e chiudere il file, quindi ricaricare il demone systemd con il comando seguente:

sudo systemctl daemon-reload

Quindi, avviare il servizio Django e abilitarlo per l'avvio dopo il riavvio del sistema con il seguente comando:

sudo systemctl start django
sudo systemctl enable django

Ora puoi controllare lo stato del servizio Django con il seguente comando:

sudo systemctl status django

Dovresti vedere il seguente output:

● django.service - django daemon
   Loaded: loaded (/etc/systemd/system/django.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-03-25 23:49:52 CET; 13s ago
 Main PID: 4196 (gunicorn)
    Tasks: 4 (limit: 12251)
   Memory: 92.6M
   CGroup: /system.slice/django.service
           ├─4196 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application
           ├─4199 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application
           ├─4200 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application
           └─4202 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application

Configurare Nginx per Django

Successivamente, dovrai configurare Nginx come proxy inverso per Django. Per fare ciò, crea un nuovo file di configurazione Nginx con il seguente comando:

sudo nano /etc/nginx/conf.d/django.conf

Aggiungi le seguenti righe:

server {
    listen 80;
    server_name tuo_dominio_o_ip;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /opt/djangoproject;
    }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/opt/djangoproject/djangoproject.sock;
    }
}

Salva e chiudi il file al termine. Quindi, prova nginx per qualsiasi errore di sintassi con il seguente comando:

sudo nginx -t

Se tutto va bene, dovresti ottenere il seguente output:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Quindi, riavvia il servizio Nginx per implementare le modifiche:

sudo systemctl start nginx

Puoi anche verificare Nginx con il seguente comando:

sudo systemctl status nginx

Dovresti ottenere il seguente output:

● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-03-25 23:53:07 CET; 9s ago
  Process: 4295 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 4293 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 4292 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 4297 (nginx)
    Tasks: 2 (limit: 12251)
   Memory: 3.9M
   CGroup: /system.slice/nginx.service
           ├─4297 nginx: master process /usr/sbin/nginx
           └─4298 nginx: worker process

Ora puoi accedere alla tua applicazione Django usando l'URL http://tuo_dominio_o_ip.

Conclusione

In questa guida, abbiamo imparato come installare Django su CentOS 8. Abbiamo anche imparato a usare Gunicorn per creare e gestire il servizio Django e configurare Nginx come proxy inverso per servire l'applicazione Django.