Поиск по сайту:

Как установить и настроить Django с Postgres, Nginx и Gunicorn


Предпосылки

В этом руководстве предполагается, что вы уже настроили свой дроплет (VPS) с Debian 7 или аналогичным дистрибутивом Linux (например, Ubuntu). Если вы еще этого не сделали, следуйте инструкциям по настройке дроплета здесь.

Для удобства я разбил этот урок на две части. Первая часть (шаги 1-6) посвящена только установке. Если вы более продвинутый пользователь Django, которому просто нужна помощь в установке вещей, вы можете остановиться на шаге 6. Если у вас уже все установлено и вы просто хотите знать, как все настроить, перейдите к шагу 7. Если вы хотите нужна помощь от начала до конца, затем просто выполните шаги по порядку, и у вас не должно возникнуть проблем. Давайте начнем!

Шаг первый: обновите пакеты

Прежде чем что-либо делать, нам нужно убедиться, что все пакеты, установленные на нашем VPS, обновлены. Для этого подключитесь к желаемому VPS через SSH и выполните следующие команды:

обновление sudo apt-get

обновление sudo apt-get

Первая команда загружает все обновления для пакетов, управляемых через apt-get. Вторая команда устанавливает загруженные обновления. После выполнения приведенных выше команд, если есть обновления для установки, вам, вероятно, будет предложено указать, хотите ли вы установить обновления. Если это произойдет, просто введите «y», а затем нажмите «Enter», когда будет предложено.

Шаг второй: установите и создайте Virtualenv

Установить virtualenv очень просто. Просто запустите команду ниже:

sudo apt-get install python-virtualenv

Вот и все! Теперь давайте создадим нашу виртуальную среду, чтобы мы могли установить в нее Django и другие пакеты Python:

sudo virtualenv /opt/myenv

Обратите внимание, что новый каталог \myenv был создан в каталоге \/opt. Здесь будет жить наша виртуальная среда. Обязательно замените \/opt/myenv на путь к тому месту, где вы хотите установить свой virtualenv. Обычно я помещаю свои env в /opt, но это строго предпочтение. Некоторые люди создают каталог с именем \webapps в корне VPS. Выберите любой метод, который имеет для вас наибольшее значение.

Шаг третий: установите Джанго

Теперь нам нужно активировать нашу виртуальную среду, чтобы при установке пакетов Python они устанавливались в нашу виртуальную среду. Вот как вы активируете свой virtualenv:

источник /opt/myenv/bin/activate

Теперь вы должны увидеть, что \(myenv) добавлено к началу приглашения вашего терминала. Это поможет вам узнать, когда ваша виртуальная среда активна и какая виртуальная среда активна, если у вас есть несколько виртуальных виртуальных машин на VPS.

Теперь, когда ваш virtualenv активен, мы можем установить Django. Для этого мы будем использовать pip, менеджер пакетов Python, очень похожий на easy_install. Вот команда, которую вы будете запускать:

pip установить джанго

Теперь у вас установлен Django в вашей виртуальной среде! Теперь давайте запустим наш сервер базы данных.

Шаг четвертый: установите PostgreSQL

Большинство пользователей Django предпочитают использовать PostgreSQL в качестве сервера базы данных. Он гораздо более надежен, чем MySQL, и Django ORM работает с PostgreSQL гораздо лучше, чем с MySQL, MSSQL или другими.

Поскольку нам не нужна активная виртуальная среда для этой части, выполните следующую команду для деактивации:

деактивировать

Это всегда будет деактивировать любую виртуальную среду, активную в данный момент. Теперь нам нужно установить зависимости для PostgreSQL для работы с Django с помощью этой команды:

sudo apt-get установить libpq-dev python-dev

Теперь, когда вы это сделали, установите PostgreSQL следующим образом:

sudo apt-get установить postgresql postgresql-contrib

Теперь PostgreSQL установлен на вашем компьютере и готов к работе.

Шаг пятый: установите NGINX

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

sudo apt-get установить nginx

Имейте в виду, что вам все еще нужно запустить NGINX, но мы рассмотрим это, когда начнем настраивать наш VPS.

Шаг шестой: установите Gunicorn

Gunicorn — очень мощный HTTP-сервер Python WSGI. Поскольку это пакет Python, нам нужно сначала активировать наш virtualenv, чтобы установить его. Вот как мы это делаем:

источник /opt/myenv/bin/activate

