Sådan implementeres en Django-applikation:

Hvad med hilsener alle sammen, dette er min første artikel i <» DesdeLinux (af flere som jeg har i mine kladder xD), jeg håber det er nyttigt 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 alt, til sidst var det ikke så meget sandt? det virkede simpelt for mig 😀

Jeg håber, det er nyttigt for dig, hilsner 😉

GUnicorn dokumentation

Supervisordokumentation


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   f3niX sagde han

    Jeg forstår, at Django-appen ikke skal placeres i roden til webserver-mappen (/ var / www)? Af hensyn til sikkerheden ved jeg ikke, om jeg tager fejl.

    Greetings.

    1.    urKh sagde han

      Okay !!! Det var noget, jeg var helt uvidende om, jeg opdaterer posten 😛 og så snart jeg vender tilbage mandag, vil jeg foretage ændringer i xD-applikationen
      Tak

  2.   Rodrigo Bravo (goidor) sagde han

    Epale bror god vejledning. For nylig var jeg også i det samme, men i Debian 7 var jeg nødt til at søge og læse mere eller mindre. Jeg anbefaler, at du opretter det virtuelle miljø af virtualenv i brugerens hjem i en skjult mappe.

    Greetings!

  3.   Tjen Fenriz sagde han

    hahaha ctm I går dokumenterede Django og du går allerede gennem galaksen 999999 Hilsen mænd xD

  4.   daniel2ac sagde han

    Meget god artikel =) for bare en uge siden implementerede jeg min django-app, men jeg gjorde det med uwsgi og nginx. Ved du hvilken fordel gunicorn har? Jeg har set det nævnt meget.
    Det er rart at se, at django bliver meget populær, sandheden er den bedste ramme, jeg har set =)

  5.   ozkar sagde han

    For STATIC_ROOT definerer jeg en global variabel. Noget som dette:

    import os
    PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')

    Hvor backend er en app, som jeg oprettede. Så jeg sørger for, at hvor den globale sti er den samme, hvor jeg implementerer projektet.

  6.   sgmart sagde han

    Interessant, jeg vil prøve i fremtiden.

    Forresten, ved nogen, hvordan man aktiverer accenter og ikke-ascii-tegn i en django-applikation?

    Jeg har kigget overalt, ingen af ​​følgende metoder fungerer for mig:
    sys.setdefaultencoding ('utf-8') # i sites.py

    # - * - kodning: utf-8 - * - # i hver pythonfil

    Redigering af site.py og udf-8 i stedet for ascii skulle fungere, men $ file models.py informerer mig om, at min fil stadig er en ascii.

    Nogen forslag?

    1.    sgmart sagde han

      Det virkede!!!!

  7.   anime 230 sagde han

    meget god tutorial, men kunne du gøre en af, hvordan jeg uploader min app på en webserver, der allerede er i produktion
    tak