Меню

Django как настроить https

Django — Урок 019. Настройка HTTPS протокола на сайте от Let`s Encrypt

Вчера получил письмо счастья от Google , поскольку пользуюсь Google Search Console для отслеживания индексации сайта в поисковике Google. Суть письма заключается в том, что Google Chrome будет сообщать о небезопасности сайта, который использует протокол http на тех страницах, где требуется ввод пароля. А если учесть, что на моём сайте форма авторизации располагается на всех страницах, то значит предупреждение будет на всех страницах сайта. Не самая приятная ситуация, поэтому пришлось быстренько доставать сертификат SSL и настраивать https.

На данный момент существует центр сертификации Let`s Encrypt , который выдаёт бесплатные сертификаты сроком на 90 дней. Данный центр сертификации поддерживается такими организациями, как Electronic Frontier Foundation (EFF), Mozilla Foundation, Akamai, Cisco Systems.

Процесс получения и установки сертификата автоматизирован, но в случае с сайтом, работающем на Django и Nginx , нужно будет дополнительно поработать над настройками сервера Nginx .

Получение сертификата

Для получения сертификата и обновления в автоматическом режиме используется программное обеспечение Certbot. На сайте Let`s encrypt имеется ссылка на данное программное обеспечение, где можно выбрать тип вашей операционной системы и сервер, который используется за отдачу контента на вашем сайте. В моём случае это Nginx и Ubuntu 16.04 .

Там же будет и инструкция по установке и процессу получения сертификата.

Для установки программного обеспечения сертификации воспользуемся следующей командой:

Далее необходимо получить сертификат с помощью плагина webroot следующей командой:

Где указывается каталог для сертификации вашего сайта, в данном случае /var/www/example , его необходимо будет создать и соответствующие домены, для которых Вы получаете сертификаты.

В данном случае имеется один нюанс. Уже на этом шаге необходимо настраивать Nginx , поскольку в каталоге /var/www/example будет создаваться скрытый каталог .well-known , который необходим для получения сертификата. Подробнее про первоначальную настройку Nginx можете прочитать в соответствующей статье .

Поэтому предварительно настраиваем Nginx , как показано ниже и перезапускаем его.

Тогда Вы успешно получите Ваш SSL сертификат.

Настройка протокола https

После того, как мы получили сертификат, необходимо настроить https протокол, а для этого необходимо открыть на сервере 443 порт.

И настроить Nginx.

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

Настройка подключения по http

Оставлять ли возможность подключения по http протоколу для пользователей — это решать уже Вам, но какой смысл оставлять возможность работы по данному протоколу, если уже имеется https. Поэтому сделаем редирект пользователя со страниц с http на ту же самую страницу с https .

Перезапускаем Nginx и убеждаемся, что при попытке подключения по http нас автоматически перенаправляет на соединение по https .

Автоматическое обновление сертификата

Для обновления сертификата используется следующая команда:

Но процесс можно автоматизировать с помощью cron (программа-демон, предназначенная для выполнения заданий в определенное время, или через определенные промежутки времени).

Для редактирования cron от root пользователя выполним следующую команду:

Будет предоставлен выбор между возможными редакторами, выбирайте свой редактор по вкусу. А я пользуюсь nano. После чего вставьте следующую строку в конфиг cron.

В данном случае по понедельникам в 2:30 будет осуществляться попытка продления сертификата.

Корректировка контента

Последнее, что осталось, это корректировка всех ссылок на сайте. То есть необходимо поменять http на https, чтобы внутренняя линковка сайта не создавала дополнительных перенаправлений.

Для Django рекомендую VDS-сервера хостера Timeweb .

Рекомендуем хостинг TIMEWEB

Рекомендуемые статьи по этой тематике

Источник

Привязка домена к серверу Django, настройка SSL и редиректов

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

Читайте также:  Ссылка с картинкой не работает

1. Приобретение домена

Для начала нужно приобрести доменное имя (если вы этого еще не сделали). Самый простой вариант — это приобрести домен на сайте того хостинг-провайдера, где вы арендуете хостинг или сервер. Цены везде примерно одинаковые. На нашем сайте также есть статья со сравнением самых дешевых регистраторов доменных имен.

2. Привязка домена к серверу (к IP-адресу)

После приобретения домена в первую очередь нужно немного подождать его активации (от 1 до 12 часов, в зависимости от регистратора и доменной зоны). Это закономерно для всех новых, только что зарегистрированных доменных имен. Далее этот домен нужно привязать к нашему серверу, настроив DNS. На разных хостингах эта процедура выполняется по-разному. Я покажу на примере хостинга Zomro в панели управления ISPmanager.

В панели управления в левом меню выбираем пункт DNS-хостинг. В открывшемся окне жмем на кнопку «Заказать». После этого у вас появится DNS-хостинг на 50 доменов.

Если ваш хостинг или сервер находится на этом же аккаунте, то DNS-хостинг обойдется вам бесплатно. В противном случае за него нужно будет оплачивать 2.5$ ежемесячно.

Далее жмем на кнопку перейти и попадаем в DNS Manager:

В открывшемся окне жмем «Новый домен», выбираем тип Master, вводим наш домен, IP-адрес нашего сервера и адрес электронной почты:

Возвращаемся в панель управления хостинга, переходим в раздел «Домены», выбираем наш домен и жмем на кнопку NS:

В случае с хостингом Zomro прописываем следующие NS сервера:

На этом привязка домена завершена, нужно лишь подождать пару часов обновления DNS. После этого наше Django-приложение будет открываться в браузере по доменному имени.

Если у вас возникли какие-либо проблемы с этим пунктом, то обратитесь в техподдержку своего хостинг-провайдера.

3. Настройка SSL-сертификата

Настроим бесплатный SSL-сертификат Let’s Encrypt для нашего сайта. Установим Let’s Encrypt:

4. Создадим папку для хранения сертификатов

5. Настроим Nginx:

Добавим следующую запись:

Сохраним и перезапустим Nginx:

6. Создадим SSL-сертификат для нашего домена в созданной папке

7. Откроем 443 порт:

8. Подключим SSL и настроим редиректы (c «http» на «https» и c «www» на «без www»)

Еще раз откроем конфиг Nginx:

И добавим туда нужный код. В конечном итоге мой Nginx-конфиг выглядит следующим образом:

Сохраняем файл и перезапускаем Nginx:

Теперь наш сайт доступен по защищенному SSL-соединению. При попытке открыть сайт по http или по www будет выполнен редирект на https://rating-casino.info:

Эти редиректы нужны для SEO-оптимизации сайта. Если их не настроить, то поисковые системы будут видеть 4 разных сайта и делить весь SEO-вес между ними:

В процессе разработке вам наверняка придется настраивать и другие редиректы. Делается это опционально все в том же конфиге Nginx. Основные редиректы были представлены выше.

На этом все! За эти 5 статей мы выполнили полный деплой приложения Django. Также для удобства работы с файлами на сервере можно установить и настроить FTP-сервер — VSFTPD, но это мы сделаем уже в следующей статье.

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

Источник

Настройка Debian, Nginx и Gunicorn для Django проекта

Всем доброго времени суток.

Была задача поднять свой Debian сервер на Nginx для проектов Django 3.х. Перерыв кучу информации в интернете, удалось это сделать соединив рекомендации с нескольких разных сайтов. Если вам интересно почитать, как настроить свой первый сервер для Django-проекта, то — добро пожаловать.

Немного расскажу о себе, чтобы вы понимали, кто я. Я не разработчик, не программист, не системный администратор и даже не имею IT-образования. Я учитель информатики. Но по работе мне приходится объяснять ученикам некоторые моменты, очень далёкие от школьного курса информатики и один из них это разработка проектов на Django.

Читайте также:  Как открыть капот если сломалась пружинка

Основные установки

Начнём с того, что у нас уже есть сервер с установленной Debian 10, с установкой Debian проблем возникнуть не должно. У меня была чистая установка, без дополнительных настроек, поэтому я зашёл на свой сервер через root и приступил к установке некоторых основных для меня компонентов.

Можно всё это засунуть в одну установку, но у меня выдал ошибку, а при таком порядке всё прошло успешно.

Далее создаём нового пользователя и добавляем его в группу sudo, чтобы он мог запускать процессы от имени суперпользователя.

где username — это имя пользователя, которое вы будете использовать в дальнейшем.
Установим последнюю версию Python из исходного кода. На момент написания статьи это была 3.8.2.

После скачивания последней версии Python и перехода в каталог с исходным кодом мы запускаем:

Это позволит нам подготовить всё необходимое для установки Python. Здесь число 2, это количество ядер процессора. Можно узнать командой nproc.
Запускаем установку.

Проверить, что Python установился, можно командой:

Она выведет версию Python.
После этого обновляем pip и устанавливаем наиболее часто используемые пакеты для Python.

Настройка Django

Перезапускаем систему и заходим под созданным вами пользователем. Перейдём в каталог /var/www и скачаем в него наш проект, который загружен на GitHub.

Настроим права, для нормальной работы с каталогом /var/www

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

Переходим в наш проект, создаём виртуальное окружение и запускаем его:

Если всё активировалось, то будет строка вида: (env) username@server.

Поставим/обновим основные пакеты, которые нужны нам для нашего проекта.

Ставим Django, Gunicorn и адаптер для PostgreSQL.

Можно ещё поставить необходимые для вашего проекта пакеты, я использую summernote для текста:

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

Обязательный шаг — это проверка работоспособности сервера:

И перейдите на ваш сайт, DOMAIN_NAME:8000, чтобы убедится в том, что всё работает! Но, на данный момент у нас ещё не настроено очень многое, это только базовые настройки, нам нужно настроить нормальную работу сервера, подключить статику и т.д.
Если у Вас не запустился сайт, то нужно копаться в настройках (возможно прав доступа) и смотреть какой из пакетов не установился, тут всё очень индивидуально.

Завершить выполнение можно нажатием клавиш: CTRL+C.

Далее переходим, только если ваш проект запустился, крайне не рекомендую переходить, если что-то не получилось. Лучше устранить проблему на начальном этапе, чем потом сносить сервер под корень (я сносил 3 раза, а потом начал писать эту инструкцию, фиксируя каждое действие).

Проверяем работу Gunicorn:

MAINAPPNAME — это имя основного приложения, в котором лежит settings.py.

Если сервер работает, то идём дальше.

Завершить выполнение можно нажатием клавиш: CTRL+C.

Настройка settings.py

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

В urls.py я изменил настройки для статики и медиа.

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

Для сбора статики и деактивируем виртуальное окружение:

Настройка Gunicorn

Откроем для настройки

Пропишем в файле несколько настроек:

Мы создали раздел [Unit] для описания сокета, в разделе [Socket] мы определили расположение сокета и в разделе [Install] нужен для установки сокета в нужное время.

Откроем служебный файл systemd ля настройки работы сервиса:

Читайте также:  Ок гугл настрой устройство по коду

Не забудьте указать вашего пользователя, ваше название проекта и ваше виртуальное окружение.

Как мне пояснили workers вычисляется как количество ядер процессора * 2 + 1.
Теперь мы запускаем и активируем сокет Gunicorn.

И обязательно тестируем, что всё работает!

Должен вывести данные о запущенном сервисе.

Нажмите клавишу Q для выхода (обязательно на английской раскладке).

Последняя команда должна вывести сообщение о наличии файла.

Если первая команда sudo systemctl status gunicorn.socket выдаёт ошибку, или если вторая команда file /run/gunicorn.sock сообщит, что в каталоге отсутствует файл gunicorn.sock, то сокет Gunicorn не удалось создать. Нужно проверить журналы сокета Gunicorn с помощью следующей команды:

Смотреть в чём ошибка и устранять.

Перейдём к тестированию активации сокета.

Скорее всего у вас будет запись:

Пока всё отлично идём дальше.

Установим соединение с сокетом через curl.

Может выдать ошибку Bad Request (400).

Попробуйте вместо localhost указать IP вашего сервера, если всё нормально, то скорее всего это из-за настроек nginx, которые мы ещё не делали. Просто идём дальше.

И снова запросим вывод статуса:

Если запись будет такой + ещё масса информации, но не об ошибках, то всё отлично.

Иначе смотрим ошибки в журнале

И перезапускаем процессы Gunicorn

Настройка NGINX

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

В разделе sever_name можно указать несколько адресов через пробел.

Протестируем на наличие ошибок в синтаксисе:

Если ошибок нет, то перезапускаем сервер и даём нашему брандмауэру необходимые права:

Можно также удалить доступ к порту 8000

На этом этапе всё должно работать, но у меня не работало всё нормально, пока я не настроил https. К сожалению, не могу объяснить с чем это связано, но статика не подгружалась, хотя медиа файлы грузились нормально.

Настройка HTTPS

Для настройки будем использовать Cerbot

И следуем подсказкам на экране. Если появились ошибки, то устраните и повторите. Например, ошибка может возникнуть если вы указали доменное имя, не относящееся к данному серверу.
Для автоматического обновления сертификата введите команду.

Теперь тестим сайт и всё должно работать!

Если статика так и не отобразилась, то попробуйте открыть какой-нибудь css файл указав полный адрес до него, если выдал ошибку 403, то всё отлично, но проблема в правах доступа нужно экспериментировать с ними, попробуйте сбросить все настройки прав для www-data на каталог /var/www. Если ошибка 404, то нужно смотреть в сторону настроек location в настройках NGINX.

Настройка PostgreSQL

Настроим PostgreSQL и сделаем импорт данных из SQLite. Если Вам это не нужно, то пропустите этот шаг, либо возьмите только настройки PostgreSQL.

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

Мы будем следовать рекомендациям по проекту Django.

Зададим кодировку по умолчанию UTF-8, схему изоляции транзакций по умолчанию поставим в «read committed», для блокировки чтение со стороны неподтвержденных транзакций. Часовой пояс поставим в значения времени по Гринвичу (UTC).

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

После выполнения всех команд можно закрыть диалог PostgreSQL с помощью команды:

Теперь настройка PostgreSQL завершена, теперь настроим Django для корректной работы с PostreSQL.

Для начала скопируем старые данные из SQLite (если это необходимо). Для этого переходим в ваш проект и запускаем виртуальное окружение:

Поменяем настройки для подключения к базе данных:

Запустите миграцию для БД:

После этого shell:

И пропишите в нём:

И подгрузим ранее выгруженные данные из SQLite:

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

Источник

Adblock
detector