Предполагается, что VPS с дистрибутивом Linux (например, Ubuntu) уже установлен.
Для удобства данное руководство разделено на 2 части. Первая часть (разделы 1 – 6) охватывает только установку. Продвинутые пользователи Django, которым необходимы только инструкции по установке остального ПО, могут сразу же переходить к разделу 6. Пользователи, которым необходимы советы по настройке, могут переходить к разделу 7.
- Обновление пакетов
Прежде чем начать установку, необходимо обновить программные пакеты на VPS. Для этого подключитесь к VPS по SSH и запустите следующие команды:sudo apt-get update sudo apt-get upgrade
Первая команда загружает все обновления для пакетов, управляемых командой apt-get. Вторая команда устанавливает загруженные обновления. Если данные команды обнаружат новые доступные версии пакетов, будет выведено извещение, предлагающее указать, нужно ли устанавливать обновления. Нажмите «Y» и клавишу «Enter» при появлении такого извещения.
- Установка и создание Virtualenv.
Установить инструмент virtualenv очень просто. Для этого запустите приведенную ниже команду:
sudo apt-get install python-virtualenv
Теперь нужно создать virtualenv (или виртуальную среду), чтобы разместить и постоянно хранить в ней Django и другие пакеты Python:
sudo virtualenv /opt/myenv
Обратите внимание: в каталоге /opt был создан новый каталог по имени myenv. Согласно данному руководству, в этом каталоге и нужно развернуть виртуальную среду. Чтобы развернуть среду в другом каталоге, не забудьте заменить /opt/myenv путем к Вашему каталогу. Некоторые разработчики создают каталог по имени webapps в корне файловой системы.
- Установка Django.
Теперь нужно активировать virtualenv, чтобы пакеты Python были установлены не для всей системы, а изолированно, внутри среды. Итак, чтобы активировать virtualenv:source /opt/myenv/bin/activate
Теперь можно приступить к установке Django. Для этого используйте pip, менеджер пакетов Python (аналог easy_install). Запустите команду:
pip install django
Django установлен внутри активной virtualenv. Теперь нужно запустить сервер баз данных.
Обратите внимание: имя каталога, содержащего виртуальную среду (myenv) внесено в начало терминальной строки. Это помогает легко определить, активирована ли virtualenv и какая именно среда является текущей (в случае, если на VPS существует несколько virtualenv).
- Установка PostgreSQL.
Большинство пользователей Django предпочитают использовать PostgreSQL в качестве сервера баз данных. Он намного более устойчивый к ошибкам, чем MySQL, кроме того, Django ORM работает с PostgreSQL намного лучше, чем с MySQL, MSSQL и т.п. Поскольку на данном этапе активная virtualenv не нужна, ее необходимо дезактивировать, выполнив команду:deactivate
Данная команда дезактивирует текущую активную виртуальную среду. Теперь необходимо установить зависимости PostgreSQL (для его работы с Django) с помощью следующей команды:
sudo apt-get install libpq-dev python-dev
Установив все необходимые зависимости, установите PostgreSQL:
sudo apt-get install postgresql postgresql-contrib
Теперь PostgreSQL установлен и готов к работе.
- Установка NGINX.
NGINX – это невероятно быстрый и легкий веб-сервер. В данном руководстве он используется для обслуживания статических файлов приложения Django. Чтобы установить NGINX, выполните следующую команду:sudo apt-get install nginx
Обратите внимание: NGINX не запускается автоматически, его нужно будет запустить вручную, не забудьте вернуться к этому перед настройкой VPS.
- Установка Gunicorn.
Gunicorn – это очень мощный HTTP-сервер Python WSGI. Поскольку Gunicorn является пакетом Python, необходимо активировать виртуальную среду, прежде чем его устанавливать. Это делается так:source /opt/myenv/bin/activate
Убедитесь в том, что «myenv» внесен в начало терминальной строки. Активировав виртуальную среду, запустите команду:
pip install gunicorn
Теперь Gunicorn установлен внутри virtualenv.Установка всех необходимых компонентов завершена. Последующие разделы руководства содержат инструкции по настройке установленных серверов и тому, как сделать приложение доступным для других в Интернете.
- Настройка PostgreSQL
Для начала нужно настроить PostgreSQL. Данный сервер понадобится для создания базы данных и пользователя, а также для передачи новому пользователю прав доступа к базе данных. Итак, запустите следующую команду:sudo su - postgres
Сейчас строка терминала должна вывести «[email protected]сервер». Если это так, запустите следующую команду, которая создаст базу данных:
createdb mydb
Это создаст базу даных под названием mydb (если в команду не были внесены изменения). Конечно, базу данных можно назвать как угодно. Теперь создайте пользователя базы данных с помощью следующей команды:
createuser --interactive -P Enter name of role to add: root Enter password for new role: Enter it again: Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) n Shall the new role be allowed to create more new roles? (y/n) n
На данном этапе появятся 6 извещений. Первое запрашивает имя нового пользователя (выберите любое удобное имя). Следующие два извещения запросят установить и подтвердить пароль для нового пользователя. В последних трех извещениях нужно настроить права. Теперь активируйте интерфейс командной строки PostgreSQL:
psql
В завершение откройте новому пользователю доступ к базе данных, выполнив команду:
GRANT ALL PRIVILEGES ON DATABASE mydb TO имя_пользователя;
Итак, база данных PostgreSQL и пользователь, имеющий доступ к этой БД, созданы. Теперь нужно установить Django и настроить его, чтобы он использовал эту базу данных.
- Создание проекта Django.
На данном этапе необходим тестовый проект Django, который покажет, все ли работает должным образом. Перейдите из текущего каталога в каталог virtualenv (в данном случае это /opt/myenv):cd /opt/myenv
Теперь убедитесь в том, что виртуальная среда активна. Для этого можно запустить следующую команду:
source /opt/myenv/bin/activate
Теперь, когда виртуальная среда активна, запустите следующую команду, которая создаст новый проект Django:
django-admin.py startproject myproject
В каталоге виртуальной среды должен появиться новый каталог по имени myproject. Именно в нем хранятся файлы нового проекта Django.Чтобы Django имел возможность взаимодействовать с базой данных, нужно установить бекэнд PostgreSQL. Убедитесь, что виртуальная среда активна, и запустите команду:
pip install psycopg2
Перейдите в каталог myproject, а затем в его подкаталог с таким же именем:
cd /opt/myenv/myproject/myproject
В текстовом редакторе откройте файл settings.py:
nano settings.py
Найдите настройки БД и отредактируйте их следующим образом:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mydb', 'USER': 'myuser', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } }
Сохраните изменения и закройте файл. Теперь поднимитесь на каталог выше, в главный каталог проекта Django (/opt/myenv/myproject).
cd /opt/myenv/myproject
Если виртуальная среда не была активирована, активируйте ее.
source /opt/myenv/bin/activate
Активировав virtualenv, запустите следующую команду, чтобы Django мог добавить начальные конфигурации и другие таблицы в базу данных:
python manage.py migrate
Выведенный результат покажет список установленных таблиц, а затем спросит, нужно ли создать суперпользователя (не является обязательным и зависит от того, что будет использоваться: система аутентификации Джанго или Django admin).
- Настройка Gunicorn.
Настройка Gunicorn сильно зависит от потребностей приложения, потому данное руководство содержит лишь краткое описание процесса запуска Gunicorn и некоторые его общие настройки.Для начала нужно рассмотреть запуск сервера Gunicorn с настройками по умолчанию. Для этого используйте команду:gunicorn myproject.wsgi:application --bind домен_или_ip:8001
Не забудьте заменить фразу «домен_или_ip» своим доменным или IP-адресом VPS. Теперь откройте веб-браузер и посетите домен_или_ip.com:8001. Должен появиться экран приветствия Django.
Обратите внимание: Если Вы укажите IP 0.0.0.0:8001 то данная конфигурация будет универсальной для любого сервера. Какой бы Ip не был на сервере панель будет с него доступна. - Настройка NGINX.
Итак, для начала нужно запустить NGINX:sudo service nginx start
Поскольку NGINX будет обслуживать статические файлы, теперь нужно определить, где именно эти файлы будут храниться. Откройте файл settings.py проекта Django и отредактируйте строку STATIC_ROOT следующим образом:
STATIC_ROOT = "/opt/myenv/static/"
Конечно, данные файлы можно расположить где угодно но для поддержания чистоты рекомендуется разместить их вне папки проекта Django, но внутри каталога виртуальной среды.Указав местонахождение статических файлов, можно переходить к настройке NGINX для обработки этих файлов. Откройте новый конфигурационный файл NGINX с помощью следующей команды (в случае необходимости замените «nano» другим редактором):
sudo nano /etc/nginx/sites-available/myproject
Конечно, файл можно назвать как угодно, но в целом таким файлам принято давать название, связанное с сайтом. Внесите в файл следующее:
server { server_name домен_или_ip.com; access_log off; location /static/ { alias /opt/myenv/lib/python2.7/site-packages/django/contrib/admin/; } 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 обслуживать все, что запрашивается на домен_или_ip.com/static/ из статического каталога проекта Django. Все запрашиваемое на домен_или_ip.com, будет проксировано на локальный хост, порт 8001 (на котором запущен 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 default
Теперь нужно перезапустить NGINX, чтобы внесенные изменения вступили в силу. Для этого запустите:
sudo service nginx restart
После этого Nginx Готов к работе. Теперь нам необходимо создать скрипт для запуска проекта django с определенными критериями в фоновом режиме.
- Создание проекта скрипта для запуска проекта.
Для создания скрипта выполните следующие команды:cd /opt/myenv/bintouch gunicorn_start chmod u+x gunicorn_start
И наполните его подобным содержимым:
#!/bin/bash NAME="myproject" DJANGODIR=/opt/myenv/myproject SOCKFILE=/opt/myenv/run/gunicorn.sock USER=root GROUP=root NUM_WORKERS=3 DJANGO_SETTINGS_MODULE=myproject.settings DJANGO_WSGI_MODULE=myproject.wsgi echo "Starting $NAME as `whoami`" cd $DJANGODIR source ../bin/activate export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE export PYTHONPATH=$DJANGODIR:$PYTHONPATH RUNDIR=$(dirname $SOCKFILE) test -d $RUNDIR || mkdir -p $RUNDIR exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \ --name $NAME \ --workers $NUM_WORKERS \ --user=$USER --group=$GROUP \ --bind=0.0.0.0:8001 \ --log-level=debug \ [email protected]:/opt/myenv/bin
В переменную NAME нам необходимо указать название проекта в нашем случае это «myproject«.
Далее указывается путь к нашему проекту DJANGODIR.
В следующей переменной мы указываем путь к файлу сокета SOCKFILE.
Так же рекомендуется указать пользователя и групу от которых будет запускатся Ваш проект (USER и GROUP).
Далее Вы можете указать количество процессов в переменной NUM_WORKERS.
Так же нужно указать путь к модулю настройки и модулю WSGI.
В дальнейшем коде происходит выполнение скрипта. Рекомендую Вам обратить внимание на дополнительные ключи в конце которым мы присвоили переменные, хост и порт сервера. В нашем случае насройка универсальная (0.0.0.0:8001) - Далее необходимо установить supervisor для запуска и удобного управления проектами.
Для установки supervisor выполните команду:apt-get install supervisor
Далее необходимо создать первый конфигурационный файл для первого проекта:
touch /etc/supervisor/conf.d/myproject.conf
И наполнить его примерно таким содержимым:
[program:myproject] command = /opt/myenv/bin/gunicorn_start user = root stdout_logfile = /opt/myenv/logs/gunicorn_supervisor.log redirect_stderr = true environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
program:myproject — название проекта для запуска в Supervisor
command — путь к скрипту запуска проекта Django
user — пользователь от которого произойдет запуск
stdout_logfile — путь куда будет записывать Supervisor логи. Обязательно нужно создать файл и директорию для записи.
redirect_stderr — перенаправление вывода ошибок.
environment=LANG — подключение языковых пакетов.После создание файла конфигурации необходимо создать директорию для логов и лог файл. Для этого используем команды:
mkdir -p /opt/myenv/logs/ touch /opt/myenv/logs/gunicorn_supervisor.log
Теперь необходимо лишь запустить Ваш проект командой:
sudo supervisorctl start myproject
Так же с помощью команды restart можно перезагрузить проект и с помощью команды stop остановить.
Если нужно что бы Supervisor перезагрузил конфигурацию выполните данные команды:sudo supervisorctl reread sudo supervisorctl update
- Теперь нужно создать пользователя который сможет попасть в админ панель проекта.
Для этого необходимо перейти в директорию с нашим проектом и активируем виртуальную среду:source /opt/myenv/bin/activate cd /opt/myenv/myproject
Теперь нужно выполнить команду после которой необходимо заполнить имя пользователя, E-Mail и пароль:
python manage.py createsuperuser
Внимание: если Вы забыли пароль то его можно сбросить. Для сброса так же перейдите в директорию с проектом и активируйте виртуальную среду. После этого входим в manage.py shell
python manager.py shell
и набираем
from django.contrib.auth.models import User user = User.objects.get( username='root') user.set_password(«password») user.save()
Это лишь маленькая часть настроек которые доступны с Django. Рекомендуем ознакомится с официальной документацией: Django