Развертывание 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 установить virtualenvcd / home / django
virtualenv env
Теперь вы создали виртуальный Python 3.6 среда в / главная / django / env
папка, которую можно активировать с помощью следующей команды: Теперь, когда у нас есть pip, давайте создадим виртуальную среду. Виртуальные среды помогают избежать конфликтов с пакетами Python, используемыми Linux.
Настройка проекта 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 = []
и установите его на:
'178.128.229.34 '# замените это на IP-адрес вашего сервера
или доменное имя, которое вы используете для подключения
]
Теперь вернемся к http: // 178.128.229.34:
большой! Мы онлайн!
Настройка PostgreSQL, базы данных
По умолчанию Django использует базу данных SQLite3. К сожалению, SQLite3 не позволяет одновременную запись. Если на вашем веб-сайте есть только один пользователь, редактирующий данные, а остальные посетители просто читают страницы, это может быть подходящим вариантом. Но если у вас есть несколько человек, редактирующих данные одновременно, вы, вероятно, захотите использовать другой бэкэнд.
Обычный выбор - PostgreSQL и Mysql. Для этого урока мы выберем PostgreSQL.
Начните с установки PostgreSQL:
apt-get установить postgresqlЗатем запустите psql, оболочку базы данных. По умолчанию только пользователь postgres может подключиться к базе данных, поэтому нам сначала нужно пройти аутентификацию как этот пользователь:
su - postgrespsql
Затем нам нужна база данных и пользователь для доступа к этой базе данных:
учебник по созданию базы данных;создать пользователя 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:
- Если мы закроем сеанс SSH, процесс стрельбы остановится.
- Если сервер перезагружается, процесс стрельбы не запускается.
- Процесс запущен от имени пользователя root. Если хакеры обнаружат эксплойт в коде нашего приложения, они смогут запускать команды от имени пользователя root. Мы этого не хотим; но именно поэтому мы создали djangouser!
Чтобы решить эти проблемы, мы собираемся запустить Gunicorn как службу systemd.
cd / home / djangomkdir 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 включить gunicornsystemctl start gunicorn
Вы должны видеть свой веб-сайт в данный момент.
Мы можем выключить огнестрельное оружие следующим образом:
systemctl stop gunicornИ вы должны увидеть 502 Bad Gateway.
Наконец, давайте проверим цикл загрузки:
systemctl start gunicornперезагрузить сейчас
Когда ваша машина снова подключится к сети, вы должны увидеть, что ваш веб-сайт работает.
Статические файлы
Если вы зайдете в админ-панель Django на своем веб-сайте по адресу / admin / (для нас это http: // 178.128.229.34 / admin /), вы заметите, что статические файлы не загружаются должным образом.
Нам нужно будет создать новую папку для статических файлов:
cd / home / djangomkdir 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. В противном случае вы можете обнаружить, что ваш сервер работает неправильно!
Удачи!