Django
Distribuzione
Ricerca…
Esecuzione dell'applicazione Django con Gunicorn
Installa gunicorn
pip install gunicorn
Dalla cartella del progetto django (stessa cartella in cui si trova manage.py), eseguire il comando seguente per eseguire il progetto django corrente con gunicorn
gunicorn [projectname].wsgi:application -b 127.0.0.1:[port number]
È possibile utilizzare l'opzione
--env
per impostare il percorso per caricare le impostazionigunicorn --env DJANGO_SETTINGS_MODULE=[projectname].settings [projectname].wsgi
o eseguire come processo demone usando l'opzione
-D
All'avvio corretto di gunicorn, le seguenti righe appariranno in console
Starting gunicorn 19.5.0
Listening at: http://127.0.0.1:[port number] ([pid])
....
(altre informazioni aggiuntive sul server gunicorn)
Distribuzione con Heroku
Scarica Heroku Toolbelt .
Passa alla radice dei sorgenti della tua app Django. Avrai bisogno di TK
Digita
heroku create [app_name]
.heroku create [app_name]
. Se non si fornisce un nome app, Heroku ne genererà uno a caso. L'URL della tua app saràhttp://[app name].herokuapp.com
Crea un file di testo con il nome
Procfile
. Non mettere un'estensione alla fine.web: <bash command to start production server>
Se hai un processo di lavoro, puoi aggiungerlo anche tu. Aggiungi un'altra riga nel formato:
worker-name: <bash command to start worker>
Aggiungi un requisito.txt.
- Se si utilizza un ambiente virtuale, eseguire
pip freeze > requirements.txt
- Altrimenti, ottieni un ambiente virtuale! . Puoi anche elencare manualmente i pacchetti Python di cui hai bisogno, ma questo non sarà trattato in questo tutorial.
È il momento dello spiegamento!
-
git push heroku master
Heroku ha bisogno di un repository git o di una cartella dropbox per fare distribuzioni. In alternativa puoi configurare il ricaricamento automatico da un repository GitHub su
heroku.com
, ma non loheroku.com
in questo tutorial.-
heroku ps:scale web=1
Questo ridimensiona il numero di "dynos" web in uno. Qui puoi saperne di più sui dynos .
-
heroku open
o vai ahttp://app-name.herokuapp.com
Suggerimento:
heroku open
apre l'URL della tua app heroku nel browser predefinito.-
Aggiungi componenti aggiuntivi . Dovrai configurare la tua app Django per legare con i database forniti in Heroku come "componenti aggiuntivi". Questo esempio non copre questo, ma un altro esempio è nella pipeline sulla distribuzione di database in Heroku.
Distribuzione remota semplice fabfile.py
Fabric è una libreria Python (2.5-2.7) e uno strumento da riga di comando per semplificare l'uso di SSH per la distribuzione delle applicazioni o le attività di amministrazione dei sistemi. Ti permette di eseguire funzioni arbitrarie di Python tramite la riga di comando.
Installa il tessuto tramite il pip install fabric
Crea fabfile.py
nella tua directory principale:
#myproject/fabfile.py
from fabric.api import *
@task
def dev():
# details of development server
env.user = # your ssh user
env.password = #your ssh password
env.hosts = # your ssh hosts (list instance, with comma-separated hosts)
env.key_filename = # pass to ssh key for github in your local keyfile
@task
def release():
# details of release server
env.user = # your ssh user
env.password = #your ssh password
env.hosts = # your ssh hosts (list instance, with comma-separated hosts)
env.key_filename = # pass to ssh key for github in your local keyfile
@task
def run():
with cd('path/to/your_project/'):
with prefix('source ../env/bin/activate'):
# activate venv, suppose it appear in one level higher
# pass commands one by one
run('git pull')
run('pip install -r requirements.txt')
run('python manage.py migrate --noinput')
run('python manage.py collectstatic --noinput')
run('touch reload.txt')
Per eseguire il file, usa semplicemente il comando fab
:
$ fab dev run # for release server, `fab release run`
Nota: non è possibile configurare le chiavi ssh per github e digitare manualmente login e password, mentre fabfile esegue, lo stesso con le chiavi.
Usando Heroku Django Starter Template.
Se hai intenzione di ospitare il tuo sito Django su Heroku, puoi iniziare il tuo progetto usando il Template di avvio Heroku Django:
django-admin.py startproject --template=https://github.com/heroku/heroku-django-template/archive/master.zip --name=Procfile YourProjectName
Ha una configurazione pronta per la produzione per file statici, impostazioni database, Gunicorn, ecc. E miglioramenti alla funzionalità di file statici di Django tramite WhiteNoise. Questo ti farà risparmiare tempo, è completamente pronto per l'hosting su Heroku. Costruisci il tuo sito web in cima a questo modello
Per distribuire questo modello su Heroku:
git init
git add -A
git commit -m "Initial commit"
heroku create
git push heroku master
heroku run python manage.py migrate
Questo è tutto!
Istruzioni di distribuzione di Django. Nginx + Gunicorn + Supervisor su Linux (Ubuntu)
Tre strumenti di base.
- nginx: server HTTP e reverse proxy gratuito, open source e ad alte prestazioni, con prestazioni elevate;
- gunicorn - "Green Unicorn" è un server HTTP WSGI Python per UNIX (necessario per gestire il server);
- supervisore - un sistema client / server che consente agli utenti di monitorare e controllare un numero di processi su sistemi operativi UNIX-like. Utilizzato quando l'app o il sistema si bloccano, riavvia la tua webcam django / sedano / sedano, ecc;
Per semplificare, supponiamo che la tua app si trovi in questa directory: /home/root/app/src/
e useremo l'utente root
(ma dovresti creare un utente separato per la tua app). Anche il nostro ambiente virtuale si troverà in /home/root/app/env/
path.
Nginx
Iniziamo con nginx. Se nginx non è già sulla macchina, installalo con sudo apt-get install nginx
. In seguito devi creare un nuovo file di configurazione nella tua directory nginx /etc/nginx/sites-enabled/yourapp.conf
. Se c'è un file chiamato default.conf
- rimuovilo.
Codice muggito in un file conf nginx, che proverà ad eseguire il tuo servizio usando il file socket; Più avanti ci sarà una configurazione di gunicorn. Il file socket è usato qui per comunicare tra nginx e gunicorn. Può anche essere fatto usando le porte.
# your application name; can be whatever you want
upstream yourappname {
server unix:/home/root/app/src/gunicorn.sock fail_timeout=0;
}
server {
# root folder of your application
root /home/root/app/src/;
listen 80;
# server name, your main domain, all subdomains and specific subdomains
server_name yourdomain.com *.yourdomain.com somesubdomain.yourdomain.com
charset utf-8;
client_max_body_size 100m;
# place where logs will be stored;
# folder and files have to be already located there, nginx will not create
access_log /home/root/app/src/logs/nginx-access.log;
error_log /home/root/app/src/logs/nginx-error.log;
# this is where your app is served (gunicorn upstream above)
location / {
uwsgi_pass yourappname;
include uwsgi_params;
}
# static files folder, I assume they will be used
location /static/ {
alias /home/root/app/src/static/;
}
# media files folder
location /media/ {
alias /home/root/app/src/media/;
}
}
GUNICORN
Ora il nostro script GUNICORN, che sarà responsabile dell'esecuzione dell'applicazione django sul server. La prima cosa è installare gunicorn in ambiente virtuale con pip install gunicorn
.
#!/bin/bash
ME="root"
DJANGODIR=/home/root/app/src # django app dir
SOCKFILE=/home/root/app/src/gunicorn.sock # your sock file - do not create it manually
USER=root
GROUP=webapps
NUM_WORKERS=3
DJANGO_SETTINGS_MODULE=yourapp.yoursettings
DJANGO_WSGI_MODULE=yourapp.wsgi
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /home/root/app/env/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Gunicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /home/root/app/env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name root \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-
per poter eseguire lo script di avvio di gunicorn, è necessario che la modalità di esecuzione sia abilitata
sudo chmod u+x /home/root/app/src/gunicorn_start
ora sarai in grado di avviare il tuo server gunicorn semplicemente usando ./gunicorn_start
SUPERVISORE
Come detto all'inizio, vogliamo che la nostra applicazione venga riavviata quando fallisce un supervisore. Se supervisore non è ancora installato sul server con sudo apt-get install supervisor
.
Al primo installatore supervisore. Quindi crea un file .conf
nella directory principale /etc/supervisor/conf.d/your_conf_file.conf
contenuto del file di configurazione:
[program:yourappname]
command = /home/root/app/src/gunicorn_start
user = root
stdout_logfile = /home/root/app/src/logs/gunicorn_supervisor.log
redirect_stderr = true
Breve brief, [program:youappname]
è richiesto all'inizio, sarà il nostro identificatore. anche stdout_logfile
è un file in cui verranno memorizzati i registri, sia l'accesso che gli errori.
Fatto ciò, dobbiamo dire al nostro supervisore che abbiamo appena aggiunto un nuovo file di configurazione. Per farlo, c'è un processo diverso per la diversa versione di Ubuntu.
Per Ubuntu version 14.04 or lesser
, semplicemente esegui quei comandi:
sudo supervisorctl reread
-> rilegge tutti i file di configurazione all'interno del catalogo supervisore che dovrebbe essere stampato: yourappname: available
sudo supervisorctl update
-> aggiorna il supervisore ai file di configurazione appena aggiunti; dovrebbe stampare yourappname: aggiunto gruppo di processi
Per Ubuntu 16.04
Esegui:
sudo service supervisor restart
e per verificare se la tua app funziona correttamente, esegui
sudo supervisorctl status yourappname
Questo dovrebbe mostrare:
yourappname RUNNING pid 18020, uptime 0:00:50
Per ottenere la dimostrazione dal vivo di questa procedura, naviga questo video .
Distribuzione locale senza impostazione di apache / nginx
Il modo consigliato per l'implementazione della produzione richiede l'uso di Apache / Nginx per servire il contenuto statico. Pertanto, quando DEBUG
è falso statico e il contenuto multimediale non viene caricato. Tuttavia, possiamo caricare il contenuto statico nella distribuzione senza dover configurare il server Apache / Nginx per la nostra app utilizzando:
python manage.py runserver --insecure
Questo è destinato esclusivamente per la distribuzione locale (ad esempio, LAN) e non dovrebbe mai essere utilizzato nella produzione ed è disponibile solo se lo staticfiles
app è in del progetto INSTALLED_APPS
impostazione.