Как запустить локальный сервер разработки Django через HTTPS с доверенным самоподписной SSL-сертификатом
Создание самоподписной SSL-сертификата для локальной разработки Django всегда было проблемой. До того дня, как я обнаружил mkcert, инструмент с нулевой конфигурацией, который создает локально доверенные сертификаты разработки, ваш браузер не будет жаловаться.
В этом руководстве я поделюсь своим процессом, и вы узнаете, как создать локальный сертификат SSL для вашего проекта Django и запустить его в режиме разработки с включенным HTTPS .
Шаг 1. Создание локального SSL-сертификата
Во-первых, давайте установим mkcert на вашу машину. Если вы работаете в macOS, вы можете использовать для этого диспетчер пакетов Homebrew. Выполните следующую команду в своем терминале:
brew install mkcert
Если вы работаете в Linux или Windows, обратитесь к инструкциям по установке в репозитории пакетов (https://github.com/FiloSottile/mkcert#windows).
Затем давайте сделаем так, чтобы ваша операционная система доверяла локальным сертификатам, которые мы собираемся сгенерировать. Для этого вам необходимо установить локальный центр сертификации (CA) в системном хранилище доверенных сертификатов. Выполните следующую команду:
mkcert -install
Далее вам нужно сгенерировать сертификат для домена localhost.
В терминале перейдите в корень вашего проекта Django. Затем запустите следующую команду терминала, чтобы сгенерировать сертификат для localhost
и 127.0.0.1
:
mkcert -cert-file cert.pem -key-file key.pem localhost 127.0.0.1
Если вы планируете запускать локальный сервер в домене, отличном от localhost, замените localhost доменом по вашему выбору.
Если все прошло правильно, вы должны увидеть следующий результат:
The certificate is at "cert.pem" and the key at "key.pem"
В результате мы сгенерировали локальный сертификат SSL, который будет работать с любым сервером разработки localhost, работающим на любом порту.
К вашему сведению: вы можете повторно использовать этот сертификат с любым локальным проектом, работающим на localhost. Сертификат не имеет ничего общего с Django или Python.
Шаг 2 - Настройка сервера Django для работы с HTTPS
Команда Django manage.py runserver
по умолчанию не поддерживает SSL; поэтому нам нужно использовать альтернативную команду manage.py runserver_plus
, которая является частью отличного пакета Django Extensions.
Выполните следующую команду, чтобы установить расширения Django вместе с сервером Werkzeug:
pip install django-extensions Werkzeug
Команда runserver_plus
требует установки сервера Werkzeug, который более известен в мире фреймворка Python Flask.
Затем откройте файл settings.py
в редакторе кода и добавьте django_extensions
в список INSTALLED_APPS
:
NSTALLED_APPS = [
# other apps
"django_extensions",
]
Наконец, запустите локальный сервер разработки в режиме HTTPS, выполнив команду:
python manage.py runserver_plus --cert-file cert.pem --key-file key.pem
Вот и все; теперь вы должны увидеть локальный сервер разработки, работающий по адресу по умолчанию https://localhost:8000
.