Come installare Django su VPS Ubuntu

Guida step by step per l'installazione del proprio progetto Django su un server Ubuntu


Come installare Django su VPS Ubuntu

Come installare Django su VPS Ubuntu

Guida rapida per pubblicare il proprio sito web scritto in Python

Collegarsi via SSH - Installare Django su VPS Ubuntu

Per poter procedere è necessario avere accesso SSH al server su cui si vuole caricare il proprio sito web. Solitamente quando si acquista un servizio VPS (Virtual Private Server) è possibile gestire le connessioni SSH attraverso il pannello di controllo del servizio.

Per collegarsi come root è sufficiente aprire un terminale e scrivere:


ssh root@ip_del_server porta_del_server

La portadelserver di default è la 22 mentre l'ipdelserver dovreste trovarlo nel pannello di controllo del VPS.

Per non dovervi ricordare ogni volta l'IP del VPS potete utilizzare un software come Putty in cui è possibile salvare i dati di connessione. Lo so, l'interfaccia non è propriamente moderna ma funziona ottimamente per lo scopo.

Creazione utente - Installare Django su VPS Ubuntu

La prima cosa da fare è creare un nuovo utente così da utilizzare questo invece che l'utente root. Assegnate pure il nome che preferite al nuovo utente; per l'esempio io ho scelto giuseppe:


adduser giuseppe
usermod -aG sudo giuseppe
su - giuseppe
sudo adduser giuseppe www-data

L'ultimo comando assegna giuseppe al gruppo www-data cosa che tornerà utile successivamente.

Preparazione all'installazione di Python - Installare Django su VPS Ubuntu

Se non avete bisogno di installare una versione specifica di Python allora potete bypassare i primi due comandi altrimenti eseguiteli tutti e quattro:


sudo apt install software-properties-common -y
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update -y && sudo apt upgrade -y && sudo reboot

Non spaventatevi se il comando di update e upgrade impiega molto tempo; d'altra parte il server è appena stato creato quindi dovrà scaricare ed aggiornare tutto quanto.

Rimozione versioni inutilizzate di Python - Installare Django su VPS Ubuntu

Python è installato di default nella maggior parte dei VPS perciò, per evitare di fare confusione tra le varie installazioni di Python, potete utilizzare i seguenti comandi d'esempio e rimuovere quelle che non vi interessano:


sudo apt purge -y python2.7-minimal
sudo apt purge -y python2.7
sudo apt purge -y python3.6-minimal
sudo apt purge -y python3.6
sudo apt autoremove

Con il comando python -V vi verrà fornita la versione di Python in uso.

Installazione di Python e Pip - Installare Django su VPS Ubuntu

Per installare una versione specifica di Python basta utilizzare i seguenti comandi modificando la versione di Python con quella che preferite. Nel mio caso installo la versione 3.10.


sudo apt install python3.10 -y
sudo ln -s /usr/bin/python3 /usr/bin/python

sudo apt install -y python3-pip
sudo ln -s /usr/bin/pip3 /usr/bin/pip

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
sudo update-alternatives --config python
sudo update-alternatives --config python3

Gli ultimi due comandi vanno ad impostare la versione appena installata come prima scelta nel caso di più versioni installate.

Per controllare che tutto sia andato a buon fine possiamo lanciare i seguenti comandi:


python -V
pip -V

che ritornano le versioni rispettivamente di Python e Pip in uso. Infine riavviamo il server


sudo reboot

Creazione delle cartelle di progetto - Installare Django su VPS Ubuntu

A questo punto è tempo di creare le cartelle che conterranno il progetto. Dirigiamoci quindi nella cartella:


cd /var/www/html

e creiamo la cartella che conterrà il progetto. Io la chiamo projectdir:


sudo mkdir projectdir

Ora assegnamo il possesso della cartella al nostro utente con il comando:


sudo chown giuseppe:giuseppe projectdir

Infine importiamo il progetto via FTP o SFTP. *Un software comodo da utilizzare per questo scopom è Filezilla.

Dentro a projectdir dovrà essere inserito tutto il contenuto della vostra cartella di progetto; in pratica una cosa del genere:


projectdir
    |--myproject
    |--myapp
        |--__pycache__
        |--migrations
        |--static
        |--templates
        |--views.py
        |--urls.py
        |--...
    |--db.sqlite3
    |--manage.py

Generazione di un ambiente virtuale - Installare Django su VPS Ubuntu

La cosa migliore da fare se si vuole utilizzare il VPS anche per altri scopi (es: tenere qualche bot in esecuzione 24/7) è quello di utilizzare un ambiente virtuale così da non avere problemi di conflitti tra pacchetti o incompatibilità tra versioni. Se questo non ti interessa passa direttamente allo step successivo.

La creazione di un ambiente virtuale si può fare con semplicità utilizzando il pacchetto virtualenv da installare con il seguente comando:


pip install virtualenv

In caso non abbiate pip installato basta eseguire il seguente comando:


sudo apt install python3-pip

