Настройка nginx centos 7 django

Обновлено: 04.07.2024

Django - это бесплатная высокоуровневая веб-инфраструктура Python с открытым исходным кодом, предназначенная для помощи разработчикам в создании безопасных, масштабируемых и поддерживаемых веб-приложений.

Существуют разные способы установки Django, в зависимости от ваших потребностей. Он может быть установлен в масштабе всей системы или в виртуальной среде Python с использованием pip. Пакеты Django также включены в репозитории CentOS и могут быть установлены с помощью yum менеджера пакетов, но они устарели.

Основное назначение виртуальных сред Python - создание изолированной среды для различных проектов Python. Таким образом, вы можете иметь несколько разных сред Django на одном компьютере и устанавливать определенную версию модуля для каждого проекта, не беспокоясь о том, что это повлияет на другие ваши установки Django. Если вы устанавливаете Django в глобальную среду, вы можете установить только одну версию Django на свой компьютер.

Установка Django на CentOS 7

В следующих разделах приведены пошаговые инструкции по установке Django в виртуальной среде Python на CentOS 7.

1. Установка Python 3

Мы будем устанавливать Python 3.6 из репозиториев Software Collections (SCL).

CentOS 7 поставляется с Python 2.7.5, который является важной частью базовой системы CentOS. SCL позволит вам установить более новые версии python 3.x вместе со стандартным python v2.7.5, чтобы системные инструменты, такие как yum, продолжали работать должным образом.

Для начала включите SCL, установив файл выпуска CentOS SCL, который входит в репозиторий CentOS extras:

Как только репозиторий будет включен, установите Python 3.6 с помощью следующей команды:

После установки Python 3.6 мы готовы создать виртуальную среду для нашего приложения Django.

2. Создание виртуальной среды

Начиная с Python 3.6, рекомендуемый способ создания виртуальной среды - использовать venv модуль.

Перейдите в каталог, где вы хотели бы хранить виртуальные среды Python 3. Это может быть ваш домашний каталог или любой другой каталог, где у вашего пользователя есть права на чтение и запись.

Создайте новый каталог для вашего приложения Django и перейдите в него:

Чтобы получить доступ к Python 3.6, вам нужно запустить новый экземпляр оболочки, используя scl инструмент:

Выполните следующую команду, чтобы создать новую виртуальную среду:

Приведенная выше команда создает каталог с именем venv , который содержит копию двоичного файла Python, менеджера пакетов Pip , стандартной библиотеки Python и других вспомогательных файлов. Вы можете использовать любое имя для виртуальной среды.

Чтобы начать использовать эту виртуальную среду, вам нужно активировать ее, запустив activate скрипт:

После активации каталог bin виртуальной среды будет добавлен в начале $PATH переменной. Кроме того, приглашение вашей оболочки изменится и будет отображать имя виртуальной среды, которую вы используете в данный момент. В нашем случае это так venv .

3. Установка Django

Теперь, когда виртуальная среда активирована, вы можете использовать менеджер пакетов Python pip для установки Django:


В виртуальной среде вы можете использовать команду pip вместо pip3 и python вместо python3 .

Для проверки установки используйте следующую команду, которая выведет версию Django:

На момент написания этой статьи последняя официальная версия Django была 2.1.2.

Ваша версия Django может отличаться от версии, показанной здесь.

4. Создание проекта Django

Для создания нового проекта Django с именем mydjangoapp используйте django-admin утилиту командной строки:

Команда выше создаст mydjangoapp каталог в вашем текущем каталоге.

Внутри этого каталога вы найдете основной сценарий для управления именованными проектами manage.py и другой каталог, включая конфигурацию базы данных, а также настройки Django и приложения.

Давайте перенесем базу данных и создадим администратора.

Начните с перехода в mydjangoapp каталог:

По умолчанию Django использует базу данных SQLite. Для производственных приложений вы можете использовать PostgreSQL , MariaDB , Oracle или MySQL Database.

