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 di supervisione