17. Live su Digital Ocean

Ci siamo, è arrivato finalmente il momento di mandare live il nostro sito scritto in Django! Prima di iniziare facciamo il punto degli strumenti di cui avremo bisogno che useremo durante la lezione.

Anzitutto, un client SSH che ci servirà per connetterci al server su cui caricheremo il sito tramite riga di comando. Se siete su Linux o su MacOS potete saltare questo passo in quanto questi sistemi operativi vengono distribuiti con un Client SSH integrato. Se siete su Windows ci sono alcune opzioni disponibili, tra cui vi consiglio Putty.

Per quanto riguarda il trasferimento dei file, quindi il passaggio in cui copieremo i file del nostro blog, ci sono tante opzioni disponibili. Tra queste noi useremo un programma ad Interfaccia Grafica chiamato FileZilla disponibile anche per Windows, estremamente comodo.

Una volta pronti questi strumenti, possiamo iniziare con la lezione.

Ci sono tantissimi modi per mandare live un progetto scritto in Django, a partire dal costruirvi il vostro server e settarlo per i fatti vostri, ma in casi come il nostro quello che probabilmente volete fare è usare uno spazio offerto da qualche servizio di Hosting.


Come mettere il nostro blog online

In questa lezione userò Digital Ocean, che a differenza di molti altri provider offre un servizio chiamato "one click install" per quanto riguarda Django. In sostanza una volta avviata, la macchina sarà praticamente pronta all'uso. Inoltre si tratta di un hosting estremamente economico, si parte da 5 dollari al mese, e sono tanti i servizi che vengono inclusi nel pacchetto. Io lo uso per alcuni dei miei server e ve lo consiglio! Inoltre, vi lascio QUESTO LINK come referenza per l'iscrizione. Ciò significa che se creerete un account a partire da QUESTO LINK, Digital Ocean saprà che sono stato io a consigliarvelo, e per questo motivo avrete 10 dollari di credito gratuiti spendibili sulla piattaforma, e qualora decidiate di continuare a usare questo servizio una volta raggiunti i 25 dollari di fatturazione, Digital Ocean darà anche a me 25 dollari di credito utilizzabile per i miei server. Quindi, se questa serie vi è piaciuta e volete supportare il sito e il progetto, questo è un modo semplice con cui potete farlo in maniera efficace.

Cliccate su CREATE NEW DROPLET e da One-Click Apps scegliete il Pacchetto Ubuntu preconfigurato con Django, scegliete l'ultima versione messa a disposizione. A questo punto dobbiamo aspettare di ricevere le credenziali via mail.

Una volta dentro testiamo l'IP che ci viene passato, semplicemente incollandolo nel browser e andando all'indirizzo. Dovreste riconoscere il famoso Hello World di Django, visto già in fase di sviluppo! Siamo ora pronti per copiare i nostri file! QUI potete trovare una copia del blog scritta da me.

Prima di iniziare a copiare i dati dobbiamo aggiornare la macchina, per motivi di velocità e sicurezza. Per fare ciò:

apt-get update

apt-get upgrade

pip install --upgrade pip

pip install --upgrade django

reboot


Aggiorniamo il file settings.py del server

Bene, copiamo ora le cartelle posts, static e template sulla BASE_DIR del progetto nel server, loggandoci come Django (le credenziali dell'utente ci vengono fornite non appena ci logghiamo tramite SSH usando root) da FileZilla.

Fatto?

Quindi modifichiamo il file settings.py per renderlo concorde con quello del nostro blog sviluppato in locale.

NON CONDIVIDETE CON NESSUNO LA SECRET_KEY!

Tra le modifiche, dobbiamo dare anzitutto:

DEBUG = False

Installare l'Applicazione Posts:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'posts',
]

Aggiungere il path per la cartella Templates:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

E quindi, per quanto riguarda i file statici, dobbiamo assegnare STATICFILES_DIRS:

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

Aggiungiamo STATIC_ROOT, prendendo l'indirizzo preimpostato da nginx, accessibile col comando:

cat /etc/nginx/sites-available/django

STATIC_ROOT è la cartella dove verranno depositati i vari file statici in fase appunto di produzione, e a differenza della fase di sviluppo, stavolta verranno serviti da nginx.

STATIC_ROOT = '/home/django/django_project/django_project/static'

Ora possiamo dare il comando per fare in modo che i files vengano copiati nella STATIC_ROOT per essere serviti:

python manage.py collectstatic

Quindi dobbiamo modificare il file urls.py presente nel sito per aggiungere il link alla nostra app:

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('posts.urls'))
]

E quindi possiamo dare il comando:

service gunicorn restart

Ora il sito dovrebbe essere accessibile tramite l'IP della macchina, verificatelo!


Accediamo al pannello di amministrazione e aggiorniamolo

Se tutto è andato a buon fine, provate ad accedere al pannello di amministrazione. L'interfaccia dovrebbe risultare piuttosto bruttina e antiquata. Questo perché nginx è settato per puntare a dei file riguardanti lo stile che non sono quelli della nostra attuale versione di Python, copiati col comando collectstatic in precedenza.

Dobbiamo modificare i link ai file static di admin, nel file di configurazione visto prima, col comando:

nano /etc/nginx/sites-available/django

E quindi facciamo la seguente modifica:

# Proxy the static assests for the Django Admin panel
location /static/admin {
#       alias /usr/lib/python2.7/dist-packages/django/contrib/admin/static/admin/;
    alias /home/django/django_project/django_project/static/admin;
}

A questo punto possiamo dare il comando:

service nginx restart

Ed ecco che l'interfaccia di Amministrazione è stata "portata nel futuro"! Ora il nostro blog è pronto per essere collegato ad un dominio web! Prima di fare ciò vorremo magari mettere in atto alcune clausole di sicurezza come disabilitare l'accesso di root tramite SSH e magari creare un nuovo utente a cui aggiungere privilegi di sudo!

Questo era tutto per questa serie introduttiva dedicata a Django e Bootstrap.