Выполните следующую команду для переноса базы данных:

Вывод будет выглядеть примерно так:

После переноса базы данных создайте пользователя с правами администратора, чтобы вы могли использовать интерфейс администратора Django:

Команда запросит у вас имя пользователя, адрес электронной почты и пароль для вашего администратора.

5. Тестирование сервера разработки

Запустите веб-сервер разработки с помощью manage.py сценария, за которым следует runserver опция:

Вы увидите следующий вывод:


Если вы установили Django на виртуальную машину и хотите получить доступ к серверу разработки Django, вам нужно отредактировать settings.py файл и добавить IP-адрес сервера в ALLOWED_HOSTS список.





Введите имя пользователя и пароль, и вы будете перенаправлены на страницу администрирования Django:



Чтобы остановить разработку сервера, наберите CTRL-C в своем терминале.

6. Деактивация виртуальной среды

Как только вы закончите свою работу, деактивируйте среду, набрав, deactivate и вы вернетесь к своей обычной оболочке.

Вывод

Вы узнали, как создать виртуальную среду Python и установить Django на вашем компьютере с CentOS 7. Чтобы создать дополнительные среды разработки Django, повторите шаги, описанные в этом руководстве.

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

Инструкция не содержит настроек безопасности. Она была создана на базе англоязычных инструкций и боли, много боли (ссылки в конце статьи). Инструкция актуальна для настроек: centOS 7, Django 1.9.2 и Python 3.4.3

Ремарка: благодарю Филиппа Торчинского за предоставление продакт-версии PyCharm для создания проекта на Django.

Что у нас есть

Мы имеем готовый проект на Django в среде разработки PyCharm для локального компьютера. Т.е. settings.py имеет базу данных sqlite3, битые пути к статите и пустой ALLOWED_HOSTS. Это нормально.

Мы начинаем

Этап 1

— Ваш домен — DNS-Сервера. Ставим настройки согласно скриншоту:


— Ваш домен — Управление зоной — добавить запись «A» Например: (Ip-меняем на ваш)


Готово, мы привязали доменное имя к хостингу. На обновление потребуется какое-то время.

Этап 2

Для работы с CentOS 7 нам понадобится программа: PuTTY. Скачиваем запускам и приступаем к работе.

Первичная настройка хостига.

Для начала нам нужно будет добавить еще одного пользователя и назначить для него права на изменения конфигов. Это делается для того, чтобы вы по ошибке через root-пользователя не сломали всю систему.

1) подключаемся через PuTTY через root-пользователя и набираем следующие команды:

— добавляем юзера: adduser habrauser

— добавляем юзеру пароль: passwd habrauser

— добавляем пользователю habrauser права: gpasswd -a habrauser wheel

— отключаемся от сеанса под root-пользователем: exit

После этого мы сможем запускать команды пользователем habrauser от имени администратора через приставку sudo

2) Подключаемся через PuTTY под пользователем habrauser и набираем следующие команды:

— Ставим тайм-зону серверу: sudo timedatectl set-timezone Europe/Moscow

— Подтверждаем: sudo timedatectl

— Ставим синхронизатор времени: sudo yum install ntp

— Ставим автозапуск синхронизатора:
sudo systemctl start ntpd
sudo systemctl enable ntpd

Этап 3

— Ставим необходимые дополнительные пакеты для centOS 7

sudo yum install epel-release

sudo yum install python-pip python-devel postgresql-server postgresql-devel postgresql-contrib gcc nginx

Теперь мы сможем использовать pip, чтобы ставить необходимые питон пакеты.

— Ставим редактор
sudo yum install nano

Настраиваем PostgreSQL

sudo postgresql-setup initdb

— Запускаем сервис PostgreSQL:

sudo systemctl start postgresql

— Открываем конфигурационный файл:

sudo nano /var/lib/pgsql/data/pg_hba.conf

— Редактируем так, чтобы база работала с авторизированными пользователями.

