Hva med hilsener til alle, dette er min første artikkel i <» FromLinux (av flere som jeg har i mine utkast xD), jeg håper den er nyttig for deg
Vel, i min nye og nåværende jobb, for øyeblikket blir migrering av flere systemer til Django utført (hvor rart ikke ?? xD) og en av oppgavene mine, bortsett fra utvikling, er å sette disse i produksjon, så hvor bra lærling, siden det var første gang jeg satte en applikasjon i produksjon på en ekte server: $ Jeg begynte å lese det offisielle dokumentet til hver av de nødvendige pakkene i bunken (Gunicorn og Supervisord mest av alt), og så at veiledningene i Spansk de var ikke veldig klare for meg i noen aspekter, jeg bestemte meg for å lage en miniguide med trinnene jeg fulgte for å sette applikasjonen i produksjon, basert på Django, Gunicorn, Supervisord, Nginx og Postgresql stack.
I tilfelle der jeg jobber, kjører serverne fremdeles Debian Squeeze, men guiden skal være fullstendig gyldig for andre distribusjoner ... så la oss komme rett til poenget og komme i gang:
Jeg skal jobbe som superbruker. Først og fremst kreves følgende pakker:
PIP -> Verktøy for å installere og administrere pakker for Python
aptitude install python-pip
Nginx -> Webserver (vi vil bruke den som en omvendt proxy og til å cache de statiske filene 'img, js, css') Vi installerer den med:
aptitude install nginx
Veileder -> Søknad for å administrere og overvåke applikasjonen vår, selv om den brukes til mye mer. Vi installerer den med:
aptitude install supervisor
virtualenv -> Det hjelper oss å lage et tilpasset virtuelt kjøringsmiljø for applikasjonen vår. Vi installerer den med:
aptitude install python-virtualenv
Gunicorn -> Webserver for Python (vi installerer ikke dette ennå)
Jeg antar at de allerede skal ha postgresql installert og konfigurert
psycopg2 -> PostgreSQL-kobling for Python (vi installerer den heller ikke ennå)
Opprett virtuelt miljø med virtualenv:
Først skal vi flytte til arbeidskatalogen som vi vil bruke til å sette i produksjon:
cd /var/www/
Så i denne katalogen vil vi lage det virtuelle miljøet:
virtualenv ENV-nombreApp
Vi flytter til katalogen som jeg nettopp opprettet virtualenv
cd ENV-nombreAPP
Vi kopierer applikasjonen i denne katalogen, og nå fortsetter vi med å aktivere miljøet med:
source bin/activate
Prompten skal nå se ut (ENV)usuario@host:
Dette vil sikre at alt vi gjør nå lagres i /var/www/ENV-appname/ -katalogen uten å påvirke systempakkene
Nå går vi til applikasjonskatalogen:
cd nombreApp
Vi fortsetter å installere listen over applikasjonsavhengigheter (hvis nødvendig), der de er spesifisert i filen krav.txt:
pip install -r requirements.txt
Vi kan også installere pakker individuelt, for eksempel for å installere kontakten til PostgreSQL:
pip install psycopg2
GUnicorn installasjon og konfigurasjon:
For å installere det gjør vi det på samme måte:
pip install gunicorn
La oss nå konfigurere det. For å gjøre dette, oppretter vi en fil kalt gunicorn-deploy.py i roten av applikasjonen vår (selv om navnet kan være hva som helst) med følgende innhold:
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
Supervisord-konfigurasjon:
La oss nå konfigurere supervisord ; for det genererer vi konfigurasjonsfilen med
echo_supervisord_conf > /etc/supervisord.conf
Nå redigerer vi konfigurasjonsfilen:
vim /etc/supervisord.conf
Og vi kommenterer følgende linjer ved å fjerne; (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 = falske minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appnavn] 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 = Brukernavn redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log
Nå skal vi lage skriptet for supervisord for å starte med systemet, for det skal vi lage filen:
vim /etc/init.d/supervisord
Og vi legger til følgende innhold:
# 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 "Starter tilsyn:" $ SUPERVISORD ekko ;; stop) echo -n "Stopping supervisord:" $ SUPERVISORCTL shutdown echo ;; start på nytt) echo -n "Stopper supervisord:" $ SUPERVISORCTL shutdown echo echo -n "Starter supervisord:" $ SUPERVISORD echo ;; at C
Og nå gir vi kjennetillatelser til filen slik at den kan starte med systemet:
sudo chmod +x /etc/init.d/supervisord
Vi oppdaterer lenkene for å starte tjenesten:
sudo update-rc.d supervisord defaults
Vi starter tjenesten:
sudo /etc/init.d/supervisord start
Sette opp nginx:
Dette trinnet er også ganske enkelt; vi vil opprette følgende nginx -konfigurasjonsfil for applikasjonen vår:
vim /etc/nginx/sites-enabled/nombreApp
Og vi vil legge til følgende innhold til deg
server {listen 9001; # port der de vil at nginx servernavn skal lytte www.domain.com; # eller 192.168.0.100, adresse som vi får tilgang til access_log /var/log/nginx/Appname.access.log; # hvor vi vil ha applikasjonsloggplasseringen / {# hvor nginx vil ringe når du får tilgang til www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Vert $ http_host; } location / static / {# hvor nginx får tilgang når vi skriver inn www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}
Og vi starter nginx på nytt:
service nginx restart
Sette opp Django:
La oss endre django-konfigurasjonsfilen:
vim nombreApp/settings.py
Vi ser etter linjen som sier DEBUG = True og endrer verdien , slik at DEBUG = False blir igjen.
Vi legger til DB-parametrene:
DATABASES = {'standard': {'MOTOR': 'django.db.backends.postgresql_psycopg2', # eller mysql, eller hva de bruker 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'passord DB', 'HOST': 'localhost', # eller den de trenger 'PORT': '', # eller den de bruker}}
Vi ser etter linjen ALLOWED_HOSTS=[] og legger til domenet eller adressen vi skal bruke for å få tilgang til den. Dette resulterer i noe sånt som ALLOWED_HOSTS=['www.domain.com']
Vi konfigurerer katalogen for de statiske filene, vi ser etter linjen som sier STATIC_ROOT = ' ' og vi endrer verdien, plasserer den absolutte banen der vi vil at våre statiske filer skal være, i mitt tilfelle la jeg den mer eller mindre slik STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'
Nesten ferdig utfører vi følgende kommando:
./manage.py collectstatic
Dette vil opprette en mappe med navnet « statics» i banen vi spesifiserte i settings.py , som er der alle de statiske filene våre vil bli plassert.
Og til slutt starter vi veilederen på nytt for å ta de nye endringene:
supervisorctl restart nombreApp
Og det ville være det, til slutt var det ikke så stor sak, ikke sant? Det virket enkelt for meg
Jeg håper det er nyttig for deg, hilsen