Come distribuire un'applicazione Django:

Che ne dite di un saluto a tutti, questo è il mio primo articolo in <» FromLinux (di tanti che ho nelle mie bozze xD), spero che vi sia utile 

Ebbene, nel mio nuovo e attuale lavoro, al momento è in corso la migrazione di diversi sistemi su Django (che strano eh ?? xD) e uno dei miei compiti, oltre allo sviluppo, è la messa in produzione di questi, quindi da buon apprendista, dato che era la prima volta che mettevo in produzione un'applicazione su un server reale: $ ho iniziato a leggere il documento ufficiale di ciascuno dei pacchetti richiesti dello stack (Gunicorn e Supervisord più di tutti), e vedendo che il tutorial In spagnolo non mi erano molto chiari in alcuni aspetti, ho deciso di creare una mini guida con i passaggi che ho seguito per mettere in produzione l'applicazione, basata sugli stack Django, Gunicorn, Supervisord, Nginx e Postgresql.

Nel caso in cui lavoro, i server girano ancora su Debian Squeeze, ma la guida dovrebbe essere pienamente valida per altre distribuzioni ... quindi andiamo subito al punto e cominciamo:

Lavorerò come un super utente. Innanzitutto sono necessari i seguenti pacchetti:

PIP -> Strumento per installare e gestire i pacchetti per Python
aptitude install python-pip

Nginx -> Web server (lo useremo come proxy inverso e per memorizzare nella cache i file statici 'img, js, css') Lo installiamo con:
aptitude install nginx

Supervisore -> Applicazione per gestire e monitorare la nostra applicazione, sebbene sia usata per molto di più. Lo installiamo con:
aptitude install supervisor

ambiente virtuale -> Ci aiuta a creare un ambiente di esecuzione virtuale personalizzato per la nostra applicazione. Lo installiamo con:
aptitude install python-virtualenv

gunicorn -> web server per python (non lo installeremo ancora)

Presumo che dovrebbero già avere postgresql installato e configurato

psicopg2 -> Connettore Postgresql per python (non lo installeremo ancora)

Crea un ambiente virtuale con virtualenv:

Per prima cosa ci sposteremo nella directory di lavoro che useremo per la messa in produzione:
cd /var/www/

Quindi in questa directory creeremo l'ambiente virtuale:
virtualenv ENV-nombreApp

Ci spostiamo nella directory che ho appena creato virtualenv
cd ENV-nombreAPP

Copiamo l'applicazione in questa directory e ora procediamo ad attivare l'ambiente con:
source bin/activate

Il prompt dovrebbe ora apparire come (ENV)usuario@host:

Questo ora farà in modo che tutto ciò che facciamo venga memorizzato nella directory / var / www / ENV-appname / senza influire sui pacchetti di sistema

Ora passiamo alla directory dell'applicazione:
cd nombreApp

Procediamo con l'installazione dell'elenco delle dipendenze dell'applicazione (se necessario), in cui sono specificate nel file requirements.txt:
pip install -r requirements.txt

Possiamo anche installare i pacchetti individualmente, ad esempio, per installare il connettore di postgresql:
pip install psycopg2

Installazione e configurazione di GUnicorn:

Per installarlo lo facciamo allo stesso modo:
pip install gunicorn

Ora lo configureremo, per questo creeremo un file chiamato gunicorn-deploy.py nella radice della nostra applicazione, (sebbene il nome possa essere qualsiasi cosa) con il seguente contenuto:

bind = "127.0.0.1:8001" # dirección a donde accederá Nginx
logfile = "/var/www/logs/nombreApp/gunicorn.log" # dirección donde estarán los logs de la aplicación
workers = 1 # dependerá en medida de la carga de trabajo que tenga la aplicación, también depende del hardware con que se cuente
loglevel = 'info' # tipo de logging

Configurazione supervisione:

Ora impostiamo il file supervisore, per questo generiamo il file di configurazione con

echo_supervisord_conf > /etc/supervisord.conf

Ora modifichiamo il file di configurazione:
vim /etc/supervisord.conf

E rimuovere il commento dalle seguenti righe rimuovendo il; (punto e virgola):

[unix_http_server] file = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] command = / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py directory = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Username redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Ora creeremo lo script per supervisord per iniziare con il sistema, per questo creeremo il file:
vim /etc/init.d/supervisord

E aggiungiamo il seguente contenuto:

 # Supervisord auto-start # # descrizione: Auto-avvia supervisord # processname: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 in start) echo -n "Avvio di supervisord:" $ SUPERVISORD echo ;; stop) echo -n "Arresto supervisord:" $ SUPERVISORCTL shutdown echo ;; riavvio) echo -n "Arresto supervisord:" $ SUPERVISORCTL shutdown echo echo -n "Avvio supervisord:" $ SUPERVISORD echo ;; che C

E ora diamo i permessi di esecuzione al file in modo che possa iniziare con il sistema:
sudo chmod +x /etc/init.d/supervisord

Aggiorniamo i link per avviare il servizio:
sudo update-rc.d supervisord defaults

Iniziamo il servizio:
sudo /etc/init.d/supervisord start

Configurazione di nginx:

Anche questo passaggio è abbastanza semplice, creeremo il seguente file di configurazione di nginx per la nostra applicazione:

vim /etc/nginx/sites-enabled/nombreApp

E aggiungeremo il seguente contenuto a te

server {ascolta 9001; # porta dove vogliono che nginx server_name ascolti www.domain.com; # o 192.168.0.100, indirizzo a cui accederemo access_log /var/log/nginx/Appname.access.log; # dove avremo la posizione del registro dell'applicazione / {# dove nginx chiamerà quando si accede a www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Host $ http_host; } location / static / {# dove nginx accederà quando entreremo in www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

E riavviamo nginx:
service nginx restart

Configurazione di Django:

Modifichiamo il file di configurazione di django:
vim nombreApp/settings.py

Cerchiamo la riga che dice DEBUG = Vero e cambiamo il valore, residuo DEBUG = Falso

Aggiungiamo i parametri DB:

DATABASES = {"default": {"ENGINE": "django.db.backends.postgresql_psycopg2", # o mysql, o qualunque cosa stiano utilizzando "NAME": "DBName", "USER": "DBUser", "PASSWORD" : 'password DB', 'HOST': 'localhost', # o quello di cui hanno bisogno 'PORT': '', # o quello che stanno usando}}

Cerchiamo la linea ALLOWED_HOSTS = [] e aggiungiamo il dominio o l'indirizzo attraverso il quale accediamo, lasciando qualcosa di simile ALLOWED_HOSTS = ["www.domain.com"]

Configuriamo la directory per i file statici, cerchiamo la riga che dice STATIC_ROOT = ' ' e cambiamo il valore, posizionando il percorso assoluto dove vogliamo che siano i nostri file statici, nel mio caso l'ho lasciato più o meno così STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Quasi finito, eseguiamo il seguente comando:
./manage.py collectstatic

Questo creerà una cartella con il nome 'statica nel percorso che specifichiamo nel file impostazioni.py ', è lì che saranno tutti i nostri file statici.

E infine riavviamo il supervisore per prendere le nuove modifiche:
supervisorctl restart nombreApp

E sarebbe stato così, alla fine non è stato un grosso problema, giusto? Mi è sembrato semplice 

Spero che ti sia utile, saluti 

Documentazione GUnicorn

Documentazione di supervisione


Aggiungi come fonte preferita in Google