Чтобы сохранить файл, нам нужно нажать ctrl+O, далее enter и yes. Чтобы выйти нажимаем ctrl+X.

sudo systemctl restart postgresql

sudo systemctl enable postgresql

Создание базы данных PostgreSQL:

— входим в сервис:

sudo su - postgres

-входим в локальный сеанс:

— создаем базу данных habradb:

CREATE DATABASE habradb;

— создаем пользователя баз данных:

CREATE USER user WITH PASSWORD 'password';

— даем пользователю user права на использование базы данных habradb:

GRANT ALL PRIVILEGES ON DATABASE habradb TO user;

— завершаем сеанс работы с базой:

Этап 4

Наш проект рассчитан на использование Python3.4.3, поэтому мы будем ставить в виртуальное окружение именно его.

— ставим Python 3.4.3

sudo yum install python34-devel

— ставим виртуальное окружение:

sudo pip install virtualenv

— создаем в корне системы папку проекта apifolder (укажите такое название, которое у вас используется в самом проекте в PyCharm):

— переходим в данную папку:

-создаем виртуальное окружение djangoen с питоном python 3.4.3

mkvirtualenv -p /usr/bin/python3.4 djangoen

p.s. чтобы правильно указать путь к питону, можно использовать команду which python3.4

— активируем виртуальное окружение и входим в него

— ставим джангу, юникорн и обработчик базы

pip install django gunicorn psycopg2

Этап 5

начинаем создавать наш проект Django:

— Создаем проект Django в текущей папке (имя проекта то же самое, что и имеет мое в PyCharm):

— Копируем наш проект с локальной машины.

  • Подключаемся вашему серверу через SFTP: инструкция
  • Открываем папку home/habrauser/apifolder
  • Открываем ваш проект на локальной машине
  • Обычным перетаскиваем дополняем и заменяем файлы созданного ранее проекта apifolder, вашим проектом c локальной машины (его имя также должно быть apifolder, либо то, что вы задали ранее).

— Открываем файл settings.py и вносим в него изменения

Либо можно изменять его конфиг в IDE, а потом обновить его через SFTP.

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
STATICFILES_DIRS = (
)

— Ставим релевантные пакеты. Например, в моем случае, чтобы проект поддерживал модель ImageFiled, мне нужно было установить Pillow

sudo yum install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel

pip install Pillow

— Проверяем базу данных, делаем миграцию (Статику пока собрать не получится, так как у нас её еще ничего не отдает).

/apifolder
./manage.py makemigrations
./manage.py migrate

Иногда эти команды не работают, и нужно использовать: python manage.py makemigrations
итд

Также можно создать пользователя

— Запускаем проект и проверяем его работу:

./manage.py runserver 0.0.0.0:8000

Сайт будет доступен по адресу: server_domain_or_IP:8000

— чекаем все моменты и делаем отладку. Если на этом этапе не проверить все странички, админку и прочее, то в дальнейшем может появиться много проблем. Чаще всего забываются какие-то мелочи: пакеты, url, локальные конфиги.

Этап 6

— создаем конфиг Юникорна:

sudo nano /etc/systemd/system/gunicorn.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=habrauser
Group=nginx
WorkingDirectory=/home/habrauser/apifolder
ExecStart=/home/habrauser/apifolder/djangoen/bin/gunicorn --workers 3 --bind unix:/home/habrauser/apifolder/apifolder.sock apifolder.wsgi:application

— запускаем юникорн и делаем ему автозапуск:

sudo systemctl start gunicorn
sudo systemctl enable gunicorn

sudo nano /etc/nginx/nginx.conf

sudo nano /etc/nginx/nginx.conf

Вставляем новый конфиг в:

server listen 80 default_server;

location = /favicon.ico < access_log off; log_not_found off; >
location /static/ root /home/habrauser/apifolder;
>

— добавляем nginx юзеру:

sudo usermod -a -G habrauser nginx

chmod 710 /home/habrauser

— проверяем конфиг nginx (должно отдать две успешные строки):

