Джанго

Создание приложения Django на сервере Ubuntu

Создание приложения Django на сервере Ubuntu
Django - распространенная платформа для разработки веб-сайтов, веб-приложений и веб-API. Использование фреймворка Django для вашего проекта в качестве инструмента дает много преимуществ, и если вы не уверены, что он подходит, вам нужно только взглянуть на многие известные бренды, использующие Django в своем стеке.

Развертывание Django в производственной среде в первый раз может быть сложной задачей. Часто разработчики запускают экземпляр Linux в облаке для своей производственной среды.

В этом руководстве мы покажем вам, как запустить Django в производственной среде, используя свежий экземпляр Ubuntu.

Мы предполагаем, что все ваше редактирование выполняется на сервере, и что вы запускаете команды от имени пользователя root.

В этом руководстве мы используем Ubuntu 18.04.2 LTS

Создание пользователя для проекта

Мы создадим нового пользователя django для запуска нашего приложения. Это дает небольшое преимущество в безопасности.

Чтобы создать нового пользователя:

useradd -m django

В -м флаг создает новый домашний каталог: / главная / джанго.

Настройка среды Python

Перво-наперво: обновите списки пакетов с помощью apt-get update

Ubuntu 18.04 поставляется с Python 3.6, но он не поставляется с pip, который вам понадобится для установки ваших зависимостей.

apt-get установить python3-pip

Теперь, когда у нас есть pip, давайте создадим виртуальную среду. Виртуальные среды помогают избежать конфликтов с пакетами Python, используемыми Linux.

pip3 установить virtualenv
cd / home / django
virtualenv env

Теперь вы создали виртуальный Python 3.6 среда в / главная / django / env папка, которую можно активировать с помощью следующей команды: Теперь, когда у нас есть pip, давайте создадим виртуальную среду. Виртуальные среды помогают избежать конфликтов с пакетами Python, используемыми Linux.

источник / дом / django / env / bin / активировать

Настройка проекта Django

В этом руководстве мы создадим временный проект Django. Если вы развертываете свой собственный код, вам придется вместо этого загрузить его на сервер. Мы будем работать в домашнем каталоге / home / django.Настройка проекта Django

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

cd / home / django
исходный env / bin / активировать
pip установить django
Руководство по запуску проекта django-admin

Убедитесь, что все работает, запустив:

cd учебник
управление питоном.py runserver 0.0.0.0:80

Наш экземпляр Ubuntu работает на 178.128.229.34, поэтому мы подключимся к http: // 178.128.229.34.Убедитесь, что все работает, запустив:

Скорее всего, вы увидите что-то вроде этого:

Чтобы исправить это, мы отредактируем / главная / django / учебник / учебник / настройки.ру. Находить ALLOWED_HOSTS = [] и установите его на:

ALLOWED_HOSTS = [
'178.128.229.34 '# замените это на IP-адрес вашего сервера
или доменное имя, которое вы используете для подключения
]

Теперь вернемся к http: // 178.128.229.34:

большой! Мы онлайн!

Настройка PostgreSQL, базы данных

По умолчанию Django использует базу данных SQLite3. К сожалению, SQLite3 не позволяет одновременную запись. Если на вашем веб-сайте есть только один пользователь, редактирующий данные, а остальные посетители просто читают страницы, это может быть подходящим вариантом. Но если у вас есть несколько человек, редактирующих данные одновременно, вы, вероятно, захотите использовать другой бэкэнд.

Обычный выбор - PostgreSQL и Mysql. Для этого урока мы выберем PostgreSQL.

Начните с установки PostgreSQL:

apt-get установить postgresql

Затем запустите psql, оболочку базы данных. По умолчанию только пользователь postgres может подключиться к базе данных, поэтому нам сначала нужно пройти аутентификацию как этот пользователь:

su - postgres
psql

Затем нам нужна база данных и пользователь для доступа к этой базе данных:

учебник по созданию базы данных;
создать пользователя tutorial_user с зашифрованным паролем «tutorial_password»;
предоставить все права доступа к руководству по базе данных для tutorial_user;

Теперь введите exit или дважды нажмите Ctrl-D: один раз для выхода из psql и один раз для выхода из оболочки postgresuser.

большой! Теперь у нас есть база данных и настроен пользователь. Давайте проверим, что мы можем войти в нашу базу данных.

