Как развернуть приложение 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

Gunicorn -> веб-сервер для python (пока не будем его устанавливать)

Я предполагаю, что у них уже должен быть установлен и настроен postgresql

психопг2 -> Коннектор 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

Приступаем к установке списка зависимостей приложения (при необходимости), в котором они указаны в файле requirements.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

Конфигурация супервизора:

Теперь установим руководитель, для этого мы генерируем файл конфигурации с

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] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [программа: имя приложения] команда = / 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

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

И добавляем следующий контент:

 # Автозапуск супервизора # # описание: Автозапуск супервизора # имя процесса: супервизор # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 в начале) echo -n "Запуск супервизора:" $ SUPERVISORD echo ;; stop) echo -n "Остановка супервизора:" $ SUPERVISORCTL shutdown echo ;; restart) echo -n "Остановка супервизора:" $ SUPERVISORCTL shutdown echo echo -n "Запуск супервизора:" $ SUPERVISORD echo ;; что C

А теперь даем файлу права на выполнение, чтобы он мог запускаться вместе с системой:
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 server_name слушал 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.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}

И перезапускаем nginx:
service nginx restart

Настройка Django:

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

Мы ищем строку, в которой говорится ОТЛАДКА = Истина и меняем значение, осталось ОТЛАДКА = Ложь

Добавляем параметры БД:

DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # или mysql, или любые другие 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' используют: '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

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

И, наконец, перезапускаем супервизор, чтобы принять новые изменения:
supervisorctl restart nombreApp

И это все, в конце концов, это было не так уж много правды? мне это показалось простым 😀

Надеюсь, он вам пригодится, привет

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

Руководящая документация


Оставьте свой комментарий

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

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   f3niX сказал

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

    Привет.

    1.    урХ сказал

      Все в порядке !!! Это было то, о чем я совершенно не подозревал, я обновлю запись 😛 и как только вернусь в понедельник, я внесу изменения в приложение xD
      спасибо

  2.   Родриго Браво (гойдор) сказал

    Брат Эпале хороший учебник. Недавно я тоже был там, но в Debian 7 мне приходилось искать и читать более или менее. Я рекомендую вам создать виртуальную среду virtualenv в доме пользователя в скрытой папке.

    Привет!

  3.   Серв Фенриз сказал

    хахаха ctm Я вчера документировал Django и вы уже путешествуете по галактике 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')

    Где backend - это приложение, которое я создал. Поэтому я убеждаюсь, что там, где я развертываю проект, глобальный путь такой же.

  6.   сгмарт сказал

    Интересно, попробую в будущем.

    Кстати, кто-нибудь знает, как включить акценты и символы не ascii в приложении django?

    Я везде искал, ни один из следующих способов у меня не работает:
    sys.setdefaultencoding ('utf-8') # в sites.py

    # - * - coding: utf-8 - * - # в каждом файле python

    Редактирование site.py и установка utf-8 вместо ascii должны работать, но $ file models.py сообщает мне, что мой файл по-прежнему является ascii.

    Какие-либо предложения?

    1.    сгмарт сказал

      Это сработало!!!!

  7.   anime230 сказал

    очень хороший учебник, но вы можете сделать одно из того, как загрузить мое приложение на веб-сервер, который уже находится в разработке
    Gracias