Hoe om 'n Django-toepassing te ontplooi:

Wat van 'n groet aan almal, dit is my eerste artikel in <»Van Linux (van verskeie wat ek in my konsepte xD het), hoop ek dat dit nuttig sal wees

Wel, in my nuwe en huidige werk, op die oomblik word die migrasie van verskeie stelsels na Django uitgevoer (hoe vreemd, eh ?? xD) en een van my take, behalwe vir ontwikkeling, is die produksie daarvan, dan as 'n goeie vakleerling, aangesien dit die eerste keer was dat ek 'n aansoek op 'n regte bediener in produksie gebring het: $ Ek het die amptelike dokument van elk van die vereiste pakkette van die stapel (Gunicorn en Supervisord meer as almal) begin lees, en gesien dat die tutoriale In Spaans was hulle vir my in sommige aspekte nie baie duidelik nie. Ek het besluit om 'n mini-gids te skep met die stappe wat ek gevolg het om die toepassing in produksie te plaas, gebaseer op die stapel Django, Gunicorn, Supervisord, Nginx en Postgresql.

In die geval waar ek werk, gebruik Debian Squeeze steeds op die bedieners, maar die gids moet ten volle geldig wees vir ander verspreidings ... so laat ons dadelik op die punt kom en begin:

Ek sal as supergebruiker werk. In die eerste plek word die volgende pakkette benodig:

PIP -> Gereedskap om pakkette vir Python te installeer en te bestuur
aptitude install python-pip

