Время течет все меняется, вот уже вышла Django 1.9 и давно пора переходить на python 3.xx.
В связи с этим представляю Вашему вниманию очередную схему настройки сервера в конфигурации:
Debian 8 + Python 3.5 + PostgreSQL + NGINX + virtualenv + Django
Данная схема проверена и используется мной в разработке проектов на серверах моего основного хостера FirstVDS.ru
---
Баннер с Джанго пони дает скидку на покупку сервера в 25%.
Также есть промокод, но по условиям партнерской программы
я должен его распространять лично и оффлайн,
обращайтесь в комментариях.
---
Итак начнем!
1. Настраиваем сервер на FirstVDS как я описал >> тут
2. Устанавливаем и проверяем NGINX
2.1 Установка NGINX:
root$ apt-get install nginx
2.2 Для проверки работы nginx делаем default страницу и привязываем к виртуальному хосту default.
Для этого создаем папку:
user$ mkdir -p /home/user/web/
# Здесь и далее файлы и директории в папке проекта делаем из под своего user.
# Для простоты, я обозначил пользователей root$ и user$ соответственно.
В созданной папке делаем файлы настроек виртуального хостинга default.nginx:
server {
listen 80;
root /home/user/web/default;
index index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ /index.html;
}
}
и файл index.html с приветствием от nginx. Например так:
<html><head></head><body>This is default Nginx vhost</body></html>
Делаем симлинки на default.nginx в папках настроек nginx:
root$ ln -s /home/user/web/default/default.nginx /etc/nginx/sites-available/default.nginx
root$ ln -s /home/user/web/default/default.nginx /etc/nginx/sites-enabled/default.nginx
Перегружаем nginx:
root$ /etc/init.d/nginx restart
Пробуем зайти на наш сервер из браузера по адресу: http:\\*IP адрес нашего сервера*
Если nginx работает, то в ответ должны получить наше приветствие:
This is default Nginx vhost
3. Устанавливаем, настраиваем и проверяем PostgreSQL
3.1 Устанавливаем PostgreSQL
root$ apt-get install postgresql
3.2 Проверяем PostgreSQL
root$ netstat -tanp | grep postgre
Должны получить что-то типа:
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 16394/postgres
3.3 Настраиваем PostgreSQL
Переходим на пользователя postgres
root$ su postgres
Входим в клиент PostgreSQL под postgres:
postgres$ psql
Должны увидеть что-то подобное:
psql (9.5.1, сервер 9.4.6)
Введите "help", чтобы получить справку.
postgres=#
Создаем пользователя для проекта:
postgres=# CREATE USER user WITH password 'qwerty';
Ответ:
CREATE ROLE
Создаем базу для проекта:
postgres=# CREATE DATABASE test_database;
Ответ:
CREATE DATABASE
Даем права пользователю на базу данных проекта:
postgres=# GRANT ALL privileges ON DATABASE test_database TO user;
Ответ:
GRANT
Выходим из клиента:
postgres=# \q
Проверяем подлючение пользователя user с базой проекта:
postgres$ psql -h localhost test_database user
В результате этой команды клиент postgreSQL спросит у нас пароль пользователя user, после правильного ввода пароля допустит нас к консоли управления базой test_database.
Нам пока это не надо поэтому можно смело покинуть клиент с помощью команды \q.
Наша база настроена и можно работать дальше.
4. Устанавливаем virtualenv
root$ apt-get install python-virtualenv
5. Устанавлиеваем python 3.**
5.1 Скачиваем необходимую версию python
$ wget http://www.python.org/ftp/python/3.5.1/Python-3.5.1.tar.xz ~/python/src/
5.2 Распаковываем и устанавливаем python
root$ tar -xf ~/python/src/Python-3.5.1.tar.xz && cd ./Python-3.5.1
root$ ./configure --prefix=$HOME/python/3.5.1/
root$ make && make install
6. Настройка виртуального окружения проекта
6.1 Создаем папку для проекта и его окружения
user$ mkdir -p /home/user/web/testprj_env/
user$ cd /home/user/web/testprj_env/
user$ virtualenv -p ~/python/3.5.1/bin/python env
6.2 Переходим в окружение и активируем его
user$ cd /home/user/web/testprg_env/ (если Вы уходили из папки)
user$ source env/bin/activate
6.3 Устанавливаем необходимые для работы компоненты
Для работы с postgreSQL:
(env) user$ pip install psycopg2
Устанавливаем uwsgi:
(env) user$ pip install uwsgi
И наконец устанавливаем django:
(env) user$ pip install django
Далее установку и настройку расписывать не буду, так как она аналогична моему рецепту настройки Debian 7 Wheezy + NGINX + UWSGI + Viartualenv + Django начиная с 16 шага.
PS. Пользователи зарегистрировавшие сервера с моего баннера могут смело обращаться за помощью ко мне, я обязательно постараюсь помочь. Не забудьте только назваться также как и регистрировались, для идентификации. ;)
Комментарии
root$ ./configure --prefix=$HOME/python/3.5.1/
соотносится с
user$ virtualenv -p ~/python/3.5.1/bin/python env
косяк же выходит, там не будет пермишенов на питон, да и самого питона тоже не будет.
cd ~
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda-latest-Linux-x86_64.sh
echo 'export PATH="~/miniconda3/bin:$PATH"' >> ~/.bashrc
Я пользуюсь в основном Debian дистрибутивом, но на просторах инета видел рецепты установки Django на CentOS, поэтому предполагаю, что связка должна работать, хотя возможна и с исключениями.
Вторую часть не совсем понял. Если беспокоит общая безопасность сервера, то его достаточно качественно настроить и уже этим достигнуть вполне приемлемого уровня безопасности. Если беспокоит уровень защищенности приложений на Django, то стоит почитать об этом в документации по джанго. Там есть ряд рекомендаций и советов.
2. Если при перезапуске /etc/init.d/nginx restart
Выдает ошибку, то решать эту ошибку
3. Смотреть логи в /var/log/nginx/ если в файлах логов есть ошибки то исправлять их.
Если процесс запущен и нигде включая логи нет ошибок то это не nginx
Если nginx работает не так как ожидалось то стоит сверить конфиги с актуальной документацие nginx. благо она на русском. В последних версиях были изменения поэтому старые рецепты могут работать не так как ожидалось. Я с таким столкнулся при настройке https.
Если несколько виртуальных хостов и есть редиректы, то неожиданное поведение nginx можно победить внимательной проверкой конфигов и их правильной работы по отдельности.
Обязательно поправлю. Хотя можно и так оставить, все равно идеального рецепта написать невозможно. А так думать заставляет.