sudo systemctl start nginx

sudo systemctl enable nginx

Этап 7

Основная часть работы сделана, теперь нам нужно собрать статику и перезагрузить машину:

— идем к нашей папке

— ставим в файлике setting.py ALLOWED_HOSTS = ваш домен, и DEBUG = False

Иногда одного раза не хватает (не все начинает работать так, как нужно), поэтому приходится грузить несколько раз.

Примечание: Для производства необходимо искать более безопасный и мощный веб-сервер, так как этот сервер не справится с трафиком в режиме производства.

Данное руководство поможет установить и настроить в CentOS 7 все компоненты, необходимые для поддержки приложения и обработки клиентских запросов. Для этого будет использоваться сервер приложений uWSGI и обратный прокси-сервер Nginx.

Требования

Для выполнения данного руководства нужно предварительно настроить сервер CentOS 7 и создать не-root пользователя с доступом к sudo. Подробные инструкции по начальной настройке сервера и создании пользователей можно найти здесь.

Фреймворк Django в данном руководстве будет установлен в два разных виртуальных окружения Python, что позволит удовлетворить все индивидуальные требования каждого приложения.

Установка и настройка VirtualEnv и VirtualEnvWrapper

Проекты Django будут установлены в индивидуальное виртуальное окружение. Для этого нужно установить инструменты virtualenv (создаёт виртуальную среду Python) и virtualenvwrapper (добавляет несколько полезных функций virtualenv).

Для установки инструментов используйте pip, пакетный менеджер Python. Установить pip можно из репозитория EPEL. Сначала включите EPEL:

sudo yum install epel-release

Теперь можно установить pip:

sudo yum install python-pip

Теперь выполните глобальную установку virtualenv и virtualenvwrapper.

sudo pip install virtualenv virtualenvwrapper

Теперь можно настроить оболочку с помощью сценария virtualenvwrapper. Все виртуальные окружения будут помещены в каталог Env в домашнем каталоге. Чтобы настроить это, используется переменная WORKON_HOME. Добавьте её в сценарий инициализации оболочки.

echo "export WORKON_HOME=

/.bashrc
echo "source /usr/bin/virtualenvwrapper.sh" >>

Чтобы иметь доступ к новым функциям в текущей сессии, выполните команду:

Теперь в домашнем каталоге есть каталог Env, в котором хранятся виртуальные окружения проектов.

Создание проекта Django

Теперь нужно создать два виртуальных окружения и запустить два проекта.

Создание первого проекта Django

Создайте виртуальное окружение с помощью команд, доступных благодаря инструменту virtualenvwrapper.

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

Эта команда создаст виртуальное окружение по имени firstsite, а также установит локальную версию Python и pip, которые можно использовать для создания изолированной среды разработки проекта. Командная строка изменится, указывая, что текущей средой является виртуальная среда Python

В скобках указано имя текущего виртуального окружения. Теперь всё программное обеспечение, загруженное с помощью pip, будет установлено в индивидуальное окружение первого проекта и никак не повлияет на общее состояние системы.

Сначала нужно установить Django:

pip install django

Теперь создайте первый тестовый проект:


django-admin.py startproject firstsite

Эта команда создаст в домашнем каталоге каталог firstsite. В нём хранится сценарий для управления новым проектом и ещё один одноимённый каталог, в котором будет находиться код проекта.

Откройте каталог первого уровня:

Для начала нужно переместить БД, чтобы инициализировать базу данных SQLite для проекта.

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

Теперь в домашнем каталоге есть файл БД по имени db.sqlite3. Создайте администратора.

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

Затем откройте файл настроек проекта:

Теперь нужно создать отдельный каталог для хранения статических файлов сайта. Так Nginx сможет обслуживать их напрямую, а это улучшит производительность. Поместите каталог static в корневом каталоге проекта. Добавьте в конец конфигурационного файла следующую строку:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

Сохраните и закройте файл. Соберите статические файлы в этом каталоге:

