Развёртывание локального приложения Django на VPS
Debian, Python, Ubuntu | Комментировать запись
Для выполнения данного руководства нужен предварительно настроенный сервер (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: Debian 7, Django, Python, Ubuntu, virtualenv