Nginx -> Webbediener (ons sal dit as 'n omgekeerde instaanbediener gebruik en om die statiese lêers 'img, js, css' in die kas te plaas). Ons installeer dit met:
aptitude install nginx

Toesighouer -> Toepassing om ons aansoek te bestuur en te monitor, alhoewel dit vir baie meer gebruik word. Ons installeer dit met:
aptitude install supervisor

virtueleenv -> Dit help ons om 'n aangepaste virtuele uitvoeringsomgewing vir ons toepassing te skep. Ons installeer dit met:
aptitude install python-virtualenv

geweerhoring -> webbediener vir python (ons sal dit nog nie installeer nie)

Ek neem aan dat hulle al postgresql moet laat installeer en opstel

psigopg2 -> Postgresql-aansluiting vir luislang (ons sal dit ook nog nie installeer nie)

Skep virtuele omgewing met virtualenv:

Eerstens gaan ons na die werkgids wat ons gaan gebruik om in produksie te plaas:
cd /var/www/

Dan sal ons in hierdie gids die virtuele omgewing skep:
virtualenv ENV-nombreApp

Ons gaan na die gids wat ek pas virtualenv gemaak het
cd ENV-nombreAPP

Ons kopieer die toepassing in hierdie gids en gaan voort om die omgewing te aktiveer met:
source bin/activate

Die aanwysing moet nou lyk (ENV)usuario@host:

Dit maak nou dat alles wat ons doen in die gids gestoor word / var / www / ENV-appnaam / sonder om stelselpakkette te beïnvloed

Nou gaan ons na die toepassingsgids:
cd nombreApp

Ons gaan voort met die installering van die lys van toepassingsafhanklikhede (indien nodig) waarin dit in die lêer gespesifiseer word vereistes.txt:
pip install -r requirements.txt

Ons kan ook pakkette afsonderlik installeer, byvoorbeeld om die aansluiting van postgresql:
pip install psycopg2

GUnicorn installasie en konfigurasie:

Om dit te installeer, doen ons dit op dieselfde manier:
pip install gunicorn

Nou gaan ons dit instel, hiervoor gaan ons 'n lêer genaamd skep gunicorn-deploy.py in die wortel van ons aansoek (hoewel die naam enigiets kan wees) met die volgende inhoud:

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

Laat ons nou die toesighouer, daarvoor genereer ons die konfigurasielêer met

echo_supervisord_conf > /etc/supervisord.conf

Nou wysig ons die konfigurasielêer:
vim /etc/supervisord.conf

En ons kan die volgende reëls opmerk deur die; (kommapunt):

[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 = vals minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] 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

Nou sal ons die script vir supervisord skep om met die stelsel te begin, daarvoor sal ons die lêer skep:
vim /etc/init.d/supervisord

En ons voeg die volgende inhoud by:

 # Supervisord outomaties begin # # beskrywing: Outomaties start supervisord # prosesnaam: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 in begin) echo -n "Begin toesig:" $ SUPERVISORD eggo ;; stop) echo -n "Stop toesig:" $ SUPERVISORCTL afsluiting eggo ;; herlaai) echo -n "Stop toesig:" $ SUPERVISORCTL afsluit echo echo -n "Begin toesig:" $ SUPERVISORD eggo ;; dat C

En nou gee ons die lêer toestemmings sodat dit met die stelsel kan begin:
sudo chmod +x /etc/init.d/supervisord

Ons werk die skakels by om die diens te begin:
sudo update-rc.d supervisord defaults

Ons begin met die diens:
sudo /etc/init.d/supervisord start

Stel nginx op:

Hierdie stap is ook redelik eenvoudig; ons sal die volgende konfigurasielêer van nginx vir ons aansoek:

vim /etc/nginx/sites-enabled/nombreApp

En ons sal die volgende inhoud by u voeg

bediener {luister 9001; # poort waar hulle wil hê nginx moet bedienernaam www.domein.com luister; # of 192.168.0.100, adres dat ons toegang sal verkry tot toegang_log /var/log/nginx/Appname.access.log; # waar ons die aansoekloglêer sal hê / {# waar nginx sal skakel wanneer u toegang verkry tot www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Gasheer $ http_host; } ligging / staties / {# waarheen nginx toegang sal verkry wanneer ons www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

En ons begin nginx weer:
service nginx restart

Die opstel van Django:

Kom ons wysig die django-konfigurasielêer:
vim nombreApp/settings.py

Ons soek die lyn wat sê DEBUG = Waar en ons verander die waarde, oorblywende DEBUG = Onwaar

Ons voeg die DB-parameters by:

DATABASES = {'standaard': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # of mysql, of wat hulle ook al gebruik 'NAME': 'DBName', 'USER': 'DBUser', 'WACHTWOORD' : 'wagwoord DB', 'HOST': 'localhost', # of die een wat hulle nodig het 'PORT': '', # of die een wat hulle gebruik}}

Ons soek die lyn ALLOWED_HOSTS = [] en ons voeg die domein of die adres waardeur ons toegang sal kry by, en laat iets soos ALLOWED_HOSTS = ['www.domein.com']

Ons stel die gids vir die statiese lêers in, ons soek die lyn wat sê STATIC_ROOT = ' ' en ons verander die waarde, plaas die absolute pad waar ons ons statiese lêers wil hê, in my geval het ek dit min of meer so gelos STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Byna klaar, voer ons die volgende opdrag uit:
./manage.py collectstatic

Dit sal 'n vouer met die naam 'statika in die pad wat ons in die instellings.py ", dit is waar al ons statiese lêers sal wees.

En uiteindelik begin ons die toesighouer om die nuwe veranderinge aan te bring:
supervisorctl restart nombreApp

En dit sou alles wees, uiteindelik was dit nie soseer waar nie? dit het vir my eenvoudig gelyk 😀

Ek hoop dit is nuttig vir u, groete 😉

 

GUnicorn dokumentasie

Toesig dokumentasie

 


Die inhoud van die artikel voldoen aan ons beginsels van redaksionele etiek. Klik op om 'n fout te rapporteer hier.

9 kommentaar, los joune

Laat u kommentaar

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk met *

*

*

  1. Verantwoordelik vir die data: Miguel Ángel Gatón
  2. Doel van die data: Beheer SPAM, bestuur van kommentaar.
  3. Wettiging: U toestemming
  4. Kommunikasie van die data: Die data sal nie aan derde partye oorgedra word nie, behalwe deur wettige verpligtinge.
  5. Datastoor: databasis aangebied deur Occentus Networks (EU)
  6. Regte: U kan u inligting te alle tye beperk, herstel en verwyder.

  1.   f3niX dijo

    Ek verstaan ​​dat die Django-app nie in die wortel van die gids vir die webbediener (/ var / www) moet geplaas word nie? Vir veiligheid weet ek nie of ek verkeerd is nie.

    Groete.

    1.    urKh dijo

      Goed so !!! Dit was iets waarvoor ek heeltemal nie bewus was nie, ek sal die inskrywing opdateer 😛 en sodra ek Maandag terugkom, sal ek veranderinge aanbring in die xD-toepassing
      Dankie

  2.   Rodrigo Bravo (goidor) dijo

    Epale broer goeie handleiding. Onlangs was ek ook in dieselfde, maar in Debian 7 moes ek min of meer soek en lees. Ek beveel aan dat u die virtuele omgewing van virtualenv in die gebruiker se huis in 'n verborge vouer skep.

    Groete!

  3.   Dien Fenriz dijo

    hahaha ctm Ek het gister Django gedokumenteer en jy gaan alreeds deur die sterrestelsel 999999 Groete mans xD

  4.   daniel2ac dijo

    Baie goeie artikel =) net 'n week gelede het ek my django-app ontplooi, maar ek het dit gedoen met uwsgi en nginx, weet u watter voordeel gunicorn het? Ek het gesien dat dit al baie genoem word.
    Dit is lekker om te sien dat django baie gewild word, die waarheid is die beste raamwerk wat ek gesien het =)

  5.   ozkar dijo

    Vir die STATIC_ROOT definieer ek 'n globale veranderlike. Iets soos hierdie:

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

    Waar backend 'n app is wat ek geskep het. Daarom sorg ek dat die globale pad dieselfde is waar ek die projek implementeer.

  6.   slim dijo

    Interessant, ek sal in die toekoms probeer.

    Terloops, weet iemand hoe om aksente en nie-ascii-karakters in 'n django-toepassing in te skakel?

    Ek het oral gekyk, en geen van die volgende metodes werk vir my nie:
    sys.setdefaultencoding ('utf-8') # in sites.py

    # - * - kodering: utf-8 - * - # in elke luislanglêer

    Die redigering van site.py en die plaas van utf-8 in plaas van ascii is veronderstel om te werk, maar $ file models.py lig my in dat my lêer steeds ascii is.

    Enige voorstelle?

    1.    slim dijo

      Dit het gewerk!!!!

  7.   anime 230 dijo

    baie goeie tutoriaal, maar kan u een van die maniere doen om my program op 'n webbediener op te laai wat reeds in produksie is
    dankie