Убедитесь, что вы видите добавленный \myenv в начале приглашения вашего терминала. Теперь, когда ваш virtualenv активен, выполните эту команду:

pip install gunicorn

Теперь Gunicorn установлен в вашем виртуальном окружении.

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

Шаг седьмой: настройка PostgreSQL

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

sudo su — postgres

В приглашении вашего терминала теперь должно быть написано \postgres@yourserver. Если это так, запустите эту команду, чтобы создать базу данных:

создалb mydb

Теперь ваша база данных создана и называется «mydb», если вы не изменили команду. Вы можете назвать свою базу данных как хотите. Теперь создайте пользователя базы данных с помощью следующей команды:

создать пользователя -P

Теперь вас встретит серия из 6 подсказок. Первый запросит у вас имя нового пользователя. Используйте любое имя, которое вы хотите. Следующие два запроса предназначены для ввода пароля и подтверждения пароля для нового пользователя. Для последних 3 подсказок просто введите «n» и нажмите «Enter». Это просто гарантирует, что ваши новые пользователи будут иметь доступ только к тому, к чему вы им предоставляете доступ, и ничего больше. Теперь активируйте интерфейс командной строки PostgreSQL следующим образом:

psql

Наконец, предоставьте этому новому пользователю доступ к вашей новой базе данных с помощью этой команды:

ДАТЬ ВСЕ ПРАВА НА БАЗУ ДАННЫХ mydb моему пользователю;

Теперь у вас есть база данных PostgreSQL и пользователь для доступа к этой базе данных. Теперь мы можем установить Django и настроить его для использования нашей новой базы данных.

Шаг восьмой: создайте проект Django

Чтобы двигаться дальше, нам нужен проект Django для тестирования. Это позволит нам увидеть, работает ли то, что мы делаем, или нет. Измените каталоги на каталог вашего virtualenv (в моем случае /opt/myenv) следующим образом:

cd /opt/myenv

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

источник /opt/myenv/bin/activate

Теперь, когда ваш virtualenv активен, выполните следующую команду, чтобы запустить новый проект Django:

django-admin.py startproject мой проект

Вы должны увидеть новый каталог с именем \myproject внутри вашего каталога virtualenv. Здесь живут наши новые файлы проекта Django.

Чтобы Django мог общаться с нашей базой данных, нам нужно установить серверную часть для PostgreSQL. Убедитесь, что ваш virtualenv активен, и выполните следующую команду, чтобы сделать это:

pip установить psycopg2

Перейдите в новый каталог \myproject, а затем в его подкаталог, который также называется \myproject, например:

cd /opt/myenv/myproject/myproject

Отредактируйте файл settings.py в любом редакторе:

nano 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).

cd /opt/myenv/myproject

Активируйте свой virtualenv, если вы еще этого не сделали, с помощью следующей команды:

источник /opt/myenv/bin/activate

Когда ваша виртуальная среда активна, выполните следующую команду, чтобы Django мог добавить свою начальную конфигурацию и другие таблицы в вашу базу данных:

python manage.py syncdb

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

Шаг девятый: настройте Gunicorn

Конфигурация Gunicorn очень специфична для ваших приложений. Я кратко расскажу о запуске Gunicorn с некоторыми другими настройками.

Сначала давайте просто рассмотрим запуск Gunicorn с настройками по умолчанию. Вот команда для запуска Gunicorn по умолчанию:

gunicorn_django --bind yourdomainorip.com:8001

Обязательно замените yourdomainorip.com:8001 и посмотрите, что получится. Вы должны увидеть экран приветствия Django.

Однако, если вы внимательно посмотрите на вывод приведенной выше команды, вы заметите, что загружен только один рабочий процесс Gunicorn. Что делать, если вы запускаете масштабное приложение на большом VPS? Не бойся! Все, что нам нужно сделать, это изменить команду примерно так:

gunicorn_django --workers=3 --bind yourdomainorip.com:8001

Теперь вы заметите, что были загружены 3 воркера вместо 1 воркера. Вы можете изменить этот номер на любой, который соответствует вашим потребностям.

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

gunicorn_django --workers=3 --user=nobody --bind yourdomainorip.com:8001

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

Вы можете разместить файл конфигурации для gunicorn где угодно. Для простоты мы поместим его в наш каталог virtualenv. Перейдите в каталог вашего virtualenv следующим образом:

cd /opt/myenv