В каталоге проекта появится новый каталог static.

Теперь протестируйте проект, временно запустив сервер разработки.

./manage.py runserver 0.0.0.0:8080

Это запустит сервер разработки на порт 8080. В браузере посетите свой домен или IP:

На экране должна появиться такая страница:

It worked!
Congratulations on your first Django-powered page. [. ]

Добавьте в ссылку сегмент /admin, чтобы получить доступ к форме аутентификации администратора. Введите учётные данные администратора, и на экране появится панель управления.

После этого можно остановить сервер разработки. Нажмите CTRL-C в терминале. Теперь можно приступать к разработке второго проекта.

Разработка второго проекта

Второй проект создаётся точно так же, как первый.

Вернитесь в домашний каталог и создайте второе виртуальное окружение. Установите Django.


mkvirtualenv secondsite
pip install django

После этого откроется окружение нового проекта.

Создайте второй проект и откройте его каталог:

django-admin.py startproject secondsite
cd

Инициализируйте базу данных и создайте пользователя с правами администратора:

./manage.py migrate
./manage.py createsuperuser

Откройте файл settings:

Добавьте каталог статических файлов строку:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

Сохраните и закройте файл. Соберите статические файлы в этот каталог.

Запустите сервер разработки:

./manage.py runserver 0.0.0.0:8080

Сайт будет доступен по ссылке:

Ссылка на интерфейс администратора:

Чтобы остановить сервер, нажмите CTRL-C.

Отключение виртуального окружения

Теперь нужно отключить виртуальное окружение, поскольку разработка проектов завершена:

Чтобы вернуться в виртуальное окружение любого из проектов, введите:

workon firstsite
или
workon secondsite

В дальнейшей работе виртуальное окружение не нужно, потому отключите его:

Сервер приложений uWSGI

Теперь нужно настроить uWSGI – сервер приложений, взаимодействующий с приложениями с помощью простого интерфейса WSGI.

Примечание: Больше информации о uWSGI можно найти в этом руководстве.

Установка uWSGI

В данном руководстве нужно установить uWSGI глобально – так будет проще обрабатывать несколько проектов Django.

Установите зависимости сервера:

sudo yum install python-devel gcc

Теперь установите uWSGI.

sudo pip install uwsgi

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

Теперь uWSGI использует виртуальное окружение каталога

Создание конфигурационного файла

Запуск uWSGI из командной строки хорошо подходит для тестирования, но в реальном развёртывании это очень неудобно. Запустите сервер в режиме Emperor mode, что позволяет ведущему процессу управлять отдельными приложениями автоматически. Для этого используются конфигурационные файлы.

Создайте каталог для хранения таких файлов и откройте его:

sudo mkdir -p /etc/uwsgi/sites
cd /etc/uwsgi/sites

Теперь нужно создать конфигурационный файл для каждого проекта. uWSGI может читать конфигурации разных форматов. В данном руководстве используется формат ini.

Создайте файл для первого проекта:

sudo nano firstsite.ini

Добавьте заголовок [uwsgi], под которым нужно поместить все настройки. Добавьте несколько переменных, чтобы сделать файл более универсальным. Сразу после заголовка добавьте переменную project с именем проекта. Переменная uid будет хранить имя пользователя с доступом к sudo. Затем добавьте переменную base, в которой нужно указать путь к домашнему каталогу.

[uwsgi] project = firstsite
username = user
base = /home/%(username)

Теперь нужно настроить uWSGI для поддержки проекта. Измените корневой каталог проекта с помощью опции chdir. Скомбинировать указанный домашний каталог и имя проекта можно с помощью синтаксиса %(переменная). Во время чтения файла это значение будет заменено.

Затем импортируйте callable application из файла wsgi.py в каталоге проекта.

[uwsgi] project = firstsite
username = user
base = /home/%(username)
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application

Создайте главный процесс с 5 рабочими процессами.

[uwsgi] project = firstsite
username = user
base = /home/%(username)
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application
master = true
processes = 5

