Kumusta ang pagbati sa lahat, ito ang aking unang artikulo sa <» DesdeLinux (de varios que tengo en mis borradores xD), espero les sea de utilidad 😀
Sa gayon, sa aking bago at kasalukuyang trabaho, sa sandaling ito ang paglipat ng maraming mga sistema sa Django ay isinasagawa (gaano kakaiba eh ?? xD) at ang isa sa aking mga gawain, bukod sa pag-unlad, ay ang paglalagay sa produksyon ng mga ito, pagkatapos ay bilang mahusay na mag-aaral, dahil ito ang aking unang pagkakataon sa paglalagay ng isang application sa paggawa sa isang tunay na server: $ Sinimulan kong basahin ang opisyal na dokumento ng bawat isa sa mga kinakailangang mga pakete ng stack (Gunicorn at Supervisord higit sa lahat), at nakikita na ang mga tutorial Sa Espanyol hindi nila gaanong malinaw sa akin sa ilang mga aspeto, nagpasya akong lumikha ng isang mini gabay na may mga hakbang na sinusunod ko upang mailagay ang aplikasyon, batay sa Django, Gunicorn, Supervisord, Nginx at Postgresql stack.
Sa kaso kung saan ako nagtatrabaho, tumatakbo pa rin ang mga server sa Debian Squeeze, ngunit ang gabay ay dapat na ganap na may bisa para sa iba pang mga pamamahagi ... kaya't diretso tayo sa puntong ito at magsimula:
Magtatrabaho ako bilang isang super user. Una sa lahat, ang mga sumusunod na pakete ay kinakailangan:
PIP -> Tool upang mai-install at pamahalaan ang mga pakete para sa Python
aptitude install python-pip
Nginx -> Web server (gagamitin namin ito bilang isang reverse proxy at upang i-cache ang mga static na file na 'img, js, css') I-install namin ito sa:
aptitude install nginx
Supervisord -> Application upang pamahalaan at subaybayan ang aming aplikasyon, kahit na ginagamit ito para sa higit pa. I-install namin ito sa:
aptitude install supervisor
virtualenv -> Tumutulong ito sa amin upang lumikha ng isang pasadyang kapaligiran sa pagpapatupad ng virtual para sa aming aplikasyon. I-install namin ito sa:
aptitude install python-virtualenv
gunicorn -> web server para sa sawa (hindi pa namin ito mai-i-install)
Ipagpalagay ko na dapat na mayroon silang naka-install at na-configure na postgresql
psychopg2 -> Konektor ng Postgresql para sa sawa (hindi pa namin ito mai-i-install)
Lumikha ng virtual na kapaligiran sa virtualenv:
Una ay lilipat kami sa gumaganang direktoryo na gagamitin namin para sa paglalagay:
cd /var/www/
Pagkatapos sa direktoryong ito lilikha kami ng virtual na kapaligiran:
virtualenv ENV-nombreApp
Lumipat kami sa direktoryo na nilikha ko lang virtualenv
cd ENV-nombreAPP
Kinokopya namin ang application sa direktoryo na ito at nagpapatuloy kami upang buhayin ang kapaligiran sa:
source bin/activate
Ang prompt ay dapat magmukhang ngayon (ENV)usuario@host:
Gagawin nito ngayon ang lahat ng aming ginagawa ay nakaimbak sa direktoryo / var / www / ENV-appname / nang hindi nakakaapekto sa mga package ng system
Lumipat kami ngayon sa direktoryo ng application:
cd nombreApp
Nagpapatuloy kaming mai-install ang listahan ng mga dependency ng aplikasyon (kung kinakailangan), kung saan tinukoy ang mga ito sa file mga kinakailangan.txt:
pip install -r requirements.txt
Maaari din kaming mag-install ng mga pakete nang isa-isa, halimbawa, upang mai-install ang konektor ng postgresql:
pip install psycopg2
Pag-install at pagsasaayos ng GUnicorn:
Upang mai-install ito ginagawa namin ito sa parehong paraan:
pip install gunicorn
Ngayon ay i-configure namin ito, para dito lilikha kami ng isang file na tinawag gunicorn-deploy.py sa ugat ng aming aplikasyon, (kahit na ang pangalan ay maaaring maging anumang) kasama ang sumusunod na nilalaman:
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
Pagsasaayos ng Supervisord:
Itakda na natin ang supervisord, para sa iyon binubuo namin ang file ng pagsasaayos kasama
echo_supervisord_conf > /etc/supervisord.conf
Ngayon ay nai-edit namin ang file ng pagsasaayos:
vim /etc/supervisord.conf
At hindi namin pinapansin ang mga sumusunod na linya sa pamamagitan ng pag-aalis ng; (semicolon):
[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] utos = / 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
Ngayon ay lilikha kami ng script para sa supervisord upang magsimula sa system, para doon lilikha kami ng file:
vim /etc/init.d/supervisord
At idinagdag namin ang sumusunod na nilalaman:
# Supervisord auto-start # # paglalarawan: Awtomatikong pagsisimula ng supervisord # proseso ng pangalan: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 sa pagsisimula) echo -n "Simula ng superbisor:" $ SUPERVISORD echo ;; huminto) echo -n "Natigil ang superbisor:" $ SUPERVISORCTL shutdown echo ;; restart) echo -n "Natigil ang supervisord:" $ SUPERVISORCTL shutdown echo echo -n "Simula ng supervisord:" $ SUPERVISORD echo ;; na C
At ngayon binibigyan namin ang file ng mga pahintulot upang magsimula ito sa system:
sudo chmod +x /etc/init.d/supervisord
Ina-update namin ang mga link upang simulan ang serbisyo:
sudo update-rc.d supervisord defaults
Sinimulan namin ang serbisyo:
sudo /etc/init.d/supervisord start
Pagse-set up nginx:
Ang hakbang na ito ay medyo simple din, lilikha kami ng sumusunod na file ng pagsasaayos ng nginx para sa aming aplikasyon:
vim /etc/nginx/sites-enabled/nombreApp
At idaragdag namin ang sumusunod na nilalaman sa iyo
server {makinig 9001; # port kung saan nais nilang makinig nginx sa server_name www.domain.com; # o 192.168.0.100, address kung saan mai-access namin ang access_log /var/log/nginx/Appname.access.log; # kung saan magkakaroon kami ng lokasyon ng pag-log ng aplikasyon / {# kung saan tatawag ang nginx kapag na-access ang www.dominio.com/proxy_pass http://127.0.0.1:8001; proxy_set_header Host ng $ http_host; } lokasyon / static / {# kung saan a-access nginx kapag ipinasok namin ang www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}
At restart namin ang nginx:
service nginx restart
Pagse-set up ng Django:
Baguhin natin ang file ng pagsasaayos ng django:
vim nombreApp/settings.py
Hahanapin namin ang linya na nagsasabi DEBUG = Totoo at binabago namin ang halaga, natitira DEBUG = Mali
Nagdagdag kami ng mga parameter ng DB:
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # o MySQL, o kung anuman ang 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' ay gumagamit ng : 'password DB', 'HOST': 'localhost', # o ang kailangan nila ng 'PORT': '', # o ang ginagamit nila}}
Hahanapin namin ang linya ALLOWED_HOSTS = [] at idinagdag namin ang domain o ang address kung saan kami makaka-access, na nag-iiwan ng tulad ALLOWED_HOSTS = ['www.domain.com']
I-configure namin ang direktoryo para sa mga static na file, hinahanap namin ang linya na nagsasabing STATIC_ROOT = ' '
at binabago namin ang halaga, inilalagay ang ganap na landas kung saan nais naming maging ang aming mga static na file, sa aking kaso iniwan ko ito ng higit pa o mas kaunti tulad nito STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'
Halos tapos na, isinasagawa namin ang sumusunod na utos:
./manage.py collectstatic
Lilikha ito ng isang folder na may pangalang 'mga static sa landas na tinukoy namin sa settings.py ', doon makikita ang lahat ng aming mga static na file.
At sa wakas ay restart namin ang superbisor upang gawin ang mga bagong pagbabago:
supervisorctl restart nombreApp
At iyon ang magiging lahat, sa huli hindi ito masyadong totoo? parang simple lang sa akin 😀
Umaasa ako na ito ay kapaki-pakinabang sa iyo, pagbati 😉
Nauunawaan ko na ang Django app ay hindi dapat mailagay sa ugat ng folder ng web server (/ var / www)? Para sa kaligtasan, hindi ko alam kung mali ako.
Pagbati.
Lahat tama !!! Ito ay isang bagay na hindi ko namamalayan, ia-update ko ang entry 😛 at sa aking pagbabalik sa Lunes ay gagawa ako ng mga pagbabago sa aplikasyon ng xD
Salamat
Epale kapatid magandang tutorial. Kamakailan lang ay pareho din ako ngunit sa Debian 7, kailangan kong maghanap at magbasa nang higit pa o mas kaunti. Inirerekumenda ko na lumikha ka ng virtual na kapaligiran ng virtualenv sa bahay ng gumagamit sa isang nakatagong folder.
Pagbati!
hahaha ctm ako kahapon ang pagdodokumento sa Django at dumaan ka na sa galaxy 999999 Pagbati sa mga kalalakihan xD
Napakagandang artikulo =) isang linggo lamang ang nakalilipas na ipinakalat ko ang aking django app ngunit ginawa ko ito sa uwsgi at nginx, alam mo ba kung anong kalamangan ang mayroon ang gunicorn? Marami akong nakita na nabanggit dito.
Napakasarap na makita na ang django ay nagiging napakapopular, ang katotohanan ay ang pinakamahusay na balangkas na nakita ko =)
Para sa STATIC_ROOT kung ano ang ginagawa ko ay tukuyin ang isang pandaigdigang variable. Isang bagay na tulad nito:
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')
Kung saan ang backend ay isang app na nilikha ko. Kaya't tinitiyak ko na kung saan ko mailalagay ang proyekto, ang pandaigdigang landas ay pareho.
Nakakatuwa, susubukan ko sa hinaharap.
Sa pamamagitan ng paraan, may nakakaalam ba Paano paganahin ang mga accent at hindi-character na character sa isang django application?
Tumingin ako kahit saan, wala sa mga sumusunod na pamamaraan ang gumagana para sa akin:
sys.setdefaultencoding ('utf-8') # sa sites.py
# - * - coding: utf-8 - * - # sa bawat python file
Ang pag-edit sa site.py, at paglalagay ng utf-8 sa halip na ang Alexa ay dapat na gumana, ngunit ipinapaalam sa akin ng $ file models.py na ang aking file ay isang Alexa pa rin.
Anumang mga Mungkahi?
Gumana ito!!!!
napakahusay na tutorial ngunit magagawa mo ba ang isa kung paano i-upload ang aking app sa isang web server na nasa paggawa na
salamat