Рассмотрим правильную установку Django CMS на VDS сервер, данная инструкция так же можно рассматривать при установке самого фреймворка Django. Позаботьтесь о том чтобы у вас было открыто две консоли (в ОС Windows рекомендую использовать putty), соединееных с вашим сервером. В первой соединение из под суперпользователя root, вторая из под пользователя состоящего в WEB группе.

Итак приступим, если ещё не установлен Python, установим его (рассматриваем только работу с Python 3), выпотлняем команду из под ROOT:

apt-get install python3

Далее установим менеджер модулей, выпотлняем команду из под ROOT:

apt-get install python3-setuptools

Далее установим менеджер пакетов pip, выпотлняем команду из под ROOT:

easy_install3 pip

Далее установим менеджер виртуального окружения, выпотлняем команду из под ROOT:

pip3 install virtualenv

Создаем виртуальное окружение из под WEB пользователя, желательно где нибудь в корне домашнего какталога, или можно создать отдельный каталог для Python приложений, только главное не в web каталоге для обычных сайтов:

pip install --upgrade virtualenv

virtualenv env

Автивируем созданное виртуальное акружение, из под WEB пользователя:

source env/bin/activate

Скачиваем установщик Django CMS, из под WEB пользователя:

pip install djangocms-installer

Создаём Django CMS приложение (где название проекта, название вашего приложения/сайта), из под WEB пользователя:

djangocms <название проекта>

Добавляем в файл настроек settings.py данные о хостах, из под WEB пользователя:

ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '<IP адрес сервера>', '<доменное имя>']

Устанавливаем Gunicorn, из под WEB пользователя:

pip install gunicorn

Переходим в папку проекта, из под WEB пользователя:

cd <название проекта>

Необходимо открыть в FireWall 8000 порт (или другой, в зависмости на каком порту у вас будет работать приложение)

Выполняем тестирование установленного приложения и созданного проекта, из под WEB пользователя:

gunicorn <название проекта>.wsgi:application --bind :8000

Далее настраиваем NGINX, редактируем конфигурационный файл для домена. По факту на необходимо заменить корневой location, удалить location для PHP и добавить необходимые для Django. Редактирование выпотлняем из под ROOT:

location /static/ {
        alias <путь до проекта>/<название проекта>/static/;
        expires 30d;
        }
    location /media/ {
        alias <путь до проекта>/<название проекта>/media/;
        expires 30d;
        }
    location /robots.txt {
        alias <путь до проекта>/babki/<название проекта>/robots.txt;
        }
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;  # <-
        }

Если сайт без SSL, то убираем из конфигурации NGINX вот эти две строки (Редактирование выпотлняем из под ROOT):

#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto https;  # <-

Если сайт с SSL, то добавляем в конец файла настроек settings.py данные, из под WEB пользователя:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

Далее устанавливаем supervisor, выпотлняем команду из под ROOT:

apt-get install supervisor

Переходим в папку приложения, из под WEB пользователя:

cd /<название проекта>/<название проекта>

Создадаём конфиг для gunicorn, из под WEB пользователя:

touch gunicorn.conf.py

Заполняем файл следующими данными, из под WEB пользователя:

bind = '127.0.0.1:8000'
workers = 3
user = "<имя пользователя в директории которого находимся>"

Создадим конфиг файл для супервизора, из под ROOT:

cd /etc/supervisor/conf.d/

touch <название проекта>.conf

Заполняем файл следующими данными, из под ROOT пользователя:

[program:<название проекта>]
command=<путь до проекта>/env/bin/gunicorn <название проекта>.wsgi:application -c <путь до проекта>/<название проекта>/<название проекта>/gunicorn.conf.py
directory=<путь до проекта>/<название проекта>
user=<ваш web пользователь>
autorestart=true
redirect_stderr=true

Команды работы супервизора, выполняются из под ROOT:

supervisorctl reread
supervisorctl update
supervisorctl status <название проекта указанное в конфиге supervisor`a>
supervisorctl restart <название проекта указанное в конфиге supervisor`a>

Далее необходимо выполнить сбор статистических данные, это необходимо выполнять всегда, когда вносите изменения в содержимое папки static вашего проекта,из под WEB пользователя, в виртуальном окружении:

python manage.py collectstatic

И когда уже все правки будут сделаны, то есть полностью готовый проект, не забудте в настройках прокта (settings.py) выключить DEBUG, установив значение в False.

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