Kiel deploji Django-aplikaĵon:

Kiel pri saluto al ĉiuj, jen mia unua artikolo en <»El Linukso (el kelkaj, kiujn mi havas en miaj projektoj xD), mi esperas, ke ĝi estos utila 😀

Nu, en mia nova kaj aktuala laboro, nuntempe la migrado de pluraj sistemoj al Django efektivigas (kiel strange ĉu ?? xD) kaj unu el miaj taskoj, krom disvolviĝo, estas la produktado de ĉi tiuj, tiam kiel bona metilernanto, ĉar ĝi estis la unua fojo, ke mi produktis programon sur vera servilo: $ Mi komencis legi la oficialan dokumenton de ĉiu el la bezonataj pakoj de la stako (Gunicorn kaj Supervisord pli ol ĉiuj), kaj vidante, ke la lerniloj En la hispana ili ne estis tre klaraj al mi laŭ iuj aspektoj, mi decidis krei mini-gvidilon kun la paŝoj, kiujn mi sekvis por produkti la programon, surbaze de la stako Django, Gunicorn, Supervisord, Nginx kaj Postgresql.

Se mi laboras, la serviloj ankoraŭ funkcias Debian Squeeze, sed la gvidilo estu plene valida por aliaj distribuoj ... do ni iru rekte al la afero kaj komencu:

Mi laboros kiel superuzanto. Unue necesas la jenaj pakoj:

Pip -> Ilo por instali kaj administri pakojn por Python
aptitude install python-pip

Nginx -> Retservilo (ni uzos ĝin kiel inversan prokurilon kaj kaŝmemorigos la statikajn dosierojn 'img, js, css') Ni instalas ĝin per:
aptitude install nginx

Kontrolisto -> Apliko por administri kaj kontroli nian aplikaĵon, kvankam ĝi estas uzata por multe pli. Ni instalas ĝin per:
aptitude install supervisor

virtualenv -> Ĝi helpas nin krei personecigitan virtualan ekzekutan medion por nia programo. Ni instalas ĝin per:
aptitude install python-virtualenv

Gunicorno -> retservilo por python (ni ankoraŭ ne instalos ĉi tion)

Mi supozas, ke ili jam devas havi postgresql instalitan kaj agorditan

psikopg2 -> Postgresql-konektilo por python (ni ankaŭ ne instalos ĝin ankoraŭ)

Kreu virtualan medion per virtualenv:

Unue ni transiros al la labora dosierujo, kiun ni uzos por produkti:
cd /var/www/

Tiam en ĉi tiu dosierujo ni kreos la virtualan medion:
virtualenv ENV-nombreApp

Ni moviĝas al la dosierujo, kiun mi ĵus kreis virtualenv
cd ENV-nombreAPP

Ni kopias la aplikaĵon en ĉi tiu dosierujo kaj nun ni aktivigas la medion per:
source bin/activate

La peto nun aspektas kiel (ENV)usuario@host:

Ĉi tio nun faros, ke ĉio, kion ni faros, estas konservita en la dosierujo / var / www / ENV-appname / sen tuŝi sistemajn pakaĵojn

Nun ni moviĝas al la aplika dosierujo:
cd nombreApp

Ni procedas por instali la liston de dependaj programoj (se necese), en kiuj ili estas specifitaj en la dosiero postuloj.txt:
pip install -r requirements.txt

Ni ankaŭ povas instali pakaĵojn individue, ekzemple por instali la konektilon de postgreska:
pip install psycopg2

Instalado kaj agordo de GUnicorn:

Por instali ĝin ni faras ĝin same:
pip install gunicorn

Nun ni agordos ĝin, por tio ni kreos dosieron nomatan gunicorn-deploy.py en la radiko de nia aplikaĵo, (kvankam la nomo povas esti io ajn) kun la jena enhavo:

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

Konfiguracio de Supervisord:

Nun ni starigu la kontrolisto, por tio ni generas la agordan dosieron per

echo_supervisord_conf > /etc/supervisord.conf

Nun ni redaktas la agordan dosieron:
vim /etc/supervisord.conf

Kaj ni komentas la jenajn liniojn forigante la; (punktokomo):

[unix_http_server] file = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] komando = / 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 = uzantnomo redirect_stderr = vera stdout_logfile = / var / www / logs / appname / supervisord.log

Nun ni kreos la skripton por supervisord komenci per la sistemo, por tio ni kreos la dosieron:
vim /etc/init.d/supervisord

Kaj ni aldonas la jenan enhavon:

 # Supervisord auto-start # # description: Aŭtomate startas supervisord # processname: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 en komenco) echo -n "Komenca superreganto:" $ SUPERVISORD echo ;; stop) echo -n "Stopping supervisord:" $ SUPERVISORCTL shutdown echo ;; restart) echo -n "Stopping supervisord:" $ SUPERVISORCTL shutdown echo echo -n "Starting supervisord:" $ SUPERVISORD echo ;; ke C

Kaj nun ni donas al la dosiero ekzekutajn permesojn, por ke ĝi komencu per la sistemo:
sudo chmod +x /etc/init.d/supervisord

Ni ĝisdatigas la ligojn por komenci la servon:
sudo update-rc.d supervisord defaults

