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

Как развернуть локальное приложение Django на VPS


Предпосылки

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

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

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

sudo apt-get update
sudo apt-get upgrade

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

Шаг второй: настройте Virtualenv

Если вы выполнили предварительные условия, это уже должно быть настроено, и вы можете пропустить этот шаг.

Теперь нам нужно настроить наш virtualenv, где будут жить файлы нашего проекта и пакеты Python. Если вы не используете virtualenv, просто создайте каталог, в котором будет жить ваш проект Django, и перейдите к третьему шагу.

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

virtualenv /opt/myproject

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

source /opt/myproject/bin/activate
pip install django

Теперь мы готовы создать базу данных для нашего проекта!

Шаг третий: создайте базу данных

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

Чтобы создать базу данных с PostgreSQL, начните с выполнения следующей команды:

sudo su - postgres

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

createdb mydb

Теперь создайте пользователя базы данных с помощью следующей команды:

createuser -P

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

psql

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

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

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

Шаг четвертый: настройте свой VPS

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

Для NGINX выполните следующую команду, чтобы создать и отредактировать файл конфигурации веб-сервера вашего сайта, обязательно заменив \myproject в конце команды на имя вашего проекта:

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 с помощью команды ниже, и вы должны быть установлены:

sudo service nginx restart

При перезапуске вы можете увидеть следующую ошибку:

server_names_hash, you should increase server_names_hash_bucket_size: 32

Вы можете решить эту проблему, отредактировав файл /etc/nginx/nginx.conf.

Откройте файл и раскомментируйте следующую строку:

server_names_hash_bucket_size 64;

Теперь давайте загрузим файлы нашего проекта в нашу каплю!

Шаг пятый: переместите локальный проект Django в дроплет

Здесь у нас есть несколько вариантов: FTP, SFTP, SCP, Git, SVN и т. д. Мы рассмотрим использование Git для передачи ваших локальных файлов проекта на ваш виртуальный частный сервер.

Найдите каталог, в котором вы настроили свой virtualenv или где вы хотите, чтобы ваш проект жил. Перейдите в этот каталог с помощью следующей команды:

cd /opt/myproject

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

mkdir myproject

Может показаться излишним наличие двух каталогов с одинаковыми именами; однако это делает так, что ваше имя virtualenv и имя проекта совпадают.

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

cd myproject

Если ваш проект уже находится в репозитории Git, просто убедитесь, что весь код зафиксирован и отправлен. Вы можете проверить, так ли это, выполнив следующую команду локально на вашем компьютере в терминале (для Mac) или в командной строке (для ПК):

git status

Если вы не видите никаких файлов на выходе, значит, все в порядке. Теперь подключитесь к дроплету по SSH и установите Git с помощью следующей команды:

sudo apt-get install git

Не забудьте ответить «да» на все запросы, введя «y» и нажав «Enter». После установки Git используйте его для загрузки файлов проекта в каталог проекта с помощью следующей команды:

git clone https://webaddressforyourrepo.com/path/to/repo .

Если вы используете Github или Bitbucket для хостинга Git, вы можете использовать кнопку клонирования, чтобы получить эту команду. Обязательно добавьте \.” в конце Если мы этого не сделаем, Git создаст каталог с именем репо внутри каталога вашего проекта, чего вы не хотите.

Если вы не используете Git, используйте FTP или другой протокол передачи для передачи файлов в каталог проекта, созданный на шагах выше.

Теперь осталось только настроить сервер приложений!

Шаг шестой: установка и настройка сервера приложений

Если вы выполнили предварительные условия, это уже должно быть настроено, и вы можете пропустить этот шаг.

Теперь нам нужно установить наш сервер приложений и убедиться, что он прослушивает порт 8001 для запросов к нашему приложению Django. В этом примере мы будем использовать Gunicorn. Чтобы установить Gunicorn, сначала активируйте виртуальную среду:

source /opt/myproject/bin/activate

Когда ваш virtualenv активен, выполните следующую команду, чтобы установить Gunicorn:

pip install gunicorn

Теперь, когда Gunicorn установлен, привяжите запросы для вашего домена или ip к порту 8001:

gunicorn_django --bind yourdomainorip.com:8001

Теперь вы можете нажать «ctrl+z», а затем ввести «bg», чтобы запустить процесс в фоновом режиме (если хотите). Более продвинутую настройку и настройку Gunicorn можно найти в девятом шаге этого руководства.

Теперь вы готовы к последнему шагу!

Шаг седьмой: настройте свое приложение

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

sudo nano /opt/myproject/myproject/settings.py

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

Открыв файл настроек, измените настройки DEBUG на False:

DEBUG = False

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

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.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': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}

Теперь отредактируйте настройки ваших статических файлов:

STATIC_ROOT = '/opt/myproject/static/'

STATIC_URL = '/static/'

Сохраните и закройте файл. Теперь все, что нам нужно сделать, это собрать наши статические файлы. Перейдите в каталог, где находится ваш скрипт «manage.py», и выполните следующую команду:

python manage.py collectstatic

Эта команда соберет все статические файлы в каталог, который мы указали в нашем файле settings.py выше.

Вот и все! Теперь ваше приложение развернуто в рабочей среде и готово к работе.