Также следует изменить права на сокет. Опция vacuum автоматически очистит файл сокета после остановки сервиса.

[uwsgi] project = firstsite
username = user
base = /home/%(username)
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application
master = true
processes = 5
uid = %(username)
socket = /run/uwsgi/%(project).sock
chown-socket = %(username):nginx
chmod-socket = 660
vacuum = true

Настройка первого проекта завершена. Сохраните и закройте файл.

Преимущество переменных в конфигурационных файлах состоит в том, что их можно повторно использовать. Скопируйте файл первого проекта и используйте его в качестве шаблона для настройки второго сайта.

sudo cp /etc/uwsgi/sites/firstsite.ini /etc/uwsgi/sites/secondsite.ini

Откройте скопированный файл:

sudo nano /etc/uwsgi/sites/secondsite.ini

В файле нужно изменить только переменную project.

[uwsgi] project = firstsite
username = user
base = /home/%(username)
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application
master = true
processes = 5
uid = %(username)
socket = /run/uwsgi/%(project).sock
chown-socket = %(username):nginx
chmod-socket = 660
vacuum = true

Сохраните и закройте файл.

Unit-файл для uWSGI

Django-проекты обслуживаются сервером приложений. Теперь нужно автоматизировать этот процесс. Для этого создайте unit-файл.

sudo nano /etc/systemd/system/uwsgi.service

Файл начинается с раздела [Unit], в котором хранятся метаданные и другая информация о сервисе (например, его описание).

[Unit] Description=uWSGI Emperor service

Затем добавьте раздел [Service]. Директива ExecStartPre запускает указанные в ней компоненты. В данном случае она создаст каталог /run/uwsgi, принадлежащий текущему пользователю и группе www-data.

Директива ExecStart запускает сервис, в данном случае uwsgi в режиме Emperor mode. Также нужно добавить компоненты, необходимые для поддержки процесса system. Больше настроек можно найти в документации uWSGI.

[Unit] Description=uWSGI Emperor service
[Service] ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown user:nginx /run/uwsgi'
ExecStart=/usr/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all

Теперь осталось добавить раздел [Install]. Он отвечает за автоматический запуск сервиса. Настройте сервис для работы в многопользовательской системе.

[Unit] Description=uWSGI Emperor service
[Service] ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown user:nginx /run/uwsgi'
ExecStart=/usr/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
[Install] WantedBy=multi-user.target

Сохраните и закройте файл.

Пока что запустить этот сервис невозможно, поскольку он зависит от пользователя www-data. Сервис будет доступен после установки и настройки Nginx.

Nginx как обратный прокси-сервер

Загрузите пакет Nginx из стандартного репозитория системы.

sudo yum install nginx

После установки Nginx отредактируйте главный конфигурационный файл:

sudo nano /etc/nginx/nginx.conf

В нём нужно создать дополнительные блоки server для каждого сайта:

Эти блоки будут хранить настройки сайтов uWSGI.

Сначала нужно указать номер порта и доменное имя сайта.

Укажите местонахождение статических файлов.

Добавьте блок location для обслуживания всех остальных запросов. Добавьте параметры uwsgi из файла /etc/nginx/uwsgi_params и передайте трафик на сокет:

Сохраните виртуальный хост.

Используйте этот код как шаблон для виртуального хоста второго проекта.

Замените все данные о firstsite информацией о secondsite. Измените server_name, указав домен второго проекта. Замените каталог статических файлов и сокет. В результате должно получиться так:

Проверьте ошибки в синтаксисе:

Осталось выполнить всего одну задачу. Дело в том, что Nginx обслуживает файлы напрямую, а потому веб-серверу нужен доступ к соответствующим каталогам. Передайте Nginx право на выполнение в файлов домашнего каталога.

Для этого нужно добавить пользователя Nginx в группу текущего пользователя, а затем дать группе право на выполнение.

sudo usermod -a -G user nginx
chmod 710 /home/user

