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
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
Author: Fantantonio
Date: 01/04/2022
Categories: guides
Tags: django nginx gunicorn mysql ubuntu vps ssh ftp virtualenv pip python