Debian 8 + Python 3.5 + PostgreSQL + NGINX + virtualenv + Django

3938 8

Время течет все меняется, вот уже вышла 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. Пользователи зарегистрировавшие сервера с моего баннера могут смело обращаться за помощью ко мне, я обязательно постараюсь помочь. Не забудьте только назваться также как и регистрировались, для идентификации. ;)

Комментарии

30 ноября 2016 г. 10:31 owlman
Спасибо, за внимательность!
Обязательно поправлю. Хотя можно и так оставить, все равно идеального рецепта написать невозможно. А так думать заставляет.
29 ноября 2016 г. 20:15 The
как
root$ ./configure --prefix=$HOME/python/3.5.1/
соотносится с
user$ virtualenv -p ~/python/3.5.1/bin/python env
косяк же выходит, там не будет пермишенов на питон, да и самого питона тоже не будет.
19 октября 2016 г. 16:26 owlman
Спасибо! Надо будет попробовать.
19 октября 2016 г. 0:42 Денис
Ещё можно поставить Miniconda, а не собирать из исходников пайтон!

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
9 октября 2016 г. 16:51 owlman
Привет! Спасибо за оценку!
Я пользуюсь в основном Debian дистрибутивом, но на просторах инета видел рецепты установки Django на CentOS, поэтому предполагаю, что связка должна работать, хотя возможна и с исключениями.
Вторую часть не совсем понял. Если беспокоит общая безопасность сервера, то его достаточно качественно настроить и уже этим достигнуть вполне приемлемого уровня безопасности. Если беспокоит уровень защищенности приложений на Django, то стоит почитать об этом в документации по джанго. Там есть ряд рекомендаций и советов.
6 октября 2016 г. 19:42 Илья
Добрый вечер. Статья отменная! Подскажите пожалуйста возможно такую связку развернуть на VPS продакшн сервер под CentOS 7 (CentOS 7 + Python 3.5 + PostgreSQL + NGINX + virtualenv + Django) И беспокоит общий момент с безопасностью для клиентских сайтов, на эту связку нужно ставить, что-то дополнительно?
16 июля 2016 г. 11:44 owlman
1. Проверить запущен ли nginx через top или htop
2. Если при перезапуске /etc/init.d/nginx restart
Выдает ошибку, то решать эту ошибку
3. Смотреть логи в /var/log/nginx/ если в файлах логов есть ошибки то исправлять их.

Если процесс запущен и нигде включая логи нет ошибок то это не nginx

Если nginx работает не так как ожидалось то стоит сверить конфиги с актуальной документацие nginx. благо она на русском. В последних версиях были изменения поэтому старые рецепты могут работать не так как ожидалось. Я с таким столкнулся при настройке https.

Если несколько виртуальных хостов и есть редиректы, то неожиданное поведение nginx можно победить внимательной проверкой конфигов и их правильной работы по отдельности.
16 июля 2016 г. 11:37 Нзайн
Что делать, если nginx не работает как ожидалось, после настройки?

Контактные данные

 Россия, г. Москва