Теперь запустите Nginx и uWSGI:

sudo systemctl start nginx
sudo systemctl start uwsgi

Теперь оба проекта доступны по доменным именам. Проверьте работу проектов и интерфейсов. Если всё работает должным образом, включите автозапуск сервисов:

sudo systemctl enable nginx
sudo systemctl enable uwsgi

Заключение

Теперь сервер приложений uWSGI обслуживает два приложения Django, которые находятся в индивидуальных виртуальных окружениях.

Развертывание проекта Centos + Nginx + uWSGI + Django

программного обеспечения версия
Nginx 1.16.1
uWSGI 2.0.18
Django 2.2.4
centos 7.6
python 3.7.2

Эта статья расскажет об этой проблеме с трех сторон.

Простая история Интернета


Раньше веб-сервер возвращал только некоторые статические страницы Html. Пользователь отправлял запрос на сервер через браузер. После получения запроса сервер находил соответствующий файл в указанной папке и возвращал его в браузер.


Позже статические страницы больше не могут удовлетворять потребности людей. Люди хотят взаимодействовать с веб-сервером динамически, например, вводя имя пользователя и пароль для входа в систему, хотят знать, сколько посещений посещает определенный веб-сайт и т. Д., Они больше не программисты заранее Этого можно добиться, написав несколько статических страниц и сохранив их на веб-сервере.
Поскольку динамическое взаимодействие включает в себя определенную бизнес-логику, создается программа кода для обработки этой бизнес-логики. После того, как веб-сервер получает запрос от браузера, веб-сервер пересылает запрос на обработку Программа этого запроса после обработки программы возвращает результат веб-серверу, а затем веб-сервер возвращается браузеру.
Например, функция входа в систему. После того, как браузер отправит пароль учетной записи на веб-сервер, веб-сервер пересылает пароль учетной записи в программу обработки, которая проверяет соответствие пароля учетной записи и затем отправляет результат. Отправляем на сервер.

CGI (Common Gateway Interface), программа-скрипт, изначально использовавшаяся для создания динамических страниц для сервера.


С течением времени ограничения CGI постепенно проявляются. Масштабируемость не очень хорошая, и это небезопасно. Он не предоставляет структурированного метода для создания динамического приложения. Старое и новое изменились, и эра веб-приложений, наконец, наступила примерно в 2005 г. Появилось множество фреймворков для веб-приложений, и Django является одной из них. На основе этих фреймворков можно легко создать одно веб-приложение за другим.
Веб-сервер пересылает все полученные запросы веб-приложению и возвращает результат после обработки веб-приложением.
Если веб-сервер хочет взаимодействовать с веб-приложениями, каждый должен соблюдать стандартный протокол, которым является WSGI (интерфейс шлюза веб-сервера) (WSGI определен для языка Python, Другими словами, языком написания веб-приложений является питон). С точки зрения непрофессионала, это как если бы кореец и японец хотят общаться друг с другом, им нужно выучить общий язык китайский, а WSGI должен играть роль китайца.

Различие между uWSGI, WSGI, uwsgi

WSGI: это не сервер, модуль Python, фреймворк, API или какое-либо программное обеспечение. Это просто спецификация, описывающая, как веб-серверы (такие как nginx, uWSGI и т. Д.) Взаимодействуют с веб-приложениями (например, программами, написанными на фреймворках Django и Flask).

uwsgi: Как и WSGI, это протокол связи для сервера uWSGI.

Связь между Nginx, uWSGI и Django


Теперь, когда есть сервер Nginx, зачем вам сервер uWSGI? На самом деле роли двух серверов разные. Nginx оптимизирует количество одновременных подключений и статических данных, а uWSGI в основном оптимизирует обработку динамических данных.

  1. Купите экземпляр ECS в Alibaba Cloud и установите пароль учетной записи root.
  2. Откройте Терминал локального хоста и введите следующую команду для удаленного подключения к ECS.

