Установка Django на сервер Nginx
Установка Django на сервер Nginx
Установка Django на сервер Nginx и запуск с помощью uwsgi довольно простая, хотя в первый раз может показаться, что для настройки необходимо много манипуляций, но настроек даже меньше, чем при установке Wordpress на Nginx. Для полноты картины, я сразу опишу процесс установки React.js вместе с Django в одну рабочую директорию.
Проблемы с настройкой могут быть, если у вас сервер с такими правами, что вы можете настраивать абсолютно любые права, и при неверной настройке прав у вас могут быть проблемы, особенно при установке пакетов Python с помощью pip.
Например, если у вас при установке пакетов через pip идут такие сообщения:
В этом случае попробуйте такую команду
Если и после у вас пакеты не устанавливаются, то у вас надо настроить нормальные права для пользователя.
Если все нормально, то начинаем установку. Сначала ставим следующие пакеты:
Далее нам надо создать каталог, где будет наш проект. Логичнее всего создать этот каталог в папке /var/www/ там обычно располагают все сайты на сервере, но иногда встречается, что Django стоит в папке /home/nameuser/ , а также, если вы устанавливали готовую сборку от хостинга, то Django может лежать в /usr/share/django.
Создаем папку для проекта в папке, которую я назвал по имени домена привязанного к серверу.
Затем переходим в созданную папку
Чтобы проверить, действительно ли мы в нужной папке, вводим команду
После этого создаем виртуальное окружение, в которое будем ставить необходимые пакеты и сам Django
Можем посмотреть, что в папке с проектом появилась папка.
Активируем виртуальное окружение, чтобы устанавливать пакеты python и выполнять различные команды Django.
Теперь можно устанавливать пакеты Python, и начнем с самого Django. Не забывайте писать pip3 и python3, если работаете на сервере, так как на сервере Linux всегда есть еще и Python 2, который сработает на pip и python (не всегда, но лучше делать команды так, чтобы потом не возникло ошибок).
Далее нам необходимо установить некоторые библиотеки для работы с базами данных. Я приведу пример для PosttgreSQL и MySQL.
Для MySQL
Далее создадим проект. Это просто папка, ее название можете придумать любое.
Настроим базу PostgreSQL
Чтобы выйти
Настроим базу MySQL
Далее настраиваем в файле settings.py соединение с нужной вам базой данных. Потом производим команду миграции.
Основные настройки сделаны, теперь остается настроить статические файлы и то, чтобы Django работал постоянно, а не только пока мы в консоли запустили команду python3 manage.py runserver 0.0.0.0:8000
Чтобы настроить работу сайта на сервере Nginx, надо понимать, что в конфиге Nginx есть директива server_name, в которую пишут или имя домена или IP-адрес, далее директива root - сюда пишут путь до папки с сайтом, в нашем случае до папки с проектом django, а также директива listen - чтобы прописать, какой порт слушать. Если пропишем 80 порт, то при заходе по IP или имени домена мы сразу попадем на наш сайт, а если пропишем другой порт, то к IP-адресу или имени домена придется добавлять этот порт (name-domain:8000). Так как я настраиваю Django, а потом React в одной папке, то порты у нас будут разные. Django отрабатывая за бэкенд может сидеть на любом порту, а приложение React можно повесить на 80 порт.
Сейчас у меня сделана настройка так, что при заходе на мой домен feil.pro мы попадаем на обычную тестовую страничку:
На сервере эта страничка лежит в папке /var/www/html
Кстати переадресация на HTTPS у меня не настроена, как настраивать - покажу потом.
Конфигурационный файл NGINX /etc/nginx/nginx.conf - это файл, который отвечает за глобальные настройки. Если на сервере будет несколько сайтов или каких-то микросервисов, то под каждый лучше иметь свой файл с настройками. Индивидуальный конфиг под проект лежит в папке /etc/nginx/sites-available/default - это дефолтный файл, из него можно копировать настройки в свой или создавать свои, если базовые настройки не нужны. На скриншоте показан этот файл и рядом находится /etc/nginx/sites-enabled/default - это ссылка на файл /etc/nginx/sites-available/default и соответственно, если вы создаете свой файл с настройками и называете своим именем, то необходимо сделать ссылку на этот файл, так как основной конфиг ngnix.conf инклудит себе все ссылки из папки /sites-enabled/.
Мои текущие настройки в файле default следующие
Создадим новый файл с настройками.
Этой командой можно создать новый файл и скопировать в него текущие настройки из default
Этой командой можно создать пустой файл настроек. В этом случае открывается редактор vim, в котором мы пишем базовые настройки, а уже потом сохраняем этот файл.
Я просто скопирую готовые настройки в новый файл.
На скриншоте видно, что файл создан в папке sites-available.
В самом созданном файле присутствуют настройки из default.
Теперь нужно создать ссылку на файл, чтобы эта ссылка была в папке sites-enabled и инклудилась в основной конфиг Nginx.
Команда на создание ссылки
На скриншоте видно, что в папке sites-enabled появилась ссылка на файл с таким же именем, как и сам файл
После этого в файле default необходимо изменить настройки, так как default ведет на домен feil.pro с обычным index.html в папке /var/www/html/. Я показывал это на скриншоте выше. Меняем настройки следующим образом (на скриншоте ниже).
Далее, открываем для работы порты, в данном случае пока открываем 8001(для default) и 8000(для django). То как открыть порты, у меня описано в этой статье.
Чтобы изменения вступили в силу, необходимо выполнить команду
После этого смотрим на результат
Однако, default настройки могут конфликтовать с нашим файлом djproject, тем более, если зайдем в файл nginx.conf, то там есть строка include /etc/nginx/modules-enabled/default.*;
Поэтому, лучше удалить файл default, а в глобальном файле nginx.conf изменить строку таким образом /etc/nginx/modules-enabled/*.*;, чтобы иклудить все ссылки.
Теперь можно проверить, как у нас работает Django на домене feil.pro. Для этого открываем сначала порт 8000 с помощью UFW, далее заходим в папку, где у нас установлен проект django и активируем виртуальное окружение.
После этого запускаем django сервер командой python manage.py runserver. Но так как мы находимся не в той папке, где лежит manage.py, то нам надо писать команду python name_django/manage.py runserver или же перейти в эту папку с файлом manage.py.
И если теперь перейдем по адресу домена и добавим к домену порт 8000, то увидим результат. Однако, как только закроем терминал, то django сервер перестанет работать, поэтому нам надо настроить теперь uwsgi, чтобы Django работал постоянно.
- 687