Теперь откройте файл конфигурации в предпочитаемом вами редакторе (в приведенном ниже примере используется 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, добавляют каталог вашего проекта к вашему пути Python, устанавливают домен и порт для привязки Gunicorn, устанавливают количество рабочих процессов gunicorn и задают пользователя, от имени которого будет работать Gunicorn.

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

/opt/myenv/bin/gunicorn -c /opt/myenv/gunicorn_config.py myproject.wsgi

Вы заметите, что в приведенной выше команде мы передаем флаг \-c. Это сообщает gunicorn, что у нас есть файл конфигурации, который мы хотим использовать, который мы передаем сразу после флага \-c. Наконец, мы передаем ссылку на наш файл WSGI в точечной нотации Python, чтобы Gunicorn знал, где находится наш файл WSGI.

Запуск Gunicorn таким образом требует, чтобы вы либо запускали Gunicorn в его собственном сеансе экрана (если вы знакомы с использованием экрана), либо вы запускали процесс в фоновом режиме, нажимая «ctrl+z», а затем набирая «bg» и \» введите все сразу после запуска команды Gunicorn. Это запустит процесс в фоновом режиме, поэтому он продолжит работу даже после закрытия вашего текущего сеанса. Это также создает проблему необходимости запуска или перезапуска Gunicorn вручную, если ваш VPS перезагрузится или произойдет сбой. по какой-то причине.Чтобы решить эту проблему, большинство людей используют supervisord для управления Gunicorn и запуска/перезапуска его по мере необходимости.Установка и настройка supervisord была описана в другой статье, которую можно найти здесь.

Наконец, это ни в коем случае не исчерпывающий список параметров конфигурации Gunicorn. Пожалуйста, прочтите документацию Gunicorn, которую можно найти на сайте gunicorn.org, чтобы узнать больше по этой теме.

Шаг десятый: настройте NGINX

Прежде чем мы слишком увлечемся, давайте сначала запустим NGINX следующим образом:

запуск службы sudo nginx

Поскольку мы настраиваем NGINX только для обработки статических файлов, нам нужно сначала решить, где будут храниться наши статические файлы. Откройте файл settings.py для вашего проекта Django и отредактируйте строку STATIC_ROOT, чтобы она выглядела следующим образом:

	STATIC_ROOT = "/opt/myenv/static/"

Этот путь может быть где угодно. Но для чистоты я обычно помещаю его за пределы папки моего проекта Django, но внутри моего каталога virtualenv.

Теперь, когда вы определили, где будут находиться ваши статические файлы, давайте настроим NGINX для обработки этих файлов. Откройте новый файл конфигурации NGINX с помощью следующей команды (вы можете заменить «nano» на свой любимый редактор):

sudo nano /etc/nginx/sites-available/myproject

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

	server {
        server_name yourdomainorip.com;

        access_log off;

		location /static/ {
        	alias /opt/myenv/static/;
    	}

    	location / {
                proxy_pass http://127.0.0.1:8001;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Real-IP $remote_addr;
                add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
        }
	}

Сохраните и закройте файл. Приведенная выше конфигурация настроила NGINX для обслуживания всего, что запрошено на yourdomainorip.com, будет прокси-сервером на localhost через порт 8001, где мы сказали запускать Gunicorn. Другие строки гарантируют, что имя хоста и IP-адрес запроса будут переданы Gunicorn. Без этого IP-адрес каждого запроса становится 127.0.0.1, а имя хоста — это просто имя хоста вашего VPS.

Теперь нам нужно настроить символическую ссылку в каталоге /etc/nginx/sites-enabled, которая указывает на этот файл конфигурации. Вот как NGINX узнает, что этот сайт активен. Измените каталоги на /etc/nginx/sites-enabled следующим образом:

cd /etc/nginx/sites-enabled

Оказавшись там, запустите эту команду:

sudo ln -s ../sites-available/myproject

Это создаст символическую ссылку, которая нам нужна, чтобы NGINX знал, что нужно учитывать наш новый файл конфигурации для нашего сайта.

Кроме того, удалите блок сервера nginx по умолчанию:

\\sudo rm по умолчанию

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

перезагрузка службы sudo nginx

Вот и все! Теперь у вас установлен Django и он работает с PostgreSQL, а ваше приложение доступно в Интернете благодаря NGINX, обслуживающему статический контент, и Gunicorn, выступающему в качестве вашего сервера приложений. Если у вас есть какие-либо вопросы или дополнительные советы, обязательно оставьте их в разделе комментариев.