Si të vendosni një aplikacion Django:

Përshëndetje të gjithëve, ky është artikulli im i parë në <» DesdeLinux (nga disa që kam në draftet e mia xD), shpresoj të jetë i dobishëm për ju 😀

Epo, në punën time të re dhe aktuale, në këtë moment po kryhet migrimi i disa sistemeve në Django (sa e çuditshme eh ?? xD) dhe një nga detyrat e mia, përveç zhvillimit, është vënia në prodhim e këtyre, atëherë si nxënës i mirë, pasi ishte hera ime e parë që vendosja një aplikacion në prodhim në një server të vërtetë: $ Fillova të lexoj dokumentin zyrtar të secilës prej paketave të kërkuara të pirgut (Gunicorn dhe Supervisord më shumë se të gjithë), dhe duke parë që udhëzimet Në Spanjisht ato nuk ishin shumë të qarta për mua në disa aspekte, unë vendosa të krijoj një mini udhëzues me hapat që ndoqa për të vendosur aplikacionin në prodhim, bazuar në pirgun Django, Gunicorn, Supervisord, Nginx dhe Postgresql.

Në rastin kur unë punoj, serverat vazhdojnë të funksionojnë në Debian Squeeze, por udhëzuesi duhet të jetë plotësisht i vlefshëm për shpërndarjet e tjera ... kështu që le të shkojmë drejt në pikën dhe të fillojmë:

Unë do të punoj si një super përdorues. Para së gjithash, kërkohen paketat e mëposhtme:

PIP -> Mjet për të instaluar dhe menaxhuar paketat për Python
aptitude install python-pip

nginx -> Web server (ne do ta përdorim atë si një proxy reverse dhe për të memorizuar skedarët statik 'img, js, css') Ne e instalojmë atë me:
aptitude install nginx

Mbikëqyrës -> Aplikimi për të menaxhuar dhe monitoruar aplikacionin tonë, megjithëse përdoret për shumë më tepër. Ne e instalojmë atë me:
aptitude install supervisor

virtualenv -> Kjo na ndihmon të krijojmë një mjedis të përshtatur ekzekutimi virtual për aplikacionin tonë. Ne e instalojmë atë me:
aptitude install python-virtualenv

Bricjapi -> server në internet për python (nuk do ta instalojmë akoma këtë)

Supozoj se ata duhet të kenë të instaluar dhe konfiguruar tashmë postgresql

psikopg2 -> Lidhës Postgresql për python (as ne nuk do ta instalojmë akoma)

Krijoni një mjedis virtual me virtualenv:

Së pari ne do të kalojmë në drejtorinë e punës që do të përdorim për të vendosur në prodhim:
cd /var/www/

Pastaj në këtë direktori do të krijojmë mjedisin virtual:
virtualenv ENV-nombreApp

Kalojmë te drejtoria që sapo krijova virtualenv
cd ENV-nombreAPP

Ne kopjojmë aplikacionin në këtë direktori dhe tani vazhdojmë të aktivizojmë mjedisin me:
source bin/activate

Kërkesa tani duhet të duket si (ENV)usuario@host:

Kjo tani do të bëjë që gjithçka që bëjmë të ruhet në direktori / var / www / ENV-emri i aplikacionit / pa ndikuar në paketat e sistemit

Tani kalojmë në drejtorinë e aplikacionit:
cd nombreApp

Ne vazhdojmë të instalojmë listën e varësive të aplikimit (nëse është e nevojshme), në të cilën ato specifikohen në skedar kërkesat.txt:
pip install -r requirements.txt

Ne gjithashtu mund të instalojmë paketa individualisht, për shembull, për të instaluar lidhësin e PostgreSQL:
pip install psycopg2

Instalimi dhe konfigurimi i GUnicorn:

Për ta instaluar, ne e bëjmë në të njëjtën mënyrë:
pip install gunicorn

