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
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.
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
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!
hahaha ctm Unë dje dokumentoj Django dhe ju tashmë po kaloni nëpër galaktikë 999999 Përshëndetje burra xD
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ë =)
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ë.
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?
Funksionoi!!!!
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