Vad sägs om hälsningar till alla, detta är min första artikel i <» FromLinux (av flera som jag har i mina utkast xD), jag hoppas att den är användbar för dig
Tja, i mitt nya och nuvarande jobb, för tillfället genomförs migrering av flera system till Django (hur konstigt va ?? xD) och en av mina uppgifter, förutom utveckling, är att sätta dessa i produktion, så hur bra lärling, eftersom det var första gången jag satte en applikation i produktion på en riktig server: $ Jag började läsa det officiella dokumentet för alla paket som krävs i stacken (Gunicorn och Supervisord mer än alla), och såg att självstudierna i Spanska de var inte så tydliga för mig i vissa aspekter, jag bestämde mig för att skapa en miniguide med de steg som jag följde för att sätta applikationen i produktion, baserad på stacken Django, Gunicorn, Supervisord, Nginx och Postgresql.
I det fall jag arbetar körs servrarna fortfarande på Debian Squeeze, men guiden bör vara helt giltig för andra distributioner ... så låt oss komma direkt till saken och komma igång:
Jag kommer att arbeta som superanvändare. Först och främst krävs följande paket:
PIP -> Verktyg för att installera och hantera paket för Python
aptitude install python-pip
nginx -> Webbserver (vi använder den som en omvänd proxy och för att cache de statiska filerna 'img, js, css') Vi installerar den med:
aptitude install nginx
Supervisord -> Applikation för att hantera och övervaka vår applikation, även om den används för mycket mer. Vi installerar det med:
aptitude install supervisor
virtualenv -> Det hjälper oss att skapa en anpassad virtuell exekveringsmiljö för vår applikation. Vi installerar det med:
aptitude install python-virtualenv
gunicorn -> webbserver för python (vi installerar inte detta ännu)
Jag antar att de redan borde ha installerat och konfigurerat postgresql
psychopg2 -> Postgresql-kontakt för python (vi installerar inte heller än)
Skapa virtuell miljö med virtualenv:
Först ska vi flytta till den arbetskatalog som vi kommer att använda för att sätta i produktion:
cd /var/www/
Sedan skapar vi den virtuella miljön i den här katalogen:
virtualenv ENV-nombreApp
Vi flyttar till katalogen som jag just skapade virtualenv
cd ENV-nombreAPP
Vi kopierar applikationen i den här katalogen och nu fortsätter vi med att aktivera miljön med:
source bin/activate
Prompten ska nu se ut (ENV)usuario@host:
Detta gör att allt vi gör lagras i katalogen / var / www / ENV-appname / utan att påverka systempaket
Nu går vi till applikationskatalogen:
cd nombreApp
Vi fortsätter med att installera listan över applikationsberoenden (om nödvändigt), där de anges i filen requirements.txt:
pip install -r requirements.txt
Vi kan också installera paket individuellt, till exempel för att installera anslutningen till postgresql:
pip install psycopg2
GUnicorn installation och konfiguration:
För att installera det gör vi det på samma sätt:
pip install gunicorn
Nu ska vi konfigurera det, för detta ska vi skapa en fil som heter gunicorn-deploy.py i roten till vår ansökan (även om namnet kan vara vad som helst) med följande innehåll:
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
Övervakningskonfiguration:
Låt oss nu ställa in supervisord, för det genererar vi konfigurationsfilen med
echo_supervisord_conf > /etc/supervisord.conf
Nu redigerar vi konfigurationsfilen:
vim /etc/supervisord.conf
Och vi kommenterar följande rader genom att ta bort; (semikolon):
[unix_http_server] file = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50 MB logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = falska minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appnamn] 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
Nu skapar vi skriptet för övervakning för att börja med systemet, för det skapar vi filen:
vim /etc/init.d/supervisord
Och vi lägger till följande innehåll:
# Supervisord auto-start # # description: Auto-starts supervisord # processname: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 i start) echo -n "Startar överordnad:" $ SUPERVISORD echo ;; stop) echo -n "Stoppar övervakaren:" $ SUPERVISORCTL avstängningseko ;; starta om) echo -n "Stoppar övervakaren:" $ SUPERVISORCTL avstängning echo echo -n "Startar övervakaren:" $ SUPERVISORD echo ;; att C
Och nu ger vi filen körbehörigheter så att den kan börja med systemet:
sudo chmod +x /etc/init.d/supervisord
Vi uppdaterar länkarna för att starta tjänsten:
sudo update-rc.d supervisord defaults
Vi startar tjänsten:
sudo /etc/init.d/supervisord start
Ställa in nginx:
Detta steg är också ganska enkelt, vi skapar följande konfigurationsfil av nginx för vår ansökan:
vim /etc/nginx/sites-enabled/nombreApp
Och vi kommer att lägga till följande innehåll till dig
server {lyssna 9001; # port där de vill att nginx server_name ska lyssna på www.domain.com; # eller 192.168.0.100, adress att vi kommer åt access_log /var/log/nginx/Appname.access.log; # där vi kommer att ha applikationsloggplatsen / {# där nginx kommer att ringa vid åtkomst till www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Värd $ http_host; } plats / statisk / {# där nginx kommer åt när vi anger www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}
Och vi startar om nginx:
service nginx restart
Ställa in Django:
Låt oss ändra django-konfigurationsfilen:
vim nombreApp/settings.py
Vi letar efter linjen som säger DEBUG = Sant och vi ändrar värdet, återstående DEBUG = Falskt
Vi lägger till DB-parametrarna:
DATABASES = {'default': {'MOTOR': 'django.db.backends.postgresql_psycopg2', # eller mysql, eller vad som helst 'NAME': 'DBName', 'USER': 'DBUser', 'LÖSENORD' använder: 'lösenord DB', 'HOST': 'localhost', # eller det de behöver 'PORT': '', # eller det de använder}}
Vi letar efter linjen ALLOWED_HOSTS = [] och vi lägger till domänen eller adressen som vi kommer åt genom att lämna något liknande ALLOWED_HOSTS = ['www.domän.com']
Vi konfigurerar katalogen för de statiska filerna, vi letar efter raden som säger STATIC_ROOT = ' ' och vi ändrar värdet, placerar den absoluta sökvägen där vi vill att våra statiska filer ska vara, i mitt fall lämnade jag det mer eller mindre så här STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'
Nästan färdigt utför vi följande kommando:
./manage.py collectstatic
Detta skapar en mapp med namnet 'statik i den sökväg som vi anger i settings.py ', det är där alla våra statiska filer kommer att vara.
Och slutligen startar vi om handledaren för att ta de nya ändringarna:
supervisorctl restart nombreApp
Och det skulle vara det, i slutändan var det inte så stor sak, eller hur? Det verkade enkelt för mig
Jag hoppas att det är användbart för dig, hälsningar