Tani do ta konfigurojmë, për këtë do të krijojmë një skedar të quajtur puna me gunicorn.py në rrënjën e aplikacionit tonë, (megjithëse emri mund të jetë gjithçka) me përmbajtjen vijuese:

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

Konfigurimi i mbikëqyrësit:

Tani le të vendosim mbikëqyrës, për këtë ne gjenerojmë skedarin e konfigurimit me

echo_supervisord_conf > /etc/supervisord.conf

Tani ne editojmë skedarin e konfigurimit:
vim /etc/supervisord.conf

Dhe ne i komentojmë linjat e mëposhtme duke hequr; (pikëpresje):

[unix_http_server] skedar = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50 MB logfile_backups = 10 loglevel = korrigjim pidfile = / var / ekzekutoj / supervisord.pid nodaemon = minfs false = 1024 = 200 [rpcinterface: mbikëqyrës] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] komanda = / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py Directory = / var / www / ENV-appname / appname / autostart = autorestart i vërtetë = përdorues i vërtetë = Emri i përdoruesit redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Tani do të krijojmë skenarin për mbikëqyrjen që të fillojë me sistemin, për këtë do të krijojmë skedarin:
vim /etc/init.d/supervisord

Dhe ne shtojmë përmbajtjen e mëposhtme:

 # Fillimi automatik i mbikëqyrësit # # përshkrimi: Fillon automatikisht mbikëqyrja # emri i procesit: mbikëqyrësi # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl rast $ 1 në fillim) echo -n "Mbikëqyrja fillestare:" $ SUPERVISORD echo ;; ndalo) echo -n "Ndalimi i mbikëqyrësit:" $ SUPERVISORCTL jehonë e mbylljes ;; rifillo) echo -n "Ndalimi i mbikëqyrjes:" $ SUPERVISORCTL mbyllje echo echo -n "Fillimi i mbikëqyrjes:" $ SUPERVISORD echo ;; se C

Dhe tani ne i japim skedarit ekzekutimin e lejeve në mënyrë që ajo të mund të fillojë me sistemin:
sudo chmod +x /etc/init.d/supervisord

Ne azhurnojmë lidhjet për të filluar shërbimin:
sudo update-rc.d supervisord defaults

Ne fillojmë shërbimin:
sudo /etc/init.d/supervisord start

Vendosja e nginx:

Ky hap është gjithashtu mjaft i thjeshtë, ne do të krijojmë skedarin e konfigurimit të mëposhtëm nginx për aplikimin tonë:

vim /etc/nginx/sites-enabled/nombreApp

Dhe ne do të shtojmë përmbajtjen vijuese për ju

