Како да распоредите апликација Django:

Како за поздрав до сите, ова е мојот прв напис во <»Од Linux (од неколку што ги имам во нацртите xD), се надевам дека ќе биде корисно

Па, на моето ново и сегашно работно место, во моментот се спроведува миграција на неколку системи кон Djанго (колку е чудно а? XD) и една од моите задачи, освен развојот, е да ги ставам во производство, па како добар чирак, бидејќи првпат пуштав апликација во производство на вистински сервер: $ Почнав да го читам официјалниот документ на секој од потребните пакети на оџакот (Gunicorn и Supervisord најмногу од сè) и да видам дека упатствата На шпански, не беа многу јасни за мене во некои аспекти, решив да создадам мини водич со чекорите што ги следев за да ја ставам апликацијата во производство, базирана на магацинот Django, Gunicorn, Supervisord, Nginx и Postgresql.

Во случајот кога работам, серверите сè уште работат со Debian Squeeze, но упатството треба да биде целосно валидно за други дистрибуции ... па ајде да се осврнеме на точката и да започнеме:

Workе работам како супер корисник. Како прво, потребни се следниве пакети:

ПИП -> Алатка за инсталирање и управување со пакети за Python
aptitude install python-pip

Nginx -> Веб-сервер (ќе го користиме како обратен прокси и за кеширање на статичките датотеки 'img, js, css') Ние го инсталираме со:
aptitude install nginx

Супервизор -> Апликација за управување и следење на нашата апликација, иако се користи за многу повеќе. Ние го инсталираме со:
aptitude install supervisor

Виртуеленв -> Тоа ни помага да создадеме прилагодено опкружување за виртуелно извршување за нашата апликација. Ние го инсталираме со:
aptitude install python-virtualenv

Грозје -> веб-сервер за python (сè уште нема да го инсталираме)

Претпоставувам дека тие веќе треба да имаат инсталирано и конфигурирано postgresql

псикопкоп2 -> Postgresql конектор за python (ниту ние нема да го инсталираме уште)

Создадете виртуелна околина со virtualenv:

Прво ќе се префрлиме на работниот директориум што ќе го користиме за пуштање во производство:
cd /var/www/

Потоа, во овој директориум ќе создадеме виртуелно опкружување:
virtualenv ENV-nombreApp

Се префрлуваме во директориумот што го создадов само виртуелнав
cd ENV-nombreAPP

Ја копираме апликацијата во овој директориум и сега продолжуваме да ја активираме околината со:
source bin/activate

Предлогот сега треба да изгледа (ENV)usuario@host:

Ова сега ќе стори сè што правиме да биде зачувано во директориумот / var / www / ENV-име на апликација / без да влијае на системските пакети

Сега преминуваме во директориумот за апликации:
cd nombreApp

Ние продолжуваме да ја инсталираме листата на зависности од апликацијата (доколку е потребно), во која тие се наведени во датотеката барања.txt:
pip install -r requirements.txt

Ние исто така можеме да инсталираме пакети индивидуално, на пример, за да го инсталираме конекторот на postgresql:
pip install psycopg2

Инсталација и конфигурација на GUnicorn:

За да го инсталираме, го правиме на ист начин:
pip install gunicorn

Сега ќе го конфигурираме, за ова ќе создадеме датотека наречена пиштол-развој во коренот на нашата апликација, (иако името може да биде било што) со следнава содржина:

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

Конфигурација на надзорникот:

Сега да го поставиме супервизор, за тоа ја генерираме конфигурациската датотека со

echo_supervisord_conf > /etc/supervisord.conf

Сега ја уредуваме конфигурациската датотека:
vim /etc/supervisord.conf

И ги коментираме следните редови со отстранување на; (точка-запирка):

[unix_http_server] датотека = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50 MB logfile_backups = 10 loglevel = дебагирање pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 = 200] -Appname / appname / gunicorn-deploy.py директориум = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Корисничко име redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Сега ќе ја создадеме скриптата за супервизор да започне со системот, за тоа ќе ја создадеме датотеката:
vim /etc/init.d/supervisord

И ја додаваме следнава содржина:

 # Автоматско започнување на надзор # # опис: автоматски започнува надзор # име на процес: надзор # пид-датотека: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl случај $ 1 во почеток) echo -n "Starting supervisord:" $ SUPERVISORD echo ;; стоп) ехо -n "Запирање на надзор:" $ SUPERVISORCTL ехо на исклучување ;; рестартирај) echo -n "Запирање на супервизор:" $ SUPERVISORCTL исклучување echo echo -n "Почеток на супервизор:" $ SUPERVISORD echo ;; дека В.

И сега даваме дозволи за извршување на датотеката за да може да започне со системот:
sudo chmod +x /etc/init.d/supervisord

Ние ги ажурираме врските за да ја започнеме услугата:
sudo update-rc.d supervisord defaults

Ја започнуваме услугата:
sudo /etc/init.d/supervisord start

Поставување nginx:

Овој чекор е исто така едноставен, ние ќе ја создадеме следнава конфигурациска датотека од nginx за нашата апликација:

vim /etc/nginx/sites-enabled/nombreApp

И ние ќе ви ја додадеме следната содржина

