Как установить postgresql django
Установка и настройка Django с Postgres, Nginx и Gunicorn
Предварительные условия
Предполагается, что VPS с Debian 7 или подобным дистрибутивом Linux (например, Ubuntu) уже установлен.
Для удобства данное руководство разделено на 2 части. Первая часть (разделы 1 – 6) охватывает только установку. Продвинутые пользователи Django, которым необходимы только инструкции по установке остального ПО, могут сразу же переходить к разделу 6. Пользователи, которым необходимы советы по настройке, могут переходить к разделу 7.
1: Обновление пакетов
Прежде чем начать установку, необходимо обновить программные пакеты на VPS. Для этого подключитесь к VPS по SSH и запустите следующие команды:
sudo apt-get update
sudo apt-get upgrade
Первая команда загружает все обновления для пакетов, управляемых командой apt-get. Вторая команда устанавливает загруженные обновления. Если даные команды обнаружат новые доступные версии пакетов, будет выведено извещение, предлагающее указать, нужно ли устанавливать обновления. Нажмите Y и клавишу Enter при появлении такого извещения.
2: Установка и создание Virtualenv
Установить инструмент virtualenv очень просто. Для этого запустите приведенную ниже команду:
sudo apt-get install python-virtualenv
Готово! Теперь нужно создать virtualenv (или виртуальную среду), чтобы разместить и постоянно хранить в ней Django и другие пакеты Python:
sudo virtualenv /opt/myenv
Обратите внимание: в каталоге /opt был создан новый каталог по имени myenv. Согласно данному руководству, в этом каталоге и нужно развернуть виртуальную среду. Чтобы развернуть среду в другом каталоге, не забудьте заменить /opt/myenv путем к этому каталогу. Некоторые разработчики создают каталог по имени webapps в root-каталоге сервера.
3: Установка Django
Теперь нужно активировать virtualenv, чтобы пакеты Python были установлены не общесистемно, а изолированно, внутри среды. Итак, чтобы активировать virtualenv:
Обратите внимание, имя каталога, содержащего виртуальную среду (myenv) внесено в начало терминальной строки. Это помогает легко определить, активирована ли virtualenv и какая именно среда является текущей (в случае, если на VPS существует несколько virtualenv).
Теперь можно приступить к установке Django. Для этого используйте pip, менеджер пакетов Python (аналог easy_install). Запустите команду:
pip install django
Django установлен внутри активной virtualenv. Теперь нужно запустить сервер баз данных.
4: Установка PostgreSQL
Большинство пользователей Django предпочитают использовать PostgreSQL в качестве сервера баз данных. Он намного более устойчивый к ошибкам, чем MySQL; кроме того, Django ORM работает с PostgreSQL намного лучше, чем с MySQL, MSSQL и т.п.
Поскольку на данном этапе активная virtualenv не нужна, ее необходимо дезактивировать, запустив команду:
Данная команда дезактивирует текущую активную виртуальную среду. Теперь необходимо установить зависимости PostgreSQL (для его работы с Django) с помощью следующей команды:
sudo apt-get install libpq-dev python-dev
Установив все необходимые зависимости, установите PostgreSQL:
sudo apt-get install postgresql postgresql-contrib
Теперь PostgreSQL установлен и готов к работе.
5: Установка NGINX
NGINX – это невероятно быстрый и легкий веб-сервер. В данном руководстве он используется для обслуживания статических файлов приложения Django. Чтобы установить NGINX, выполните следующую команду:
sudo apt-get install nginx
Обратите внимание: NGINX не запускается автоматически, его нужно будет запустить вручную; не забудьте вернуться к этому перед настройкой VPS.
6: Установка Gunicorn
Gunicorn – это очень мощный HTTP-сервер Python WSGI. Поскольку Gunicorn является пакетом Python, необходимо активировать виртуальную среду, прежде чем его устанавливать. Это делается так:
Убедитесь в том, что «myenv» внесен в начало терминальной строки. Активировав виртуальную среду, запустите команду:
pip install gunicorn
Теперь Gunicorn установлен внутри virtualenv.
Установка всех необходимых компонентов завершена. Последующие разделы руководства содержат инструкции по настройке установленных серверов и тому, как сделать приложение доступным для других в Интернете.
7: Настройка PostgreSQL
Для начала нужно настроить PostgreSQL. Данный сервер понадобится для создания базы данных и пользователя, а также для передачи новому пользователю прав доступа к базе данных. Итак, запустите следующую команду:
Сейчас строка терминала должна вывести «postgres@ сервер ». Если это так, запустите следующую команду, которая создаст базу данных:
Это создаст базу даных под названием mydb (если в команду не были внесены изменения). Конечно, базу данных можно назвать как угодно. Теперь создайте пользователя базы данных с помощью следующей команды:
На данном этапе появятся 6 извещений. Первое запрашивает имя нового пользователя (выберите любое удобное имя). Следующие два извещения запросят установить и подтвердить пароль для нового пользователя. В последних трех извещениях нужно просто ввести «n» и нажать Enter. Это гарантирует, что новый пользователь имеет доступ только к тем файлам, к которым ему даете доступ вы. Теперь активируйте интерфейс командной строки PostgreSQL:
В завершение откройте новому пользователю доступ к базе данных, запустив команду:
GRANT ALL PRIVILEGES ON DATABASE mydb TO имя_пользователя ;
Итак, база данных PostgreSQL и пользователь, имеющий доступ к этой БД, созданы. Теперь нужно установить Django и настроить его, чтобы он использовал эту базу данных.
8: Создание проекта Django
На данном этапе необходим тестовый проект Django, который покажет, все ли работает должным образом. Перейдите из текущего каталога в каталог virtualenv (в данном случае это /opt/myenv):
Теперь убедитесь в том, что виртуальная среда активна. Для этого можно запустить следующую команду:
Теперь, когда виртуальная среда активна, запустите следующую команду, которая создаст новый проект Django:
django-admin.py startproject myproject
В каталоге виртуальной среды должен появиться новый каталог по имени myproject. Именно в нем хранятся файлы нового проекта Django.
Чтобы Django имел возможность взаимодействовать с базой данных, нужно установить бекэнд PostgreSQL. Убедитесь, что виртуальная среда активна, и запустите команду:
pip install psycopg2
Перейдите в каталог myproject, а затем в его подкаталог с таким же именем:
В текстовом редакторе откройте файл settings.py:
Найдите настройки БД и отредактируйте их следующим образом:
DATABASES = <
‘default’: <
‘ENGINE’: ‘django.db.backends.postgresql_psycopg2’, # Add ‘postgresql_psycopg2’, ‘mysql’, ‘sqlite3’ or ‘oracle’.
‘NAME’: ‘mydb’, # Or path to database file if using sqlite3.
# The following settings are not used with sqlite3:
‘USER’: ‘myuser’,
‘PASSWORD’: ‘password’,
‘HOST’: ‘localhost’, # Empty for localhost through domain sockets or ‘127.0.0.1’ for localhost through TCP.
‘PORT’: », # Set to empty string for default.
>
>
Сохраните изменения и закройте файл. Теперь поднимитесь на каталог выше, в главный каталог проекта Django (/opt/myenv/myproject).
Если виртуальная среда не была активирована, активируйте ее.
Активировав virtualenv, запустите следующую команду, чтобы Django мог добавить начальные конфигурации и другие таблицы в базу данных:
python manage.py syncdb
Выведенный результат покажет список установленных таблиц, а затем спросит, нужно ли создать суперпользователя (не является обязательным и зависит от того, что будет использоваться: система аутентификации Джанго или Django admin).
9: Настройка Gunicorn
Настройка Gunicorn сильно зависит от потребностей приложения, потому данное руководство содержит лишь краткое описание процесса запуска Gunicorn и некоторые его общие настройки.
Для начала нужно рассмотреть запуск сервера Gunicorn с настройками по умолчанию. Для этого используйте команду:
Не забудьте заменить фразу «домен_или_ip» своим доменным или IP-адресом VPS. Теперь откройте веб-браузер и посетите домен_или_ip.com:8001. Должен появиться экран приветствия Django.
Если внимательно посмотреть на выведенный предыдущей командой результат, можно заметить, что запущен только один процесс Gunicorn. Но что делать, если нужно запустить широкомасштабное приложение на большом сервере? Все, что нужно – это немного изменить команду:
Как видите, теперь было загружено 3 процесса. Изменяя значение –workers, можно запустить любое количество процессов.
Поскольку команда, запускающая Gunicorn, была выполнена как root, Gunicorn сейчас запущен как root. Чтобы изменить это, нужно снова немного отредактировать команду:
Чтобы установить больше параметров Gunicorn, нужно внести их в конфигурационный файл, который можно вызвать при запуске Gunicorn. Это сделает команды Gunicorn более короткими и удобными для чтения/редактирования. Перейдите в каталог виртуальной среды:
Откройте конфигурационный файл с помощью текстового редактора (в приведенном ниже примере используется nano):
sudo nano gunicorn_config.py
Внесите следующий блок кода:
command = ‘/opt/myenv/bin/gunicorn’
pythonpath = ‘/opt/myenv/myproject’
bind = ‘127.0.0.1:8001’
workers = 3
user = nobody
Сохраните и закройте файл. Данные опции выполняют следующее: устанавливают путь к исполнительным файлам gunicorn, домен и порт для соединения с Gunicorn,вносят каталог проекта в путь Python, определяют количество процессов gunicorn и пользователя, с помощью которого будет работать Gunicorn.
Теперь для запуска сервера понадобится более длинная команда. Введите в командную строку следующее:
Как можно заметить, в данной команде был использован флаг –с. Он указывает gunicorn на существующий конфигурационный файл, который нужно использовать (задается после флага). Наконец, нужно передать ссылку на файл WSGI точечной нотации Python, чтобы указать Gunicorn, где находится файл WSGI.
Запуская Gunicorn подобным образом, нужно либо включить Gunicorn в отдельной screen-сессии, либо перевести процесс в фоновый режим, нажав ctrl + z, затем bg и enter сразу после запуска команды Gunicorn. Это переведет процесс в фоновый режим, что означает, что процесс будет работать даже после завершения текущей сессии. Также из-за этого возникает небольшая проблема – необходимость запускать или перезапускать Gunicorn вручную после перезагрузки или сбоя VPS. Чтобы решить эту проблему, многие используют демон supervisord для управления Gunicorn.
Конечно, это далеко не исчерпывающий список опций конфигураций для Gunicorn. Пожалуйста, прочитайте документацию Gunicorn, которую можно найти по ссылке gunicorn.org, чтобы получить больше информации по данной теме.
10: Настройка NGINX
Итак, для начала нужно запустить NGINX:
sudo service nginx start
Поскольку NGINX будет обслуживать статические файлы, теперь нужно определить, где именно эти файлы будут храниться. Откройте файл settings.py проекта Django и отредактируйте строку STATIC_ROOT следующим образом:
Конечно, данные файлы можно расположить где угодно; но для поддержания чистоты рекомендуется разместить их вне папки проекта Django, но внутри каталога виртуальной среды.
Указав местонахождение статических файлов, можно переходить к настройке NGINX для обработки этих файлов. Откройте новый конфигурационный файл NGINX с помощью следующей команды (в случае необходимости замените «nano» другим редактором):
sudo nano /etc/nginx/sites-available/myproject
Конечно, файл можно назвать как угодно, но в целом таким файлам принято давать название, связанное с сайтом. Внесите в файл следующее:
Сохраните изменения и закройте файл. Приведенный выше блок кода говорит NGINX обслуживать все, что запрашивается на домен_или_ip.com/static/ из статического каталога проекта Django. Все запрашиваемое на домен_или_ip.com, будет проксировано на локальный хост, порт 8001 (на котором запущен Gunicorn). Без этого IP-адресом каждого запроса будет 127.0.0.1, а именем хоста будет имя хоста данного VPS.
Теперь нужно установить символьную ссылку, указывающую на данный конфигурационный файл, в каталог /etc/nginx/sites-enabled. Таким образом NGINX определяет, активен ли сайт. Перейдите в каталог /etc/nginx/sites-enabled:
В данном каталоге запустите:
Это создаст необходимую символьную ссылку, что укажет NGINX на новый конфигурационный файл сайта.
Кроме того, нужно удалить блок nginx по умолчанию:
Теперь нужно перезапустить NGINX, чтобы внесенные изменения вступили в силу. Для этого запустите:
sudo service nginx restart
Готово! Теперь Django установлен и работает с PostgreSQL, веб-приложение доступно в сети, NGINX обрабатывает статические файлы, а Gunicorn используется как сервер приложения. Задать вопросы и получить ценные советы по данной теме можно в комментариях к статье.
Настройка Django с Postgres, Nginx и Gunicorn в Ubuntu 18.04
Published on January 7, 2020
Введение
Django — это мощная веб-система, помогающая создать приложение или сайт Python с нуля. Django включает упрощенный сервер разработки для локального тестирования кода, однако для серьезных производственных задач требуется более защищенный и мощный веб-сервер.
В этом руководстве мы покажем, как установить и настроить определенные компоненты Ubuntu 18.04 для поддержки и обслуживания приложений Django. Вначале мы создадим базу данных PostgreSQL вместо того, чтобы использовать базу данных по умолчанию SQLite. Мы настроим сервер приложений Gunicorn для взаимодействия с нашими приложениями. Затем мы настроим Nginx для работы в качестве обратного прокси-сервера Gunicorn, что даст нам доступ к функциям безопасности и повышения производительности для обслуживания наших приложений.
Предварительные требования и цели
Для прохождения этого обучающего модуля вам потребуется новый экземпляр сервера Ubuntu 18.04 с базовым брандмауэром и пользователем с привилегиями sudo и без привилегий root. Чтобы узнать, как настроить такой сервер, воспользуйтесь нашим модулем Руководство по начальной настройке сервера.
Мы будем устанавливать Django в виртуальной среде. Установка Django в отдельную среду проекта позволит отдельно обрабатывать проекты и их требования.
Когда база данных будет работать, мы выполним установку и настройку сервера приложений Gunicorn. Он послужит интерфейсом нашего приложения и будет обеспечивать преобразование запросов клиентов по протоколу HTTP в вызовы Python, которые наше приложение сможет обрабатывать. Затем мы настроим Nginx в качестве обратного прокси-сервера для Gunicorn, чтобы воспользоваться высокоэффективными механизмами обработки соединений и удобными функциями безопасности.
Установка пакетов из хранилищ Ubuntu
Если вы используете Django с Python 3, введите:
Версия Django 1.11 — последняя версия Django с поддержкой Python 2. Если вы создаете новый проект, мы настоятельно рекомендуем использовать Python 3. Если вам необходимо использовать Python 2, введите:
Создание базы данных и пользователя PostgreSQL
Вначале мы создадим базу данных и пользователя базы данных для нашего приложения Django.
По умолчанию Postgres использует для локальных соединений схему аутентификации «peer authentication». Это означает, что если имя пользователя операционной системы совпадает с действительным именем пользователя Postgres, этот пользователь может войти без дополнительной аутентификации.
Выполните вход в интерактивный сеанс Postgres, введя следующую команду:
Вы увидите диалог PostgreSQL, где можно будет задать наши требования.
Вначале создайте базу данных для своего проекта:
Примечание. Каждое выражение Postgres должно заканчиваться точкой с запятой. Если с вашей командой возникнут проблемы, проверьте это.
Затем создайте пользователя базы данных для нашего проекта. Обязательно выберите безопасный пароль:
Затем мы изменим несколько параметров подключения для только что созданного нами пользователя. Это ускорит работу базы данных, поскольку теперь при каждом подключении не нужно будет запрашивать и устанавливать корректные значения.
Теперь мы предоставим созданному пользователю доступ для администрирования новой базы данных:
Завершив настройку, закройте диалог PostgreSQL с помощью следующей команды:
Теперь настройка Postgres завершена, и Django может подключаться к базе данных и управлять своей информацией в базе данных.
Создание виртуальной среды Python для вашего проекта
Мы создали базу данных, и теперь можем перейти к остальным требованиям нашего проекта. Для удобства управления мы установим наши требования Python в виртуальной среде.
Если вы используете Python 3, обновите pip и установите пакет с помощью следующей команды:
Если вы используете Python 2, обновите pip и установите пакет с помощью следующей команды:
После установки virtualenv мы можем начать формирование нашего проекта. Создайте каталог для файлов нашего проекта и перейдите в этот каталог:
Создайте в каталоге проекта виртуальную среду Python с помощью следующей команды:
Прежде чем установить требования Python для нашего проекта, необходимо активировать виртуальную среду. Для этого можно использовать следующую команду:
Командная строка изменится, показывая, что теперь вы работаете в виртуальной среде Python. Она будет выглядеть примерно следующим образом: ( myprojectenv ) user @ host :
После запуска виртуальной среды установите Django, Gunicorn и адаптер psycopg2 PostgreSQL с помощью локального экземпляра pip :
Теперь у вас должно быть установлено все программное обеспечение, необходимое для запуска проекта Django.
Создание и настройка нового проекта Django
Установив компоненты Python, мы можем создать реальные файлы проекта Django.
Создание проекта Django
Поскольку у нас уже есть каталог проекта, мы укажем Django установить файлы в него. В этом каталоге будет создан каталог второго уровня с фактическим кодом (это нормально) и размещен скрипт управления. Здесь мы явно определяем каталог, а не даем Django принимать решения относительно текущего каталога:
Сейчас каталог вашего проекта (в нашем случае
/ myprojectdir ) должен содержать следующее:
/myprojectdir/manage.py : скрипт управления проектами Django.
/myprojectdir/myprojectenv/ : виртуальный каталог, которы мы создали до этого.
Изменение настроек проекта
Прежде всего, необходимо изменить настройки созданных файлов проекта. Откройте файл настроек в текстовом редакторе:
В квадратных скобках перечислите IP-адреса или доменные имена, связанные с вашим сервером Django. Каждый элемент должен быть указан в кавычках, отдельные записи должны быть разделены запятой. Если вы хотите включить в запрос весь домен и любые субдомены, добавьте точку перед началом записи. В следующем фрагменте кода для демонстрации в строках комментариев приведено несколько примеров:
Примечание. Обязательно используйте localhost как одну из опций, поскольку мы будем использовать локальный экземпляр Nginx как прокси-сервер.
Затем перейдите в конец файла и добавьте параметр, указывающий, где следует разместить статичные файлы. Это необходимо, чтобы Nginx мог обрабатывать запросы для этих элементов. Следующая строка указывает Django, что они помещаются в каталог static в базовом каталоге проекта:
Сохраните файл и закройте его после завершения.
Завершение начальной настройки проекта
Теперь мы можем перенести начальную схему базы данных для нашей базы данных PostgreSQL, используя скрипт управления:
Создайте административного пользователя проекта с помощью следующей команды:
Вам нужно будет выбрать имя пользователя, указать адрес электронной почты, а затем задать и подтвердить пароль.
Мы можем собрать весь статичный контент в заданном каталоге с помощью следующей команды:
Данную операцию нужно будет подтвердить. Статичные файлы будут помещены в каталог static в каталоге вашего проекта.
Если вы следовали указаниям модуля по начальной настройке сервера, ваш сервер должен защищать брандмауэр UFW. Чтобы протестировать сервер разработки, необходимо разрешить доступ к порту, который мы будем использовать.
Создайте исключение для порта 8000 с помощью следующей команды:
Теперь вы можете протестировать ваш проект, запустив сервер разработки Django с помощью следующей команды:
Откройте в браузере доменное имя или IP-адрес вашего сервера с суффиксом :8000 :
Вы увидите страницу индекса Django по умолчанию:
Если вы добавите /admin в конце URL в панели адреса, вам будет предложено ввести имя пользователя и пароль администратора, созданные с помощью команды createsuperuser :
После аутентификации вы получите доступ к интерфейсу администрирования Django по умолчанию:
Завершив изучение, нажмите CTRL+C в окне терминала, чтобы завершить работу сервера разработки.
Тестирование способности Gunicorn обслуживать проект
Перед выходом из виртуальной среды нужно протестировать способность Gunicorn обслуживать приложение. Для этого нам нужно войти в каталог нашего проекта и использовать gunicorn для загрузки модуля WSGI проекта:
Gunicorn будет запущен на том же интерфейсе, на котором работал сервер разработки Django. Теперь вы можете вернуться и снова протестировать приложение.
Примечание. В интерфейсе администратора не будут применяться в стили, поскольку Gunicorn неизвестно, как находить требуемый статичный контент CSS.
После завершения тестирования нажмите CTRL+C в окне терминала, чтобы остановить работу Gunicorn.
Мы завершили настройку нашего приложения Django. Теперь мы можем выйти из виртуальной среды с помощью следующей команды:
Индикатор виртуальной среды будет убран из командной строки.
Создание файлов сокета и служебных файлов systemd для Gunicorn
Мы убедились, что Gunicorn может взаимодействовать с нашим приложением Django, но теперь нам нужно реализовать более надежный способ запуска и остановки сервера приложений. Для этого мы создадим служебные файлы и файлы сокета systemd.
Сокет Gunicorn создается при загрузке и прослушивает подключения. При подключении systemd автоматически запускает процесс Gunicorn для обработки подключения.
Создайте и откройте файл сокета systemd для Gunicorn с привилегиями sudo :
Сохраните файл и закройте его после завершения.
Теперь служебный файл systemd готов. Сохраните и закройте его.
Теперь мы можем запустить и активировать сокет Gunicorn. Файл сокета /run/gunicorn.sock будет создан сейчас и будет создаваться при загрузке. При подключении к этому сокету systemd автоматически запустит gunicorn.service для его обработки:
Успешность операции можно подтвердить, проверив файл сокета.
Проверка файла сокета Gunicorn
Проверьте состояние процесса, чтобы узнать, удалось ли его запустить:
Затем проверьте наличие файла gunicorn.sock в каталоге /run :
Еще раз проверьте файл /etc/systemd/system/gunicorn.socket и устраните любые обнаруженные проблемы, прежде чем продолжить.
Тестирование активации сокета
Чтобы протестировать механизм активации сокета, установим соединение с сокетом через curl с помощью следующей команды:
Выводимые данные приложения должны отобразиться в терминале в формате HTML. Это показывает, что Gunicorn запущен и может обслуживать ваше приложение Django. Вы можете убедиться, что служба Gunicorn работает, с помощью следующей команды:
Если результат вывода curl или systemctl status указывают на наличие проблемы, поищите в журналах более подробные данные:
Обязательно устраните вышеперечисленные проблемы, прежде чем продолжить.
Настройка Nginx как прокси для Gunicorn
Мы настроили Gunicorn, и теперь нам нужно настроить Nginx для передачи трафика в процесс.
Для начала нужно создать и открыть новый серверный блок в каталоге Nginx sites-available :
Откройте внутри него новый серверный блок. Вначале мы укажем, что этот блок должен прослушивать обычный порт 80, и что он должен отвечать на доменное имя или IP-адрес нашего сервера:
Затем мы укажем Nginx игнорировать любые проблемы при поиске favicon. Также мы укажем, где можно найти статичные ресурсы, собранные нами в каталоге
Сохраните файл и закройте его после завершения. Теперь мы можем активировать файл, привязав его к каталогу sites-enabled :
Протестируйте конфигурацию Nginx на ошибки синтаксиса:
Если ошибок не будет найдено, перезапустите Nginx с помощью следующей команды:
Нам нужна возможность открыть брандмауэр для обычного трафика через порт 80. Поскольку нам больше не потребуется доступ к серверу разработки, мы можем удалить правило и открыть порт 8000:
Теперь у вас должна быть возможность перейти к домену или IP-адресу вашего сервера для просмотра вашего приложения.
Примечание. После настройки Nginx необходимо защитить трафик на сервер с помощью SSL/TLS. Это важно, поскольку в противном случае вся информация, включая пароли, будет отправляться через сеть в простом текстовом формате.
Если у вас имеется доменное имя, проще всего будет использовать Let’s Encrypt для получения сертификата SSL для защиты вашего трафика. Следуйте указаниям этого руководства, чтобы настроить Let’s Encrypt с Nginx в Ubuntu 18.04. Следуйте процедуре, используя серверный блок Nginx, созданный нами в этом обучающем модуле.
Если у вас нет доменного имени, вы можете защитить свой сайт для тестирования и обучения с помощью сертификата SSL с собственной подписью. Следуйте процедуре, используя серверный блок Nginx, созданный нами в этом обучающем модуле.
Диагностика и устранение неисправностей Nginx и Gunicorn
Если на последнем шаге не будет показано ваше приложение, вам нужно будет провести диагностику и устранение неисправностей установки.
Nginx показывает страницу по умолчанию, а не приложение Django
Параметр server_name в серверном блоке вашего проекта должен быть более конкретным, чем содержащийся в серверном блоке, выбираемом по умолчанию.
Nginx выводит ошибку 502 Bad Gateway вместо приложения Django
Ошибка 502 означает, что Nginx не может выступать в качестве прокси для запроса. Ошибка 502 может сигнализировать о разнообразных проблемах конфигурации, поэтому для диагностики и устранения неисправности потребуется больше информации.
В первую очередь эту информацию следует искать в журналах ошибок Nginx. Обычно это указывает, какие условия вызвали проблемы во время прокси-обработки. Изучите журналы ошибок Nginx с помощью следующей команды:
Теперь выполните в браузере еще один запрос, чтобы получить свежее сообщение об ошибке (попробуйте обновить страницу). В журнал будет записано свежее сообщение об ошибке. Если вы изучите его, это поможет идентифицировать проблему.
Возможно вы увидите сообщение следующего вида:
connect() to unix:/run/gunicorn.sock failed (2: No such file or directory)
connect() to unix:/run/gunicorn.sock failed (13: Permission denied)
Команда выведет права доступа всех компонентов каталога. Изучив права доступа (первый столбец), владельца (второй столбец) и группового владельца (третий столбец), мы можем определить, какой тип доступа разрешен для файла сокета.
Если для любого из каталогов, ведущих к сокету, отсутствуют глобальные разрешения на чтение и исполнение, Nginx не сможет получить доступ к сокету без включения таких разрешений или без передачи группового владения группе, в которую входит Nginx.
Django выводит ошибку: «could not connect to server: Connection refused»
При попытке доступа к частям приложения через браузер Django может вывести сообщение следующего вида:
Это означает, что Django не может подключиться к базе данных Postgres. Убедиться в нормальной работе экземпляра Postgres с помощью следующей команды:
Если он работает некорректно, вы можете запустить его и включить автоматический запуск при загрузке (если эта настройка еще не задана) с помощью следующей команды:
Если проблемы не исчезнут, проверьте правильность настроек базы данных, заданных в файле
Дополнительная диагностика и устранение неисправностей
В случае обнаружения дополнительных проблем журналы могут помочь в поиске первопричин. Проверяйте их по очереди и ищите сообщения, указывающие на проблемные места.
Следующие журналы могут быть полезными:
При обновлении конфигурации или приложения вам может понадобиться перезапустить процессы для адаптации к изменениям.
Если вы обновите свое приложение Django, вы можете перезапустить процесс Gunicorn для адаптации к изменениям с помощью следующей команды:
Если вы измените файл сокета или служебные файлы Gunicorn, перезагрузите демона и перезапустите процесс с помощью следующей команды:
Если вы измените конфигурацию серверного блока Nginx, протестируйте конфигурацию и Nginx с помощью следующей команды:
Эти команды помогают адаптироваться к изменениям в случае изменения конфигурации.
Заключение
В этом руководстве мы создали и настроили проект Django в его собственной виртуальной среде. Мы настроили Gunicorn для трансляции запросов клиентов, чтобы Django мог их обрабатывать. Затем мы настроили Nginx в качестве обратного прокси-сервера для обработки клиентских соединений и вывода проектов, соответствующих запросам клиентов.
Django упрощает создание проектов и приложений, предоставляя множество стандартных элементов и позволяя сосредоточиться на уникальных. Используя описанную в этой статье процедуру, вы сможете легко обслуживать создаваемые приложения на одном сервере.