Мы попытаемся открыть оболочку базы данных, на этот раз войдя в базу данных, которую мы создали, с пользователем, которого мы создали:

psql -Ututorial_user -dtutorial -h127.0.0.1 -W

В командной строке введите созданный нами пароль: tutorial_password.

Если вы видите оболочку базы данных, вы добились успеха. Если вы увидите какие-либо ошибки, вам придется вернуться и выяснить, что не так.

Подключение Django к базе данных

Чтобы подключить Django к базе данных, нам сначала нужно установить адаптер Python PostgreSQL:

pip установить psycopg2-binary

Тогда давайте откроем / главная / django / учебник / учебник / настройки.руи настраиваем соединение.

Найдите текущее соединение с базой данных; если вы не изменяли его, это могло бы выглядеть примерно так:

БАЗЫ ДАННЫХ =
'По умолчанию':
'ДВИГАТЕЛЬ': 'Джанго.db.бэкэнды.sqlite3 ',
"ИМЯ": os.дорожка.присоединиться (BASE_DIR, 'db.sqlite3 '),

Чтобы подключиться к PostgreSQL, мы заменим его следующим:

БАЗЫ ДАННЫХ =
'По умолчанию':
'ДВИГАТЕЛЬ': 'Джанго.db.бэкэнды.postgresql_psycopg2 ',
"ИМЯ": "учебник",
"ПОЛЬЗОВАТЕЛЬ": "учебный_пользователь",
'ПАРОЛЬ': 'пароль_учебника',
'ВЕДУЩИЙ': '127.0.0.1 ',
«ПОРТ»: «5432»,

Проверим соединение:

cd / home / django / учебник
управление питоном.py runserver 0.0.0.0:80

