Slik distribuerer du en Django-applikasjon:

Hva med hilsen alle sammen, dette er min første artikkel i <» DesdeLinux (av flere som jeg har i mine utkast xD), håper det 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

kanonhjørning -> webserver for python (vi installerer ikke dette ennå)

Jeg antar at de allerede skal ha postgresql installert og konfigurert

psychopg2 -> Postgresql-kontakt 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 nå gjøre at alt vi gjør er lagret i katalogen / var / www / ENV-appname / uten å påvirke systempakker

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

Nå skal vi konfigurere det, for dette skal vi lage en fil som heter gunicorn-deploy.py i roten til søknaden 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å sette veileder, 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 oppretter følgende konfigurasjonsfil av nginx for søknaden 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 = Sant og vi endrer verdien, gjenstående DEBUG = Falsk

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 vi legger til domenet eller adressen vi får tilgang til, og etterlater noe lignende ALLOWED_HOSTS = ['www.domene.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 'statikk i banen vi spesifiserer i innstillinger. py ', det er der alle våre statiske filer vil være.

Og til slutt starter vi veilederen på nytt for å ta de nye endringene:
supervisorctl restart nombreApp

Og det ville være alt, til slutt var det ikke så mye sant? det virket enkelt for meg 😀

Jeg håper det er nyttig for deg, hilsen 😉

GUnicorn dokumentasjon

Veiledningsdokumentasjon


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   f3niX sa

    Jeg forstår at Django-appen ikke skal plasseres i roten til webservermappen (/ var / www)? For sikkerhets skyld vet jeg ikke om jeg tar feil.

    Hilsener.

    1.    urKh sa

      Greit !!! Det var noe jeg var helt uvitende om, jeg vil oppdatere oppføringen 😛 og så snart jeg kommer tilbake på mandag vil jeg gjøre endringer i xD-applikasjonen
      Takk

  2.   Rodrigo Bravo (goidor) sa

    Epale bror god veiledning. Nylig var jeg også i det samme, men i Debian 7 måtte jeg søke og lese mer eller mindre. Jeg anbefaler at du lager det virtuelle miljøet til virtualenv i brukerens hjem i en skjult mappe.

    Greetings!

  3.   Tjen Fenriz sa

    hahaha ctm Jeg igår dokumenterer Django og du går allerede gjennom galaksen 999999 Hilsen menn xD

  4.   daniel2ac sa

    Veldig god artikkel =) for bare en uke siden distribuerte jeg django-appen min, men jeg gjorde det med uwsgi og nginx, vet du hvilken fordel gunicorn har? Jeg har sett det nevnt mye.
    Det er hyggelig å se at django blir veldig populær, sannheten er den beste rammen jeg har sett =)

  5.   ozkar sa

    For STATIC_ROOT definerer jeg en global variabel. Noe sånt som dette:

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

    Where backend er en app som jeg opprettet. På denne måten sørger jeg for at den globale banen er den samme der jeg distribuerer prosjektet.

  6.   sgmart sa

    Interessant, jeg vil prøve i fremtiden.

    Forresten, alle som vet hvordan du aktiverer aksenter og ikke-ascii-tegn i en django-applikasjon

    Jeg har sett overalt, ingen av følgende metoder fungerer for meg:
    sys.setdefaultencoding ('utf-8') # i sites.py

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

    Å redigere site.py og sette utf-8 i stedet for ascii skal fungere, men $ file models.py informerer meg om at filen min fremdeles er en ascii.

    Noen forslag?

    1.    sgmart sa

      Det funket!!!!

  7.   anime 230 sa

    veldig god opplæring, men du kan gjøre en av hvordan du laster opp appen min på en webserver som allerede er i produksjon
    takk