Як розгорнути програму Django:

Вітаю всіх, це моя перша стаття в <» DesdeLinux (з кількох, які я маю в своїх чернетках xD), сподіваюся, він стане в нагоді 😀

Ну, на моїй новій і поточній роботі, на даний момент здійснюється міграція декількох систем до Django (як це дивно, а ?? xD), і одним із моїх завдань, крім розробки, є введення у виробництво таких, а потім як хороший підмайстер, оскільки я вперше запускав додаток у виробництво на реальному сервері: $ Я почав читати офіційний документ кожного з необхідних пакетів стеку (Gunicorn і Supervisord більше за всіх), і побачивши, що навчальні посібники Іспанською мовою вони були мені не дуже зрозумілими в деяких аспектах, я вирішив створити міні-путівник із кроками, якими я керувався для запуску програми, на основі стеку Django, Gunicorn, Supervisord, Nginx та Postgresql.

У тому випадку, коли я працюю, сервери все ще працюють на Debian Squeeze, але керівництво повинно бути повністю дійсним для інших дистрибутивів ... так що давайте перейдемо до суті та почнемо:

Я буду працювати як суперкористувач. Перш за все, потрібні такі пакети:

PIP -> Інструмент для встановлення та управління пакетами для Python
aptitude install python-pip

Nginx -> Веб-сервер (ми будемо використовувати його як зворотний проксі-сервер та кешувати статичні файли 'img, js, css') Встановлюємо його за допомогою:
aptitude install nginx

Наглядовий орган -> Додаток для управління та моніторингу нашого додатку, хоча він використовується набагато більше. Встановлюємо його за допомогою:
aptitude install supervisor

Віртуаленв -> Це допомагає нам створити персоніфіковане віртуальне середовище виконання для нашого додатку. Встановлюємо його за допомогою:
aptitude install python-virtualenv

Гунікорн -> веб-сервер для python (ми ще не встановлюватимемо це)

Я припускаю, що у них вже повинен бути встановлений та налаштований postgresql

psychopg2 -> З'єднувач Postgresql для python (ми також його ще не встановимо)

Створіть віртуальне середовище за допомогою virtualenv:

Спочатку ми перейдемо до робочого каталогу, який будемо використовувати для запуску у виробництво:
cd /var/www/

Тоді в цьому каталозі ми створимо віртуальне середовище:
virtualenv ENV-nombreApp

Переходимо до каталогу, який я щойно створив virtualenv
cd ENV-nombreAPP

Ми копіюємо програму в цей каталог і тепер приступаємо до активації середовища за допомогою:
source bin/activate

Тепер підказка повинна виглядати так (ENV)usuario@host:

Тепер усе, що ми робимо, зберігатиметься в каталозі / var / www / ENV-appname / не впливаючи на системні пакети

Тепер переходимо до каталогу додатків:
cd nombreApp

Приступаємо до встановлення списку залежностей програми (за необхідності), в якому вони вказані у файлі вимоги.txt:
pip install -r requirements.txt

Ми також можемо встановлювати пакети окремо, наприклад, для встановлення роз'єму postgresql:
pip install psycopg2

Встановлення та налаштування GUnicorn:

Щоб встановити його, ми робимо це так само:
pip install gunicorn

Тепер ми збираємося його налаштувати, для цього ми створимо файл із назвою gunicorn-deploy.py в корені нашого додатку (хоча назва може бути будь-яким) із таким змістом:

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

Конфігурація Supervisord:

Тепер давайте встановимо керівник, для цього ми генеруємо файл конфігурації за допомогою

echo_supervisord_conf > /etc/supervisord.conf

Тепер редагуємо файл конфігурації:
vim /etc/supervisord.conf

І ми коментуємо наступні рядки, видаляючи; (крапка з комою):

[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.rpcinterface_factory = супервізор.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] command = / 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 = Ім'я користувача redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

Тепер ми створимо скрипт для супервізор для запуску з системою, для чого створимо файл:
vim /etc/init.d/supervisord

І ми додаємо наступний вміст:

 # Автозапуск Supervisord # # Опис: Автозапуск Supervisord # Назва процесу: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 на початку) echo -n "Початковий супервізор:" $ SUPERVISORD echo ;; зупинка) 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, адреса, до якої ми будемо отримувати доступ access_log /var/log/nginx/Appname.access.log; # де ми будемо знаходити журнал додатків / {# куди буде викликати nginx при доступі до www.dominio.com/proxy_pass http://127.0.0.1:8001; proxy_set_header Хост $ http_host; } location / static / {# де nginx отримає доступ, коли ми введемо www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

