Как насчет приветствия всем, это моя первая статья в <» FromLinux (из нескольких, что есть у меня в черновиках 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
И на этом все, в конце концов, это было не так уж и важно, верно? Мне это показалось простым
Надеюсь вам пригодится, привет