Краткая инструкция: «Как установить 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