І ми перезапускаємо nginx:
service nginx restart

Налаштування Django:

Давайте змінимо файл конфігурації django:
vim nombreApp/settings.py

Ми шукаємо рядок, який говорить ДЕБУГ = Істина і ми змінюємо значення, що залишився ДЕБУГ = Невірно

Додаємо параметри БД:

БАЗИ ДАНИХ = {'за замовчуванням': {'ДВИГУН': 'django.db.backends.postgresql_psycopg2', # або mysql, або будь-яке 'ІМ'Я': 'DBName', 'КОРИСТУВАЧ': 'DBUser', 'ПАРОЛЬ' використовується : 'DB DB', 'HOST': 'localhost', # або той, який їм потрібен 'PORT': '', # або той, який вони використовують}}

Шукаємо лінію ALLOWED_HOSTS = [] і ми додаємо домен або адресу, через яку ми матимемо доступ, залишаючи щось на зразок ALLOWED_HOSTS = ['www.domain.com']

Ми налаштовуємо каталог для статичних файлів, ми шукаємо рядок, який говорить STATIC_ROOT = ' ' і ми змінюємо значення, розміщуючи абсолютний шлях там, де хочемо, щоб були наші статичні файли, у моєму випадку я залишив його більш-менш таким STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

Майже закінчивши, ми виконуємо таку команду:
./manage.py collectstatic

Це створить папку з назвою 'статика у шляху, який ми вказали в settings.py ", ось де будуть всі наші статичні файли.

І нарешті, ми перезапустимо супервізор, щоб прийняти нові зміни:
supervisorctl restart nombreApp

І це було б все, зрештою це було не так вже й погано? мені це здалося простим 😀

Сподіваюся, це вам стане в нагоді, вітаю 😉

Документація GUnicorn

Документація супервізор


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   f3niX - сказав він

    Я розумію, що додаток Django не слід розміщувати у кореневій папці веб-сервера (/ var / www)? Задля безпеки я не знаю, чи помиляюся.

    Привіт.

    1.    урХ - сказав він

      Гаразд !!! Це було щось, про що я зовсім не знав, я оновлю запис 😛 і як тільки повернусь у понеділок, я внесу зміни в додаток xD
      Грекіас

  2.   Родріго Браво (Гойдор) - сказав він

    Epale брат хороший підручник. Нещодавно я також був у тому ж, але в Debian 7 мені довелося шукати і читати більш-менш. Я рекомендую вам створити віртуальне середовище virtualenv удома користувача у прихованій папці.

    Привіт!

  3.   Серв Фенріз - сказав він

    ха-ха-ха CTM Я вчора документував Джанго, і ти вже переживаєш галактику 999999 Вітаю чоловіків xD

  4.   daniel2ac - сказав він

    Дуже хороша стаття =) буквально тиждень тому я розгорнув свою програму django, але я зробив це за допомогою uwsgi та nginx, чи знаєте ви, яку перевагу має gunicorn? Я бачив, що про це згадувалося багато.
    Приємно бачити, що django стає дуже популярним, правда - найкращий фреймворк, який я бачив =)

  5.   Озкар - сказав він

    Для STATIC_ROOT я роблю визначення глобальної змінної. Щось на зразок цього:

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

    Де бекенд - це програма, яку я створив. Тому я переконуюсь, що там, де я розгортаю проект, глобальний шлях однаковий.

  6.   sgmart - сказав він

    Цікаво, буду намагатися надалі.

    До речі, хтось знає, як увімкнути наголоси та символи, що не є ascii, у програмі django?

    Я переглядав всюди, жоден із наведених нижче методів не працює для мене:
    sys.setdefaultencoding ('utf-8') # у sites.py

    # - * - кодування: utf-8 - * - # у кожному файлі python

    Редагування site.py та розміщення utf-8 замість ascii має працювати, але $ file models.py повідомляє мені, що мій файл все ще ascii.

    Будь-які пропозиції?

    1.    sgmart - сказав він

      Це спрацювало!!!!

  7.   anime230 - сказав він

    дуже хороший підручник, але ви можете зробити одне з того, як завантажити мою програму на веб-сервер, який уже працює
    спасибі