Рассмотрим правильную установку 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.
Рассмотренный способ, хоть и кажется сложным, но имеет много плюсов, один из которых позволяет не мучится с правами на файлы.