Вы снова сможете посетить свой веб-сайт (для нас http: // 178.128.229.34 /, но замените его своим IP или именем хоста).

Если все хорошо, мы можем продолжить.

Настройка nginx, веб-сервера

Когда ты бежишь управление питоном.py runserver, вы используете сервер разработки Django. Это отлично подходит для локальной разработки, но, как и в случае с SQLite3, не совсем подходит для производства.

Обычным выбором для производственных веб-серверов являются nginx и Apache. Для этого урока мы будем использовать nginx.

Установите nginx, используя следующее:

apt-get установить nginx

Теперь, если все сработало, nginx должен работать на 80-м порту. Идите и проверьте свой веб-сайт; Тебе следует увидеть:

Отлично, значит, nginx запущен и работает! Далее нам нужно настроить его для связи с Django. Откройте файл конфигурации nginx, расположенный в / etc / nginx / sites-available / default. Заменим файл следующим:

upstream django
сервер 127.0.0.1: 8000;

server
слушать 80;
место расположения /
try_files $ uri @send_to_django;

location @send_to_django
proxy_set_header Хост $ http_host;
proxy_redirect выключен;
proxy_pass http: // django;

Проверьте файл конфигурации, запустив nginx -t. Если все в порядке, мы можем перезагрузить, запустив nginx -s reload.

Теперь, если вы посетите свой сайт, вы увидите следующее:

Когда вы видите это, это означает, что nginx не смог передать запрос вышестоящему процессу. На данный момент это потому, что он пытается передать запрос на 127.0.0.1: 8000, но по этому адресу не прослушивается процесс.

Запустим сервер разработки Django и попробуем еще раз:

cd / home / django / учебник
управление питоном.py runserver 127.0.0.1: 8000

и снова зайдите на ваш сайт. Вы должны увидеть свое приложение Django.

Установка Django на Gunicorn

Помните, что мы не хотим использовать наш сервер разработки Django в продакшене. Вместо этого мы будем использовать сервер интерфейса шлюза веб-сервера (WSGI) для запуска Django. Nginx передаст запрос серверу WSGI, на котором запущен Django.

Обычно в качестве сервера WSGI выбирают Gunicorn и uWSGI. Для этого урока мы будем использовать Gunicorn.

Установим Gunicorn:

pip install gunicorn

Далее мы можем запустить Gunicorn следующим образом:

cd / home / django / учебник
Gunicorn учебник.WSGI

Теперь вы сможете посетить свой веб-сайт и увидеть, как ваше приложение работает правильно.

Запуск Gunicorn как службы

Вот несколько проблем с запуском Gunicorn:

  1. Если мы закроем сеанс SSH, процесс стрельбы остановится.
  2. Если сервер перезагружается, процесс стрельбы не запускается.
  3. Процесс запущен от имени пользователя root. Если хакеры обнаружат эксплойт в коде нашего приложения, они смогут запускать команды от имени пользователя root. Мы этого не хотим; но именно поэтому мы создали djangouser!

Чтобы решить эти проблемы, мы собираемся запустить Gunicorn как службу systemd.

cd / home / django
mkdir bin
cd / home / django / bin
коснитесь стартового сервера.ш

На стартовом сервере.ш:

cd / home / django
исходный env / bin / активировать
cd учебник
Gunicorn учебник.WSGI

Теперь вы можете протестировать скрипт:

cd / home / django / bin
стартовый сервер bash.ш
# посетите ваш сайт, он должен быть запущен

Теперь создаем сервис systemd для Gunicorn. Создайте / etc / systemd / system / gunicorn.обслуживание следующим образом:

[Ед. изм]
Описание = Gunicorn
После = сеть.цель
[Услуга]
Тип = простой
Пользователь = django
ExecStart = / домашний / django / bin / start-server.ш
Перезагрузка = при сбое
[Установить]
WantedBy = многопользовательский.цель

Теперь давайте включим сервис и запустим его

systemctl включить gunicorn
systemctl start gunicorn

Вы должны видеть свой веб-сайт в данный момент.

Мы можем выключить огнестрельное оружие следующим образом:

systemctl stop gunicorn

И вы должны увидеть 502 Bad Gateway.

Наконец, давайте проверим цикл загрузки:

systemctl start gunicorn
перезагрузить сейчас

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

Статические файлы

Если вы зайдете в админ-панель Django на своем веб-сайте по адресу / admin / (для нас это http: // 178.128.229.34 / admin /), вы заметите, что статические файлы не загружаются должным образом.

Нам нужно будет создать новую папку для статических файлов:

cd / home / django
mkdir static

Затем мы сообщаем Django, куда он должен поместить статические файлы, отредактировав / home / django / tutorial / tutorial / settings.py и добавив:

STATIC_ROOT = '/ главная / django / static /'

Теперь мы можем собрать статические файлы:

cd / home / django
исходный env / bin / активировать
cd учебник
управление питоном.Py collectstatic

Наконец, нам нужно указать nginx для обслуживания этих статических файлов.

Давайте откроем / etc / nginx / sites-available / default и добавим следующее прямо над вашим местоположением / блоком:

location / static /
корень / дом / джанго;
try_files $ uri = 404;

Теперь весь файл должен выглядеть так:

upstream django
сервер 127.0.0.1: 8000;

server
слушать 80;
location / static /
корень / дом / джанго;
try_files $ uri = 404;

место расположения /
try_files $ uri @send_to_django;

location @send_to_django
proxy_set_header Хост $ http_host;
proxy_redirect выключен;
proxy_pass http: // django;

Мы можем перезагрузить файл с помощью nginx -s reload

И вуаля! Ваши статические файлы теперь будут работать полностью.

Заключение

На данный момент ваше приложение Django работает правильно. Если у вас есть особые требования, вам может потребоваться настроить кеш, например Redis, или очередь сообщений, например Rabbit MQ. Вы также можете настроить непрерывное развертывание, поскольку процедура развертывания может занять некоторое время.

Еще один важный шаг - предпринять соответствующие шаги для защиты вашей машины Ubuntu. В противном случае вы можете обнаружить, что ваш сервер работает неправильно!

Удачи!

Средняя кнопка мыши не работает в Windows 10
В средняя кнопка мыши помогает пролистывать длинные веб-страницы и экраны с большим объемом данных. Если это прекратится, вы в конечном итоге будете и...
Как изменить левую и правую кнопки мыши на ПК с Windows 10
Совершенно нормально, что все устройства компьютерной мыши эргономичны для правшей. Но есть мышиные устройства, специально разработанные для левшей ил...
Эмуляция щелчков мыши с помощью мыши без щелчка в Windows 10
Использование мыши или клавиатуры в неправильной позе или чрезмерное использование может привести к множеству проблем со здоровьем, включая растяжение...