Sådan implementeres en Django-applikation:

Hvad med hilsener til alle, dette er min første artikel i <» FromLinux (af flere, som jeg har i mine kladder xD), jeg håber, den er nyttig for dig 

Nå, i mit nye og nuværende job udføres i øjeblikket migrering af flere systemer til Django (hvor mærkeligt eh ?? xD) og en af ​​mine opgaver, bortset fra udvikling, er at sætte i produktion af disse, så som god lærling, da det var første gang, jeg satte en applikation i produktion på en rigtig server: $ Jeg begyndte at læse det officielle dokument for hver af de krævede pakker i stakken (Gunicorn og Supervisord mere end alle), og så, at tutorials På spansk var de ikke meget klare for mig i nogle aspekter, jeg besluttede at oprette en mini-guide med de trin, jeg fulgte for at sætte applikationen i produktion, baseret på Django, Gunicorn, Supervisord, Nginx og Postgresql stakken.

I det tilfælde hvor jeg arbejder, kører serverne stadig Debian Squeeze, men guiden skal være fuldt gyldig til andre distributioner ... så lad os komme lige til det punkt og komme i gang:

Jeg vil arbejde som superbruger. Først og fremmest er følgende pakker påkrævet:

PIP -> Værktøj til at installere og administrere pakker til Python
aptitude install python-pip

Nginx -> Webserver (vi bruger den som en omvendt proxy og til at cache de statiske filer 'img, js, css') Vi installerer den med:
aptitude install nginx

Supervisord -> Applikation til at styre og overvåge vores applikation, selvom den bruges til meget mere. Vi installerer det med:
aptitude install supervisor

virtualenv -> Det hjælper os med at skabe et tilpasset virtuelt eksekveringsmiljø til vores applikation. Vi installerer det med:
aptitude install python-virtualenv

kanonhjørning -> webserver til python (vi installerer ikke dette endnu)

Jeg antager, at de allerede skal have postgresql installeret og konfigureret

psychopg2 -> Postgresql-stik til python (vi installerer det heller ikke endnu)

Opret virtuelt miljø med virtualenv:

Først skal vi flytte til den arbejdsmappe, som vi vil bruge til at sætte i produktion:
cd /var/www/

Derefter opretter vi i dette bibliotek det virtuelle miljø:
virtualenv ENV-nombreApp

Vi flytter til den mappe, som jeg lige har oprettet virtualenv
cd ENV-nombreAPP

Vi kopierer applikationen i denne mappe, og nu fortsætter vi med at aktivere miljøet med:
source bin/activate

Prompten skal nu se ud (ENV)usuario@host:

Dette vil nu gøre alt, hvad vi gør, gemmes i biblioteket / var / www / ENV-appname / uden at påvirke systempakker

Nu flytter vi til applikationsmappen:
cd nombreApp

Vi fortsætter med at installere listen over applikationsafhængigheder (hvis det er nødvendigt), hvor de er angivet i filen krav.txt:
pip install -r requirements.txt

Vi kan også installere pakker individuelt, for eksempel for at installere stikket til postgresql:
pip install psycopg2

GUnicorn installation og konfiguration:

For at installere det gør vi det på samme måde:
pip install gunicorn

Nu skal vi konfigurere det, for dette skal vi oprette en fil kaldet gunicorn-deploy.py i roden af ​​vores ansøgning (selvom navnet kan være hvad som helst) med følgende indhold:

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 konfiguration:

Lad os nu indstille supervisord, for det genererer vi konfigurationsfilen med

echo_supervisord_conf > /etc/supervisord.conf

Nu redigerer vi konfigurationsfilen:
vim /etc/supervisord.conf

Og vi kommenterer følgende linjer ved at fjerne; (semikolon):

[unix_http_server] fil = / 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] kommando = / var / www / ENV-appnavn / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py directory = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Brugernavn redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Nu opretter vi scriptet til supervisord til at starte med systemet, for det opretter vi filen:
vim /etc/init.d/supervisord

Og vi tilføjer følgende indhold:

 # Supervisord auto-start # # beskrivelse: Auto-starter supervisord # procesnavn: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 i start) echo -n "Starter supervisord:" $ SUPERVISORD echo ;; stop) ekko -n "Stopper tilsyn:" $ SUPERVISORCTL nedlukningsekko ;; genstart) echo -n "Stopper supervisord:" $ SUPERVISORCTL nedlukning echo echo -n "Starter supervisord:" $ SUPERVISORD echo ;; at C

Og nu giver vi filen tilladelser, så den kan starte med systemet:
sudo chmod +x /etc/init.d/supervisord

Vi opdaterer linkene for at starte tjenesten:
sudo update-rc.d supervisord defaults

Vi starter tjenesten:
sudo /etc/init.d/supervisord start

Opsætning af nginx:

Dette trin er også ret simpelt, vi opretter følgende konfigurationsfil af Nginx til vores ansøgning:

vim /etc/nginx/sites-enabled/nombreApp

Og vi vil tilføje følgende indhold til dig

server {lyt 9001; # port, hvor de vil have nginx til at lytte servernavn www.domæne.com; # eller 192.168.0.100, adresse, som vi får adgang til access_log /var/log/nginx/Appname.access.log; # hvor vi har applikationslogplaceringen / {# hvor nginx ringer ved adgang til www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Host $ http_host; } placering / statisk / {# hvor nginx får adgang, når vi indtaster www.domæne.dk/statisk/ alias / var / www / ENV-appnavn / appnavn / staticfiles /; }}

Og vi genstarter nginx:
service nginx restart

Opsætning af Django:

Lad os ændre django-konfigurationsfilen:
vim nombreApp/settings.py

Vi ser efter den linje, der siger DEBUG = Sandt og vi ændrer værdien, resterende DEBUG = Falsk

Vi tilføjer DB-parametre:

DATABASES = {'default': {'MOTOR': 'django.db.backends.postgresql_psycopg2', # eller mysql eller hvad de end bruger 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'password DB', 'HOST': 'localhost', # eller den, de har brug for 'PORT': '', # eller den, de bruger}}

Vi kigger efter linjen ALLOWED_HOSTS = [] og vi tilføjer domænet eller adressen, hvorigennem vi får adgang, efterlader noget lignende ALLOWED_HOSTS = ['www.domæne.com']

Vi konfigurerer biblioteket til de statiske filer, vi ser efter den linje, der siger STATIC_ROOT = ' ' og vi ændrer værdien og placerer den absolutte sti, hvor vi ønsker, at vores statiske filer skal være, i mit tilfælde forlod jeg det mere eller mindre sådan STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Næsten færdig udfører vi følgende kommando:
./manage.py collectstatic

Dette opretter en mappe med navnet 'statik i den sti, som vi angiver i settings.py ', det er her alle vores statiske filer vil være.

Og endelig genstarter vi supervisoren for at tage de nye ændringer:
supervisorctl restart nombreApp

Og det ville være det, i sidste ende var det ikke så stor en sag, vel? Det virkede simpelt for mig 

Jeg håber det er nyttigt for dig, hilsen 

GUnicorn dokumentation

Supervisordokumentation


Tilføj som foretrukken kilde i Google