A questo punto è sufficiente dirigersi dentro la cartella del progetto:


cd projectdir

ed eseguire il comando:


virtualenv venv

che creerà una cartella di nome venv con tutto il necessario. Per utilizzare l'ambiente virtuale serve solo il comando:


source venv/bin/activate

*capirete dell'attivazione poiché a sinistra nella console comparirà la scritta (venv) prima del vostro nome utente.

Essendo un ambiente virtuale la versione di Python installata è quella di default e quindi non possiede i pacchetti pip eventualmente installati in precedenza.

Installazione pacchetti necessari - Installare Django su VPS Ubuntu

Andiamo ora ad installare i pacchetti necessari per far funzionare il progetto


pip install django
pip install gunicorn

In caso utilizziate MySQL dovrete installare anche il pacchetto:


pip install pymysql

Tenete conto che se volete uscire dall'ambiente virtuale vi basta scrivere deactivate in console.

Avvio di Django - Installare Django su VPS Ubuntu

Nel caso lo abbiate impostato, assicuratevi che l'ambiente virtuale sia attivo e di essere collegati come utenti non root (nel nostro caso come utente giuseppe).

Perché il tutto funzioni è importante modificare il file settings.py del vostro progetto Django; in particolare:

  • ALLOWED_HOSTS deve contenere il nome a dominio scelto ed eventualmente l'IP del VPS es: ALLOWED_HOSTS = ['127.0.0.1', '80.123.12.123', 'domainame.com', 'www.domainame.com']
  • DEBUG è importante che sia settato a False
  • In caso di utilizzo di un db diverso da quello di sviluppo andrà modificata anche la variabile DATABASES

È il momento di eseguire i comandi per inizializzare Django sul server:


python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic

In caso di necessità potrebbe tornarvi utile anche il comando di creazione del superutente Django:


python manage.py createsuperuser

Impostazione di Nginx - Installare Django su VPS Ubuntu

Il web server che abbiamo scelto è Nginx che è sempre più popolare oramai (in caso preferissi Apache od altri i comandi da seguire non saranno gli stessi).

Per installarlo eseguiamo il comando:


sudo apt install nginx -y

Ora, ipotizzando che l'IP del VPS sia 80.123.12.123 e che il nome a dominio sia domainame.com creiamo il file domainame.com con il comando:


sudo nano /etc/nginx/sites-available/domainame.com

Ed inseriamo questo contenuto opportunamente modificato con IP, nome a dominio veri ed i path corretti:


server {
    listen 80;
    server_name 80.123.12.123 domainame.com www.domainame.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /var/www/html/projectdir;
    }

    location /media/ {
        root /var/www/html/projectdir;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/var/www/html/projectdir/myproject.sock;
    }
}

Uscite salvando il file ed eseguite i seguenti comandi per abilitare il il sito e riavviare Nginx:


sudo ln -s /etc/nginx/sites-available/domainame.com  /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx

Impostazione di Gunicorn - Installare Django su VPS Ubuntu

Per ultima cosa bisogna impostare un servizio Gunicorn modificando il file:


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

Inserendo il contenuto seguente opportunamente adattato:


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

[Service]
User=giuseppe
Group=www-data
WorkingDirectory=/var/www/html/projectdir
ExecStart=/var/www/html/projectdir/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/var/www/html/projectdir/myproject.sock projectdir.wsgi:application

[Install]
WantedBy=multi-user.target

Riavviamo Gunicorn:


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

Per controllarne lo status o riavviare il servizio tornano utili anche i comandi:


sudo systemctl status gunicorn
sudo systemctl restart gunicorn

THE END - Installare Django su VPS Ubuntu

A questo punto se tutto è stato impostato correttamente dovreste vedere il vostro progetto semplicemente digitando il nome a dominio sulla barra di ricerca di un web browser. Se ciò non dovesse accadere potreste provare a capire se è un problema di impostazione del web server lanciando manualmente Django bypassando così Nginx e Gunicorn:


python manage.py runserver 0.0.0.0:80

Se anche così non viene visualizzato il vostro progetto allora il problema è sicuramente altrove.

In caso abbiate necessità di impostare un database MySQL potete fare riferimento a questo articolo TODO:LINK

Per eseguire l'update del vostro sito web/web app seguite questo procedimento:


sudo systemctl stop nginx
sudo systemctl stop gunicorn

Caricate tutte le modifiche via FTP/SFTP, avviate l'ambiente virtuale ed eseguite i seguenti comandi:


python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic
sudo systemctl restart gunicorn && sudo systemctl restart nginx

Se ti è piaciuto questo articolo e vorresti leggerne altri quando disponibili, considera di aggiungere il Feed RSS in un aggregatore di notizie come Feedly oppure salva questo sito tra i preferiti e torna quando vuoi 👋


Author: Fantantonio 

Date: 01/04/2022

Categories: guides

Tags: django nginx gunicorn mysql ubuntu vps ssh ftp virtualenv pip python