Полная инструкция установки Python Django Postgres Nginx

sudo nano /etc/default/locale
LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_TYPE=en_US.UTF-8
locale-gen en_US.UTF-8
dpkg-reconfigure locales

Создаем нового пользователя:

root@servername:#> useradd username -s /bin/bash -g sudo -m -p pass
root@servername:#> passwd username

Ставим nginx (на хостинге, скорее всего уже установлен):

sudo apt-get install nginx

Ставим супервизор (будет запускать проект, в случае падения):

sudo apt-get install supervisor

Устанавливаем postgreSQL, virtualenv, Django и пр.

sudo apt-get install postgresql
sudo apt-get install postgresql-server-dev-all
sudo apt-get install python-dev
sudo apt-get install python-setuptools
sudo apt-get install virtualenv
sudo apt-get install libjpeg8 libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev
sudo apt-get install python-pip

Разворачиваем виртуальное окружение и запускаем его

virtualenv /home/my_env
cd /home/my_env
source bin/activate

Ставим Джангу, Гуникорн, разворачиваем проект и приложение

pip install django gunicorn
django-admin startproject my_project
cd my_project
django-admin startapp my_app

Ставим адаптер для postgreSQL

pip install psycopg2

Если критует пробуй это

sudo apt-get install python3-dev

Текстовый редактор и библиотека для картинок, остальное — по желанию

pip install django-ckeditor
pip install pillow

Создаём базу и пользователя в postgreSQL

database_name, user_name и user_password меняем на свои

sudo -u postgres psql
CREATE DATABASE database_name;

или

CREATE DATABASE database_name WITH OWNER=user_name LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' ENCODING='UTF8';

далее

CREATE USER user_name WITH PASSWORD 'user_password'; GRANT ALL PRIVILEGES ON DATABASE database_name TO user_name;

Правим сеттинги Джанги

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
ALLOWED_HOSTS = ['*']
TEMPLATES = [{ ... 'DIRS': [os.path.join(BASE_DIR, 'templates')], ... }]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'user_name',
'USER': 'database_name',
'PASSWORD': 'user_password',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
LANGUAGE_CODE = 'ru-RU'
TIME_ZONE = 'Europe/Moscow'
USE_TZ = True
USE_I18N = True
USE_L10N = True
STATIC_ROOT = os.path.join(BASE_DIR, '..', 'static')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, '..', 'media')
MEDIA_URL = '/media/'

Из папки проекта (где лежит manage.py) запускаем на сбор статики

python manage.py collectstatic

Настраиваем nginx

cd /etc/nginx/conf.d/
nano site_name.conf
server {
listen 80;
server_name 127.0.0.1; #здесь нужный IP или домен
access_log /var/log/nginx/my_project.log; # название лог файла можно заменить
location /static/ {
root /home/my_env/my_project/; # путь к вашему проекту
expires 30d;
}
location / {
proxy_pass https://127.0.0.1:8000; #на этом порту ждёт Гуникорн
proxy_set_header Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Пример:


server {
listen 8001;
#listen 80;
server_name 185.209.21.59;
access_log /var/log/nginx/templater/access.log;
error_log /var/log/nginx/templater/error.log;
access_log on;
client_max_body_size 64m;
client_body_buffer_size 16102k;
large_client_header_buffers 8 32k;
location /static {
alias /home/pweb/templater/static/;
expires 30d;
access_log off;
}
location /media {
alias /home/pweb/templater/media/;
expires 30d;
access_log off;
}
location / {
proxy_pass https://unix:/home/pweb/templater/templater/templater.sock;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
proxy_buffer_size 16102k;
proxy_buffers 512 16102k;
proxy_busy_buffers_size 16102k;
proxy_temp_file_write_size 16102k;
}
}

в файл nginx.conf, в секцию http можно добавить/изменить:

client_max_body_size 100m;

перезапускаем nginx

sudo service nginx restart

Настраиваем супервизор параметр workers рассчитывается по формуле — x * 2 + 1, где x — число ядер процессора. То есть, для двух ядер будет 5, для одного — 3 создаём конфиг для супервизора и открываем для редактирования

cd /etc/supervisor/conf.d/
nano my_project.conf
[program:my_project]
command=/home/my_env/bin/gunicorn my_project.wsgi:application -c /home/my_env/my_project/my_project/gunicorn.conf.py
directory=/home/my_env/my_project/my_project
user=nobody
autorestart=true
redirect_stderr=true

Пример:

[program:templater]
environment=DJANGO_SETTINGS_MODULE="templater.settings",PYTHONIOENCODING="UTF-8",LANG="ru_RU.UTF-8",LC_ALL="ru_RU.UTF-8",LC_LANG="ru_RU.UTF-8"
command=/home/pweb/.venv/bin/gunicorn --timeout 60 --access-logfile - --error-logfile error.log --max-requests 70 --max-requests-jitter 20 --workers 5 --bind unix:/home/pweb/templater/templater/templater.sock templater.wsgi:application
directory=/home/pweb/templater
logfile=/var/log/supervisor/templater/error.log
user=pweb
autorestart=true

обновляем и запускаем инстанцию супервизора

supervisorctl update
sudo supervisorctl restart my_project

в браузере вводим нужный IP (у нас 127.0.0.1), всё должно работать
Если возникли проблемы с utf8 в python2.X чтобы не париться с # — coding: utf-8 — можно добавить в /etc/python2.7/sitecustomize.py две строки:

Добавить комментарий