Oleg/ 2 ноября, 2020

Краткая инструкция: «Как установить Django с нуля». Зачем она здесь появилась при наличии десятков таких инструкция. Проблема в том, что в некоторых инструкциях нет пояснений зачем такие конфиги, некоторые инструкция не предполагают виртуального окружения или например сервера Gunicorn и данная инструкция не полная, но все же в моей конфигурации хотя бы рабочая, предполагаю она будет обновляться и дополнятся в будущем, так как в версии ноября 2020 это базовый вариант, который позволит запустить Django на вашем сервере. Хотя вполне логично было бы убрать настройку БД, но в данном случае нас интересует рабочая конфигурация со всеми шагами на нулевом сервере.

Предположим у нас есть сервер на минимальном дистрибутиве Debian 9 (или Ubuntu)

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

Устанавливаем Python, PostgeSQL и nginx

В данном случае работаем от root, что не типично, так что не забудьте добавлять команду sudo, попутно есть комменты по устранению некоторых недоразумений

apt-get update
apt-get upgrade

Установка Python и необходимых утилит, PostgreSQL, веб-сервер для статики nginx:

apt-get install python3-dev python3-setuptools python3-pip libpq-dev postgresql postgresql-contrib nginx

Создание базы данных и пользователя PostgreSQL

Подключитесь к СУБД с помощью следующей команды:
sudo -u postgres psql

Если -bash: sudo: command not found
тогда ставим apt-get install sudo

Создайте базу данных для вашего проекта:
CREATE DATABASE имябазыданных;

Далее создайте пользователя для созданной БД, указав безопасный пароль:
CREATE USER имя_пользователя WITH PASSWORD ‘пароль’;

Для корректной работы Django кодировку необходимо установить в стандарт UTF-8:
ALTER ROLE имя_пользователя SET client_encoding TO ‘utf8’;

Далее установите схему изоляции транзакции по умолчанию в «зафиксированное чтение», при котором блокируется чтение из незафиксированных транзакций:
ALTER ROLE имяпользователя SET default_transaction_isolation TO ‘read committed’;

Установите рекомендуемый стандарт времени UTC:

ALTER ROLE имяпользователя SET timezone TO ‘UTC’;

В конце предоставьте новому пользователю доступ для управления созданной базой данных:
GRANT ALL PRIVILEGES ON DATABASE имябазыданных TO имя_пользователя;


Выйдите из командной строки PostgreSQL, набрав:
\q

Создаем виртуальное окоружение virtualenv

pip3 install virtualenv
virtualenv /opt/папкавиртуальногоокружения

Активация виртуального окружения:

source /opt/папкавиртуальногоокружения/bin/activate

Ставим драйвер БД:

pip install django psycopg2

Создаем проект Django

Находясь в виртуальном окружении стартуем проект:

django-admin.py startproject имя_проекта

В настройках Django указываем интересующий нас язык и временную зону в стандарте UTC так же указываем путь к статике указываем разрешенные хосты(наш домен/IP-адрес):


nano settings.py

LANGUAGE_CODE = ‘RU-ru’
TIME_ZONE = ‘Europe/Moscow’

ALLOWED_HOSTS = [‘your_server_domain_or_IP’]
STATIC_URL = ‘/static/’
STATIC_ROOT = os.path.join(BASE_DIR, ‘static’)

*собрать статику
python manage.py collectstatic

Что бы не запутаться отдельно настраиваем БД в том же файле настроек. По умолчанию в файле настроек будет указан SQLite, обратите внимание…

‘ENGINE’: ‘django.db.backends.sqlite3’,

nano settings.py

‘ENGINE’: ‘django.db.backends.postgresql_psycopg2’,
‘NAME’: ‘myproject’,
‘USER’: ‘myprojectuser’,
‘PASSWORD’: ‘password’,
‘HOST’: ‘localhost’,
‘PORT’: »,

Миграция БД:

python manage.py makemigrations
python manage.py migrate

Создаем суперпользователя для админки Django:
python manage.py createsuperuser

Можно проверить работоспособность Django на данном этапе с помощью встроенного HTTP-серера: python manage.py runserver

Устанавливаем Gunicorn, настраиваем nginx

pip install gunicorn

Gunicorn запускаем из папки проекта там где лежит manage.py

Если порт занят, удобная утилита:

apt-get install psmisc
fuser -k 8000/tcp

gunicorn имя_проекта.wsgi:application —bind домен/IP-адрес:8000

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

nano /etc/nginx/sites-available/имя_проекта.conf

server {
    listen 80;
    server_name  www.имя_домена;
    rewrite ^/(.*) http://имя_домена/$1 permanent;
}

server {
    listen 80;
    server_name имя_домена;
    access_log  /var/log/nginx/dp2020.access.log;
    keepalive_timeout 5;

    location /static/ {
	root /opt/путь/к/проекту;;
	expires 30d;
    }    

    location / {
        proxy_pass http://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;
    }
}

Создаем символическую ссылку:

ln -s /etc/nginx/sites-available/имя_проекта.conf /etc/nginx/sites-enabled/

service nginx restart

Установка и настройка Supervisor

На самом деле крайней необходимости в supervisor нет, но все же пусть будет

apt-get install supervisor

nano /etc/supervisor/conf.d/имя_проекта.conf

[program:имя_проекта]
command=/путь_в_папку_с_проектом/bin/gunicorn имя_проекта.wsgi:application —bind 127.0.0.1:8000 directory=/opt/django/имя_проекта
user=ваш_юзер
autostart=true
autorestart=true
redirect_stderr=true

supervisorctl reload
supervisorctl status

Поделиться этой записью