Предполагается, что VPS с дистрибутивом Linux (например, Ubuntu) уже установлен.

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

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

    sudo apt-get update
    sudo apt-get upgrade
    

    Первая команда загружает все обновления для пакетов, управляемых командой apt-get. Вторая команда устанавливает загруженные обновления. Если данные команды обнаружат новые доступные версии пакетов, будет выведено извещение, предлагающее указать, нужно ли устанавливать обновления. Нажмите “Y” и клавишу “Enter” при появлении такого извещения.

  2. Установка и создание Virtualenv.
    Установить инструмент virtualenv очень просто. Для этого запустите приведенную ниже команду:

    sudo apt-get install python-virtualenv

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

    sudo virtualenv /opt/myenv

    Обратите внимание: в каталоге /opt был создан новый каталог по имени myenv. Согласно данному руководству, в этом каталоге и нужно развернуть виртуальную среду. Чтобы развернуть среду в другом каталоге, не забудьте заменить /opt/myenv путем к Вашему каталогу. Некоторые разработчики создают каталог по имени webapps в корне файловой системы.

  3. Установка Django.
    Теперь нужно активировать virtualenv, чтобы пакеты Python были установлены не для всей системы, а изолированно, внутри среды. Итак, чтобы активировать virtualenv:

    source /opt/myenv/bin/activate

    Теперь можно приступить к установке Django. Для этого используйте pip, менеджер пакетов Python (аналог easy_install). Запустите команду:

    pip install django

    Django установлен внутри активной virtualenv. Теперь нужно запустить сервер баз данных.

    Обратите внимание: имя каталога, содержащего виртуальную среду (myenv) внесено в начало терминальной строки. Это помогает легко определить, активирована ли virtualenv и какая именно среда является текущей (в случае, если на VPS  существует несколько virtualenv).

  4. Установка 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 установлен и готов к работе.

  5. Установка NGINX.
    NGINX
    – это невероятно быстрый и легкий веб-сервер. В данном руководстве он используется для обслуживания статических файлов приложения Django. Чтобы установить NGINX, выполните следующую команду:

    sudo apt-get install nginx

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

  6. Установка Gunicorn.
    Gunicorn
    – это очень мощный HTTP-сервер Python WSGI. Поскольку Gunicorn является пакетом Python, необходимо активировать виртуальную среду, прежде чем его устанавливать. Это делается так:

    source /opt/myenv/bin/activate

    Убедитесь в том, что «myenv» внесен в начало терминальной строки. Активировав виртуальную среду, запустите команду:

    pip install gunicorn

    Теперь Gunicorn установлен внутри virtualenv.Установка всех необходимых компонентов завершена. Последующие разделы руководства содержат инструкции по настройке установленных серверов и тому, как сделать приложение доступным для других в Интернете.

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

    sudo su - postgres

    Сейчас строка терминала должна вывести «postgres@сервер». Если это так, запустите следующую команду, которая создаст базу данных:

    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 и настроить его, чтобы он использовал эту базу данных.

  8. Создание проекта 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).

  9. Настройка 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 не был на сервере панель будет с него доступна.

  10. Настройка 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 с определенными критериями в фоновом режиме.

  11. Создание проекта скрипта для запуска проекта.
    Для создания скрипта выполните следующие команды:
    cd /opt/myenv/bin

    touch 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 \
     --log-file=-root@test:/opt/myenv/bin

    В переменную NAME нам необходимо указать название проекта в нашем случае это “myproject“.
    Далее указывается путь к нашему проекту DJANGODIR.
    В следующей переменной мы указываем путь к файлу сокета SOCKFILE.
    Так же рекомендуется указать пользователя и групу от которых будет запускатся Ваш проект (USER и GROUP).
    Далее Вы можете указать количество процессов в переменной NUM_WORKERS.
    Так же нужно указать путь к модулю настройки и модулю WSGI.
    В дальнейшем коде происходит выполнение скрипта. Рекомендую Вам обратить внимание на дополнительные ключи в конце которым мы присвоили переменные, хост и порт сервера. В нашем случае насройка универсальная (0.0.0.0:8001)

  12. Далее необходимо установить 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
    
  13. Теперь нужно создать пользователя который сможет попасть в админ панель проекта.
    Для этого необходимо перейти в директорию с нашим проектом и активируем виртуальную среду:

    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