Ni komencas la servon:
sudo /etc/init.d/supervisord start

Agordi nginx:

Ĉi tiu paŝo ankaŭ estas sufiĉe simpla, ni kreos la jenan agordan dosieron de nginx por nia kandidatiĝo:

vim /etc/nginx/sites-enabled/nombreApp

Kaj ni aldonos la sekvan enhavon al vi

servilo {aŭskultu 9001; # haveno, kie ili volas, ke nginx aŭskultu servilnomon www.domajno.com; # aŭ 192.168.0.100, adreso al kiu ni aliros access_log /var/log/nginx/Appname.access.log; # kie ni havos la registran lokon de la aplikaĵo / {# kie nginx telefonos alirante www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Gastiganto $ http_host; } loko / statika / {# kie nginx aliros kiam ni eniros www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

Kaj ni rekomencas nginx:
service nginx restart

Starigi Django:

Ni modifu la agordan dosieron django:
vim nombreApp/settings.py

Ni serĉas la linion, kiu diras DEBUG = Vera kaj ni ŝanĝas la valoron, restanta DEBUG = Falsa

Ni aldonas la DB-parametrojn:

DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # aŭ mysql, aŭ kion ajn ili uzas 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'pasvorto DB', 'HOST': 'localhost', # aŭ tiu, kiun ili bezonas 'PORT': '', # aŭ tiu, kiun ili uzas}}

Ni serĉas la linion ALLOWED_HOSTS = [] kaj ni aldonas la domajnon aŭ la adreson per kiuj ni aliros, lasante ion similan ALLOWED_HOSTS = ['www.domajno.com']

Ni agordas la dosierujon por la statikaj dosieroj, ni serĉas la linion, kiu diras STATIC_ROOT = ' ' kaj ni ŝanĝas la valoron, metante la absolutan vojon kie ni volas, ke niaj statikaj dosieroj estu, en mia kazo mi lasis ĝin pli-malpli tiel STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Preskaŭ finita, ni plenumas la jenan komandon:
./manage.py collectstatic

Ĉi tio kreos dosierujon kun la nomo 'statiko en la vojo, kiun ni specifas en la settings.py ', jen ĉiuj niaj statikaj dosieroj.

Kaj fine ni rekomencas la kontroliston por preni la novajn ŝanĝojn:
supervisorctl restart nombreApp

Kaj jen ĉio, finfine ĝi ne estis tiel vera? ŝajnis al mi simpla 😀

Mi esperas, ke ĝi utilas al vi, salutojn 😉

 

Dokumentaro pri GUnicorn

Dokumentado de Supervisord

 


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

9 komentoj, lasu la viajn

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita per *

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.

  1.   f3niX diris

    Mi komprenas, ke la programo Django ne devas esti metita en la radikon de la teko-servila dosierujo (/ var / www)? Por sekureco, mi ne scias, ĉu mi eraras.

    Salutojn.

    1.    urKh diris

      Bone !!! Ĝi estis io, kion mi tute ne sciis, mi ĝisdatigos la eniron 😛 kaj tuj kiam mi revenos lundon, mi faros ŝanĝojn en la xD-aplikaĵo
      danke

  2.   Rodrigo Bravo ( goidor) diris

    Epale frato bona lernilo. Lastatempe mi ankaŭ estis en la sama sed en Debian 7, mi devis serĉi kaj legi pli-malpli. Mi rekomendas al vi krei la virtualan medion de virtualenv en la hejmo de la uzanto en kaŝita dosierujo.

    Dankon!

  3.   serv fenriz diris

    hahaha ctm mi hieraŭ dokumentis Django kaj vi jam trapasas la galaksion 999999 Salutojn viroj xD

  4.   daniel2ac diris

    Tre bona artikolo =) antaŭ nur unu semajno mi deplojis mian django-programon sed mi faris ĝin per uwsgi kaj nginx, ĉu vi scias, kian avantaĝon havas gunicorno? Mi vidis ĝin mencii multe.
    Estas agrable vidi, ke django fariĝas tre populara, la vero estas la plej bona kadro, kiun mi vidis =)

  5.   ozkar diris

    Por la STATIC_ROOT kion mi faras estas difini tutmondan variablon. Io tia:

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

    Kie backend estas programo, kiun mi kreis. Do mi certigas, ke kie mi disvolvas la projekton, la tutmonda vojo estas la sama.

  6.   sgmart diris

    Interese, mi provos estontece.

    Cetere, ĉu iu scias kiel ebligi supersignojn kaj ne-ascii-signojn en django-aplikaĵo?

    Mi rigardis ĉien, neniu el la sekvaj metodoj funkcias por mi:
    sys.setdefaultencoding ('utf-8') # en sites.py

    # - * - kodigo: utf-8 - * - # en ĉiu pitona dosiero

    Redakti site.py, kaj meti utf-8 anstataŭ ascii supozeble funkcias, sed $ file models.py informas min, ke mia dosiero ankoraŭ estas ascii.

    Iuj Sugestoj?

    1.    sgmart diris

      Ĝi funkciis!!!!

  7.   animeo230 diris

    tre bona lernilo, sed vi povus fari unu el la manieroj por alŝuti mian programon en retservilo jam produktanta
    gracias