Затем вручную введите пароль учетной записи root, которую вы установили.
Иногда отображается, что срок действия ключа ssh истек, введите следующую команду и затем повторно подключитесь

  1. Первоначальная система centos должна установить следующие вещи

Установите python3.7.2

Установите uWSGI, Nginx, Django, Virtualenv

  • Установить виртуальную среду
    pip3 install virtualenv
  • Создайте корневой каталог виртуальной среды в корневой папке
    virtualenv venvTest
  • Войдите в виртуальную среду
    source venvTest/bin/activate (Выход и вход деактивировать сразу)
  • Установить uWSGI
    pip3 install uwsgi
  • Установить Nginx
    yum install nginx
    Установить django
    pip3 install django==2.2.4 (Рекомендуется использовать эту версию. Версия django 3.x сообщит об ошибке, если она не соответствует версии базы данных.)

Следующее развертывание будет включать мониторинг портов ECS, и порты, открытые ECS, должны быть сначала настроены в группе безопасности ECS.

Создайте проект django

  1. После входа в виртуальную среду создайте проект django в корневом каталоге
    django-admin startproject DjangoProject
  2. Войдите в папку проекта DjangoProject и создайте приложение
    cd DjangoProject
    django-admin startapp OneApp
  3. Измените файл settings.py DjangoProject
    ALLOWED_HOSTS=['*'] * Указывает, что доступ ко всем IP-адресам сервера разрешен
    INSTALLED_APPS = [. , 'OneApp']
  4. Измените файл urls.py DjangoProject
  5. Создайте файл urls.py в OneApp
  6. Измените файл представлений в OneApp
  7. Войдите в папку проекта, запустите проект
    cd /root/DjangoProject
    python3 manage.py runserver 0.0.0.0:8000
    В браузере локального хоста введите: IP-адрес общедоступной сети ECS: 8000 Если отображается домашняя страница django, это успешно (Обратите внимание на открытый порт 8000 в группе безопасности сети)
    IP общедоступной сети ECS: 8000 / привет IP общедоступной сети ECS: 8000 / calculate? formula = 2 * 7 Оба URL-адреса должны возвращать значения

Настроить файл uwsgi.ini


  1. Создайте папку сценария в проекте DjangoProject на том же уровне и купите ее для хранения файла конфигурации uwsgi.ini.
    cd /root
    mkdir script
    vim uwsgi.ini
  2. Запустите uwsgi
    uwsgi --ini uwsgi.ini
    После успешного запуска в папке сценария будут созданы три файла: uwsgi.sock, uwsgi.pid, uwsgi.log.
    Вы можете использовать ps -ef | grep uwsgi, чтобы проверить, запущен ли uwsgi
    Чтобы закрыть uwsgi, выполните команду в папке сценария
    uwsgi --stop uwsgi.pid

Настроить Nginx


  1. Сменить пользователя Nginx
    vim /etc/nginx/nginx.conf
    Измените на пользователя root; в противном случае произойдет ошибка отказа в разрешении
    может быть в основном
  2. Настройте файл виртуального хоста в папке /etc/nginx/conf.d/
    cd /etc/nginx/conf.d/
    vim hello.conf
  3. При запуске uWSGI запустите nginx
    nginx
    Введите IP-адрес общедоступной сети ECS в браузере, чтобы отобразить тот же контент, что и раньше, и настройка будет успешной.
    закрыть nginx
    nginx -s stop

Настроить ssl-сертификат для доступа к апплету

Справочные статьи и видео:

Интеллектуальная рекомендация

совместный запрос mysql с тремя таблицами (таблица сотрудников, таблица отделов, таблица зарплат)

1. Краткое изложение проблемы: (внизу есть инструкция по созданию таблицы, копирование можно непосредственно практиковать с помощью (mysql)) Найдите отделы, в которых есть хотя бы один сотрудник. Отоб.


[Загрузчик классов обучения JVM] Третий день пользовательского контента, связанного с загрузчиком классов


IP, сеанс и cookie

Читайте также: