ZANIN блог
Контакты
Крути вниз
Фильтр по:
//Post title

Установка Django на сервер Nginx

17 Окт 2020Категория : Django

Установка Django на сервер Nginx

Установка Django на сервер Nginx и запуск с помощью uwsgi довольно простая, хотя в первый раз может показаться, что для настройки необходимо много манипуляций, но настроек даже меньше, чем при установке Wordpress на Nginx. Для полноты картины, я сразу опишу процесс установки React.js вместе с Django в одну рабочую директорию.

Проблемы с настройкой могут быть, если у вас сервер с такими правами, что вы можете настраивать абсолютно любые права, и при неверной настройке прав у вас могут быть проблемы, особенно при установке пакетов Python с помощью pip.

Например, если у вас при установке пакетов через pip идут такие сообщения:

Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed out. (read timeout=15)",)': /simple/openssl-python/

В этом случае попробуйте такую команду

ip link set eth0 mtu 1450

Если и после у вас пакеты не устанавливаются, то у вас надо настроить нормальные права для пользователя.

Если все нормально, то начинаем установку. Сначала ставим следующие пакеты:

sudo apt install uwsgi uwsgi-plugin-python3

Установка Django на сервер Nginx

sudo apt-get install python3-venv

Установка Django на сервер Nginx

Далее нам надо создать каталог, где будет наш проект. Логичнее всего создать этот каталог в папке /var/www/ там обычно располагают все сайты на сервере, но иногда встречается, что Django стоит в папке /home/nameuser/ , а также, если вы устанавливали готовую сборку от хостинга, то Django может лежать в /usr/share/django.

Создаем папку для проекта в папке, которую я назвал по имени домена привязанного к серверу.

mkdir /var/www/feil.pro/djproject

Затем переходим в созданную папку

cd /var/www/feil.pro/djproject

Чтобы проверить, действительно ли мы в нужной папке, вводим команду

pwd

Установка Django на сервер Nginx

После этого создаем виртуальное окружение, в которое будем ставить необходимые пакеты и сам Django

/usr/bin/python3 -m venv djangoenv

Можем посмотреть, что в папке с проектом появилась папка.

Установка Django на сервер Nginx

Активируем виртуальное окружение, чтобы устанавливать пакеты python и выполнять различные команды Django.

source djangoenv/bin/activate

Установка Django на сервер Nginx

Теперь можно устанавливать пакеты Python, и начнем с самого Django. Не забывайте писать pip3 и python3, если работаете на сервере, так как на сервере Linux всегда есть еще и Python 2, который сработает на pip и python (не всегда, но лучше делать команды так, чтобы потом не возникло ошибок).

pip3 install --upgrade pip && pip install django

Установка Django на сервер Nginx

Далее нам необходимо установить некоторые библиотеки для работы с базами данных. Я приведу пример для PosttgreSQL и MySQL.

sudo apt-get update

sudo apt-get install python3-dev libpq-dev postgresql postgresql-contrib

pip3 install psycopg2-binary

pip3 install psycopg2

Установка Django на сервер Nginx

Для MySQL

sudo apt-get install mysql-server mysql-client

Установка Django на сервер Nginx

sudo apt-get install libmysqlclient-dev build-essential

pip3 install mysqlclient

Установка Django на сервер Nginx

Далее создадим проект. Это просто папка, ее название можете придумать любое.

django-admin.py startproject name_django

Установка Django на сервер Nginx

Настроим базу PostgreSQL

sudo -u postgres psql

CREATE DATABASE psql_django;

CREATE USER psql_django WITH PASSWORD '******';

ALTER ROLE psql_django SET client_encoding TO 'utf8';

ALTER ROLE psql_django SET default_transaction_isolation TO 'read committed';

ALTER ROLE psql_django SET timezone TO 'UTC';

GRANT ALL PRIVILEGES ON DATABASE psql_django TO psql_django;

Установка Django на сервер Nginx

Чтобы выйти

\q

Установка Django на сервер Nginx

Настроим базу MySQL

mysql -u root -p

CREATE DATABASE mysql_django;

CREATE USER 'user_django'@'%' IDENTIFIED BY '*****_xrt';

GRANT ALL PRIVILEGES ON mysql_django.* TO 'user_django'@'%';

exit

Далее настраиваем в файле settings.py соединение с нужной вам базой данных. Потом производим команду миграции.

python3 name_django/manage.py makemigrations

python3 name_django/manage.py migrate

Основные настройки сделаны, теперь остается настроить статические файлы и то, чтобы 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 мы попадаем на обычную тестовую страничку:

Установка Django на сервер Nginx

На сервере эта страничка лежит в папке /var/www/html

Установка Django на сервер Nginx

Кстати переадресация на HTTPS у меня не настроена, как настраивать - покажу потом.

Установка Django на сервер Nginx

Конфигурационный файл NGINX /etc/nginx/nginx.conf - это файл, который отвечает за глобальные настройки. Если на сервере будет несколько сайтов или каких-то микросервисов, то под каждый лучше иметь свой файл с настройками. Индивидуальный конфиг под проект лежит в папке /etc/nginx/sites-available/default - это дефолтный файл, из него можно копировать настройки в свой или создавать свои, если базовые настройки не нужны. На скриншоте показан этот файл и рядом находится /etc/nginx/sites-enabled/default - это ссылка на файл /etc/nginx/sites-available/default и соответственно, если вы создаете свой файл с настройками и называете своим именем, то необходимо сделать ссылку на этот файл, так как основной конфиг ngnix.conf инклудит себе все ссылки из папки /sites-enabled/.

include /etc/nginx/sites-enabled/*;

Установка Django на сервер Nginx

Мои текущие настройки в файле default следующие

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    # SSL configuration
    #
    listen 443 ssl http2;
    # listen [::]:443 ssl default_server;
    if ($host != $server_name) {
    return 444;
}
    root /var/www/html;
    index index.html index.php index.htm index.nginx-debian.html;
    server_name feil.pro;
location ^~ /.well-known/acme-challenge/ {
    default_type "text/plain";
    root /var/www/letsencrypt;
}
location = /.well-known/acme-challenge/ {
    return 404;
}
location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
}
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
    deny all;
}
    ssl_certificate /etc/letsencrypt/live/feil.pro/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/feil.pro/privkey.pem;
    ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off;
    ssl_dhparam /etc/ssl/private/dhparam.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    #add_header Strict-Transport-Security "max-age=63072000" always;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/feil.pro/chain.pem;
    resolver 8.8.8.8;
    access_log /var/log/nginx/example.org_ssl_access.log;
    error_log /var/log/nginx/example.org_ssl_error.log; }

Создадим новый файл с настройками.

Этой командой можно создать новый файл и скопировать в него текущие настройки из default

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/djproject

Этой командой можно создать пустой файл настроек. В этом случае открывается редактор vim, в котором мы пишем базовые настройки, а уже потом сохраняем этот файл.

sudo vi /etc/nginx/sites-available/djproject

Я просто скопирую готовые настройки в новый файл.

Установка Django на сервер Nginx

На скриншоте видно, что файл создан в папке sites-available.

Установка Django на сервер Nginx

В самом созданном файле присутствуют настройки из default.

Установка Django на сервер Nginx

Теперь нужно создать ссылку на файл, чтобы эта ссылка была в папке sites-enabled и инклудилась в основной конфиг Nginx.

Команда на создание ссылки

sudo ln -s /etc/nginx/sites-available/djproject /etc/nginx/sites-enabled/

На скриншоте видно, что в папке sites-enabled появилась ссылка на файл с таким же именем, как и сам файл

Установка Django на сервер Nginx

После этого в файле default необходимо изменить настройки, так как default ведет на домен feil.pro с обычным index.html в папке /var/www/html/. Я показывал это на скриншоте выше. Меняем настройки следующим образом (на скриншоте ниже).

Установка Django на сервер Nginx

Далее, открываем для работы порты, в данном случае пока открываем 8001(для default) и 8000(для django). То как открыть порты, у меня описано в этой статье.

Чтобы изменения вступили в силу, необходимо выполнить команду

sudo nginx -s reload

После этого смотрим на результат

Установка Django на сервер Nginx

Однако, default настройки могут конфликтовать с нашим файлом djproject, тем более, если зайдем в файл nginx.conf, то там есть строка include /etc/nginx/modules-enabled/default.*;

Поэтому, лучше удалить файл default, а в глобальном файле nginx.conf изменить строку таким образом /etc/nginx/modules-enabled/*.*;, чтобы иклудить все ссылки.

Установка Django на сервер Nginx

Теперь можно проверить, как у нас работает Django на домене feil.pro. Для этого открываем сначала порт 8000 с помощью UFW, далее заходим в папку, где у нас установлен проект django и активируем виртуальное окружение.

Установка Django на сервер Nginx

Установка Django на сервер Nginx

Установка Django на сервер Nginx

После этого запускаем django сервер командой python manage.py runserver. Но так как мы находимся не в той папке, где лежит manage.py, то нам надо писать команду python name_django/manage.py runserver или же перейти в эту папку с файлом manage.py.

Установка Django на сервер Nginx

И если теперь перейдем по адресу домена и добавим к домену порт 8000, то увидим результат. Однако, как только закроем терминал, то django сервер перестанет работать, поэтому нам надо настроить теперь uwsgi, чтобы Django работал постоянно.

Установка Django на сервер Nginx

  • 687

01. Об авторе

Александр Занин

Занимаюсь разработкой на Django,
а также бэкенд разработкой на PHP (Laravel, Slim).

Find on :

02. Свежие статьи

03. Категории

Готовы заказать проект?

© ZANIN 2019 / All rights reserved.
Контакты
Close