Развёртывание локального приложения Django на VPS

Для выполнения данного руководства нужен предварительно настроенный сервер (Debian 7 или Ubuntu).

Кроме того, необходимо подготовить сервер к размещению приложений Django, настроив сервер баз данных, веб-сервер и виртуальную среду (virtualenv). Об этом можно прочесть здесь.

1: Обновление пакетов

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

sudo apt-get update
sudo apt-get upgrade

Первая команда загрузит все доступные обновления для пакетов, управляемых при помощи apt-get. Вторая команда установит обновления. После запуска этих команд система попросит подтвердить установку загруженных пакетов; для этого нажмите y и enter.

2: Настройка virtualenv

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

Виртуальное окружение, или virtualenv, необходимо для хранения индивидуальных пакетов Python и файлов проекта.

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

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

virtualenv /opt/myproject

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

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

После этого нужно создать базу данных для проекта.

3: Создание БД

Примечание: В данном руководстве используется PostgreSQL. Если вы используете другую СУБД, обратитесь к её документации.

Чтобы создать БД, запустите PostgreSQL:

sudo su - postgres

Командная строка терминала покажет:

postgres@yourserver

Запустите следующую команду, заменив условное имя БД своим именем:

createdb mydb

Затем создайте пользователя для этой БД:

createuser -P

После этого программа запросит некоторые данные: имя нового пользователя, пароль и его подтверждение и т.п. На последние три вопроса нужно ответить n и нажать enter; это ограничит права пользователя. Откройте интерфейс командной строки PostgreSQL:

psql

Затем передайте новому пользователю права на БД:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

Теперь БД готова.

4: Настройка VPS

Создайте новый конфигурационный файл для сайта.

Примечание: В руководстве используется веб-сервер 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/static/ проекта Django. Любой запрос к yourdomainorip.com будет передан на локальный хост через порт 8001 (где запущен Gunicorn или другой сервер приложений). Остальные настройки передают имя хоста и IP запроса серверу Gunicorn; без этих строк IP-адрес запросов будет 127.0.0.1, а именем хоста будет имя VPS.

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

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;

Теперь можно переместить файлы проекта на сервер.

5: Перемещение локального проекта Django на сервер

Здесь есть несколько вариантов: FTP, SFTP, SCP, Git, SVN; рассмотрим использование Git для перемещения локального проекта на виртуальный выделенный сервер.

Найдите каталог, в котором находится virtualenv (или каталог, в котором размещён проект) и откройте его:

cd /opt/myproject

В нём создайте каталог для хранения файлов проекта:

mkdir myproject

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

Перейдите в новый каталог:

cd myproject

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

git status

Если на экране не появилось файлов, значит, все файлы отправлены. Подключитесь к серверу и установите Git.

sudo apt-get install git

На все вопросы программы нажмите yes и enter. После установки Git переместите файлы проекта в созданный ранее каталог:

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

При использовании Github или Bitbucket для размещения Git используйте кнопку clone.

Примечание: Эта команда обязательно должна заканчиваться символом точки. В противном случае Git создаст каталог с репозиторием в каталоге проекта.

Вместо Git для передачи файлов в каталог проекта можно использовать FTP или другой протокол обмена.

6: Установка и настройка сервера приложений

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

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

source /opt/myproject/bin/activate

А затем введите:

pip install gunicorn

После завершения установки направьте запросы к домену или ip на порт 8001:

gunicorn_django --bind yourdomainorip.com:8001

Затем нажмите ctrl + z and и введите bg, чтобы перевести процесс в фоновый режим (это опционально).

Примечание: Подробнее о настройке Gunicorn можно прочитать здесь.

7: Настройка приложения

Теперь нужно настроить производство приложения. Для этого нужно отредактировать файл settings.py приложения Django.

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

Примечание: Путь к этому файлу может отличаться; в случае необходимости отредактируйте путь.

В этом файле установите следующее значение для опции DEBUG:

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.

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

Tags: , , , ,

Добавить комментарий