сервер {слушај 9001; # порта каде што сакаат nginx да го слушаат името на серверот www.domain.com; # или 192.168.0.100, адреса до која ќе пристапуваме до пристап_лог /var/log/nginx/Appname.access.log; # каде што ќе ја имаме локацијата на дневникот на апликацијата / {# каде што ќе повика nginx при пристап до www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Домаќин $ http_host; } локација / статичко / {# каде што ќе пристапува nginx кога ќе влеземе во www.domain.com/static/ alias / var / www / ENV-апликација / име на апликација / статички датотеки /; }}

И ние го рестартираме nginx:
service nginx restart

Поставување на angанго:

Ајде да ја измениме датотеката за конфигурација django:
vim nombreApp/settings.py

Ние ја бараме линијата што вели DEBUG = Вистина и ја менуваме вредноста, останувајќи ДЕБУГ = Лажно

Ние ги додаваме параметрите ДБ:

БАЗИ НА ПОДАТОЦИ = {'стандардно': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # или mysql или што било 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD': 'лозинка DB ',' HOST ':' localhost ', # или оној што им треба' PORT ':' ', # или оној што го користат}}

Ја бараме линијата ALLOWED_HOSTS = [] и го додаваме доменот или адресата преку која ќе пристапуваме, оставајќи нешто како ALLOWED_HOSTS = ['www.domain.com']

Ние го конфигурираме директориумот за статички датотеки, ја бараме линијата што вели STATIC_ROOT = ' ' и ја менуваме вредноста, поставувајќи ја апсолутната патека онаму каде што сакаме да бидат нашите статички датотеки, во мојот случај го оставив горе-долу вака STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Скоро завршена, ја извршуваме следнава команда:
./manage.py collectstatic

Ова ќе создаде папка со име 'статика во патеката што ја одредуваме во поставувања.пир ", тоа е местото каде што ќе бидат сите наши статички датотеки.

И, конечно, го рестартираме супервизорот за да ги преземе новите измени:
supervisorctl restart nombreApp

И тоа ќе беше сè, на крајот не беше толку точно? ми се чинеше едноставно

Се надевам дека е корисно за вас, поздрав

 

Документација за Гуникорн

Документација за надзор

 


Содржината на статијата се придржува до нашите принципи на уредничка етика. За да пријавите грешка, кликнете овде.

9 коментари, оставете ги вашите

Оставете го вашиот коментар

Вашата е-маил адреса нема да бидат објавени. Задолжителни полиња се означени со *

*

*

  1. Одговорен за податоците: Мигел Анхел Гатон
  2. Цел на податоците: Контролирајте СПАМ, управување со коментари.
  3. Легитимација: Ваша согласност
  4. Комуникација на податоците: Податоците нема да бидат соопштени на трети лица освен со законска обврска.
  5. Складирање на податоци: База на податоци хостирани од Occentus Networks (ЕУ)
  6. Права: Во секое време можете да ги ограничите, вратите и избришете вашите информации.

  1.   f3niX dijo

    Разбирам дека апликацијата Django не треба да се става во коренот на папката со веб-серверот (/ var / www)? За безбедност, не знам дали грешам.

    Поздрав.

    1.    urKh dijo

      Во ред !!! Тоа беше нешто за што воопшто не бев свесен, ќе го ажурирам записот 😛 и штом ќе се вратам во понеделник ќе направам промени во апликацијата xD
      Благодарам

  2.   Родриго Браво (гоидор) dijo

    Епале брат добро упатство. Неодамна бев исто во истата, но во Debian 7, морав да пребарувам и читам повеќе или помалку. Препорачувам да ја креирате виртуелната средина на virtualenv во домот на корисникот во скриена папка.

    Честитки!

  3.   Серв Фенриз dijo

    хахаха цтм јас вчера го документирав Djанго и ти веќе поминуваш низ галаксијата 999999 Поздрав мажи xD

  4.   даниел2ак dijo

    Многу добра статија =) Само пред една недела ја распоредив мојата апликација django, но тоа го направив со uwsgi и nginx, дали знаете каква предност има пилингот? Сум видел дека се споменува многу.
    Убаво е да се види дека џанго станува многу популарен, вистината е најдобрата рамка што сум ја видел =)

  5.   Озкар dijo

    За STATIC_ROOT, она што го правам е да дефинирам глобална променлива. Нешто како ова:

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

    Каде што заднината е апликација што ја создадов. Затоа, се осигурувам дека каде што ќе го распоредам проектот, глобалниот пат е ист.

  6.   сгмарт dijo

    Интересно, ќе се обидам во иднина.

    Патем, дали некој знае како да овозможи акценти и не-асии карактери во апликација џанго?

    Гледав насекаде, ниту еден од следниве методи не работи за мене:
    sys.setdefaultencoding ('utf-8') # во страниците.py

    # - * - кодирање: utf-8 - * - # во секоја питонска датотека

    Уредувањето на site.py и ставањето на utf-8 наместо ascii би требало да функционираат, но $ file models.py ме известува дека мојата датотека е сè уште ascii.

    Некои предлози?

    1.    сгмарт dijo

      Успеа!!!!

  7.   аниме230 dijo

    многу добро упатство, но можете да направите како да ја поставите мојата апликација на веб-сервер што е веќе во производство
    благодарение