serveri {degjo 9001; # port ku ata duan që nginx të dëgjojë emrin e serverit www.domain.com; # ose 192.168.0.100, adresa në të cilën do të kemi qasje_log /var/log/nginx/Appname.access.log; # ku do të kemi vendndodhjen e regjistrit të aplikacionit / {# ku nginx do të telefonojë kur hyni në www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Pritësi $ http_host; } vendndodhja / statika / {# ku nginx do të ketë qasje kur hyjmë në www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

Dhe ne rifillojmë nginx:
service nginx restart

Vendosja e Django:

Le të modifikojmë skedarin e konfigurimit django:
vim nombreApp/settings.py

Ne kërkojmë vijën që thotë DEBUG = E vërtetë dhe ne e ndryshojmë vlerën, duke mbetur DEBUG = E gabuar

Ne shtojmë parametrat DB:

BAZAT E TAT DHNAVE = {'parazgjedhur': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # ose mysql, ose çfarëdo që po përdorin 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'fjalëkalimi DB', 'HOST': 'localhost', # ose ai që u duhet 'PORTI': '', # ose ai që po përdorin}}

Ne kërkojmë vijën ALLOWED_HOSTS = [] dhe ne shtojmë domenin ose adresën përmes së cilës do të kemi qasje, duke lënë diçka të ngjashme ALLOWED_HOSTS = ['www.domain.com']

Ne konfigurojmë direktorinë për skedarët statikë, kërkojmë vijën që thotë STATIC_ROOT = ' ' dhe ne ndryshojmë vlerën, duke vendosur rrugën absolute atje ku duam të jenë skedarët tanë statikë, në rastin tim e lashë pak a shumë kështu STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Pothuajse të përfunduar, ne ekzekutojmë komandën e mëposhtme:
./manage.py collectstatic

Kjo do të krijojë një dosje me emrin 'statike në rrugën që ne specifikojmë në cilësimet.py ', këtu do të jenë të gjitha skedarët tanë statik.

Dhe së fundmi ne rifillojmë mbikëqyrësin për të marrë ndryshimet e reja:
supervisorctl restart nombreApp

Dhe kjo do të ishte e gjitha, në fund të fundit nuk ishte aq e vërtetë? më dukej e thjeshtë

Shpresoj të jetë e dobishme për ju, përshëndetje

Dokumentacioni i GUnicorn

Dokumentacioni i mbikëqyrjes


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   f3niX dijo

    E kuptoj që aplikacioni Django nuk duhet të vendoset në rrënjën e dosjes së serverit në internet (/ var / www)? Për siguri, nuk e di nëse jam gabim.

    Përshëndetje.

    1.    urKh dijo

      Në rregull !!! Ishte diçka për të cilën unë nuk isha plotësisht në dijeni, unë do të azhurnoj hyrjen ... dhe sa më shpejt që të kthehem të hënën do të bëj ndryshime në aplikacionin xD
      Falënderim

  2.   Rodrigo Bravo (goidor) dijo

    Vëllai Epale tutorial i mirë. Kohët e fundit isha gjithashtu në të njëjtën gjë, por në Debian 7, më duhej të kërkoja dhe lexoja pak a shumë. Unë rekomandoj që të krijoni mjedisin virtual të virtualenv në shtëpinë e përdoruesit në një dosje të fshehur.

    Përshëndetje!

  3.   shërbej fenriz dijo

    hahaha ctm Unë dje dokumentoj Django dhe ju tashmë po kaloni nëpër galaktikë 999999 Përshëndetje burra xD

  4.   daniel2ac dijo

    Artikull shumë i mirë =) vetëm një javë më parë unë vendosa aplikacionin tim django por e bëra me uwsgi dhe nginx, e dini çfarë përparësie ka gunicorn? E kam parë të përmendet shumë.
    Niceshtë bukur të shohësh që django po bëhet shumë popullor, e vërteta është korniza më e mirë që kam parë =)

  5.   është Ozkan dijo

    Për STATIC_ROOT ajo që bëj është të përcaktoj një ndryshore globale. Diçka si kjo:

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

    Ku backend është një aplikacion që unë krijova. Kështu që sigurohem që atje ku unë vendos projektin, rruga globale është e njëjtë.

  6.   sgmart dijo

    Interesante, do të provoj në të ardhmen.

    Nga rruga, a di dikush se si të mundësojë thekse dhe karaktere jo-ascii në një aplikacion django?

    Kam shikuar kudo, asnjë nga metodat e mëposhtme nuk funksionon për mua:
    sys.setdefaultencoding ('utf-8') # në faqet.py

    # - * - kodimi: utf-8 - * - # në çdo skedar python

    Redaktimi i site.py dhe vendosja e utf-8 në vend të ascii supozohet se funksionon, por $ file model.py më informon se skedari im është akoma një ascii.

    Ndonjë sugjerim?

    1.    sgmart dijo

      Funksionoi!!!!

  7.   anime230 dijo

    udhëzues shumë i mirë, por a mund të bëni një nga mënyrat se si të ngarkoni aplikacionin tim në një server në internet tashmë në prodhim
    falënderim