Как насчет приветствия всем, это моя первая статья в <» 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
И это все, в конце концов, это было не так уж много правды? мне это показалось простым 😀
Надеюсь, он вам пригодится, привет
Я понимаю, что приложение Django не следует помещать в корень папки веб-сервера (/ var / www)? В целях безопасности не знаю, ошибаюсь ли я.
Привет.
Все в порядке !!! Это было то, о чем я совершенно не подозревал, я обновлю запись 😛 и как только вернусь в понедельник, я внесу изменения в приложение xD
спасибо
Брат Эпале хороший учебник. Недавно я тоже был там, но в Debian 7 мне приходилось искать и читать более или менее. Я рекомендую вам создать виртуальную среду virtualenv в доме пользователя в скрытой папке.
Привет!
хахаха ctm Я вчера документировал Django и вы уже путешествуете по галактике 999999 Приветствую мужчин xD
Очень хорошая статья =) всего неделю назад я развернул свое приложение django, но я сделал это с uwsgi и nginx, знаете ли вы, какое преимущество у Gunicorn? Я видел много упоминаний.
Приятно видеть, что django становится очень популярным, правда - лучший фреймворк, который я видел =)
Для STATIC_ROOT я определяю глобальную переменную. Что-то вроде этого:
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')
Где backend - это приложение, которое я создал. Поэтому я убеждаюсь, что там, где я развертываю проект, глобальный путь такой же.
Интересно, попробую в будущем.
Кстати, кто-нибудь знает, как включить акценты и символы не ascii в приложении django?
Я везде искал, ни один из следующих способов у меня не работает:
sys.setdefaultencoding ('utf-8') # в sites.py
# - * - coding: utf-8 - * - # в каждом файле python
Редактирование site.py и установка utf-8 вместо ascii должны работать, но $ file models.py сообщает мне, что мой файл по-прежнему является ascii.
Какие-либо предложения?
Это сработало!!!!
очень хороший учебник, но вы можете сделать одно из того, как загрузить мое приложение на веб-сервер, который уже находится в разработке
Gracias