Команда runserver: настройки сервера разработки

Раздел: Веб-разработка -> Управление проектами Django

Основные способы запуска сервера разработки Django

Наиболее эффективный и простой способ запустить сервер для разработки - использовать команду python manage.py runserver без дополнительных аргументов. Этот вариант подходит для локальной отладки: сервер автоматически запускается на адресе 127.0.0.1:8000 и при каждом изменении кода перезагружается (если не отключено).

python manage.py runserver

Python manage runserver (запуск сервера django (manage.py runserver))

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
April 09, 2025 - 12:00:00
Django version 4.2, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Как запустить сервер на другом порту, если 8000 занят?

Добавьте номер порта первым аргументом. Например, порт 8080:

python manage.py runserver 8080
Starting development server at http://127.0.0.1:8080/
Если порт уже используется, Django выдаст ошибку Error: That port is already in use. Укажите другой порт или завершите процесс, занимающий порт (в Linux/Mac: lsof -ti:8000 | xargs kill; в Windows: netstat -aon | findstr :8000 и завершите процесс через Task Manager).

Как сделать сервер доступным для других устройств в локальной сети?

Укажите IP-адрес 0.0.0.0 (слушает все интерфейсы) и при необходимости порт:

python manage.py runserver 0.0.0.0:8000
Starting development server at http://0.0.0.0:8000/
Сервер будет доступен по локальному IP (например, 192.168.1.5:8000), но только если в settings.py в ALLOWED_HOSTS добавлен этот IP или '*' для разработки. Не используйте 0.0.0.0 в публичных сетях - сервер не защищён.

Как использовать другой файл настроек (например, для продакшна)?

Параметр --settings принимает путь к модулю настроек (в формате Python):

python manage.py runserver --settings=myproject.settings.production
Performing system checks...
Django version 4.2, using settings 'myproject.settings.production'
Starting development server at http://127.0.0.1:8000/
Убедитесь, что указанный модуль настроек существует и не содержит запрещённых для разработки настроек (например, DEBUG=False может скрывать ошибки).

Как отключить автоматическую перезагрузку сервера при изменении файлов?

Ключ --noreload:

python manage.py runserver --noreload
Performing system checks...
System check identified no issues (0 silenced).
April 09, 2025 - 12:00:00
Django version 4.2, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
(No file watching message)
При выключенной перезагрузке изменения кода вступят в силу только после ручного перезапуска сервера. Это удобно для тестирования, когда нужно точное состояние.

Как запустить сервер на конкретном IPv6-адресе?

Укажите адрес с квадратными скобками:

python manage.py runserver [::1]:8000
Starting development server at http://[::1]:8000/
IPv6 может быть не настроен на системе, тогда будет ошибка привязки сокета.

Как указать другой IP-адрес (не 127.0.0.1), не используя 0.0.0.0?

Например, для локального IP 192.168.1.100:

python manage.py runserver 192.168.1.100:8000
Такой IP должен быть присвоен сетевому интерфейсу, иначе будет ошибка 'Cannot assign requested address'.

Как запустить сервер, если manage.py находится не в корне проекта?

Перейдите в каталог с manage.py или укажите полный путь:

cd /path/to/project && python manage.py runserver
python /path/to/project/manage.py runserver
Если выполнять команду из другого каталога, Django может не найти модули приложения. Лучше запускать из корня проекта.

Как использовать альтернативный способ запуска через python -m django?

python -m django runserver 8000
Watching for file changes with StatReloader...
Starting development server at http://127.0.0.1:8000/
Данный способ требует, чтобы модуль django был установлен и доступен, а также чтобы переменная окружения DJANGO_SETTINGS_MODULE была установлена, либо вручную:
DJANGO_SETTINGS_MODULE=myproject.settings python -m django runserver

Типичные проблемы и их решения

Ошибка 'Error: That port is already in use'.

Освободите порт (см. выше) или укажите другой.

Ошибка 'Permission denied' для портов ниже 1024.

Используйте порт выше 1024 или запустите с sudo (не рекомендуется для разработки).

Статические файлы не отображаются.

В режиме разработки Django сам раздаёт статику, если в urls.py добавлены соответствующие маршруты (обычно + static(...)). Проверьте настройки STATIC_URL и DEBUG=True.

Сервер не видит изменения в коде.

Убедитесь, что не включён --noreload, и перезапустите сервер вручную.

Ошибка 'Invalid HTTP_HOST header' при доступе с другого хоста.

Добавьте хост в ALLOWED_HOSTS в settings.py.

Расширенные примеры использования runserver

1. Одновременный запуск нескольких серверов на разных портах (разные проекты)

Пример
# Терминал 1: проект A на порту 8000
cd ~/projects/project_a && python manage.py runserver 8000
Пример
# Терминал 2: проект B на порту 8001
cd ~/projects/project_b && python manage.py runserver 8001
Проект A: Starting development server at http://127.0.0.1:8000/
Проект B: Starting development server at http://127.0.0.1:8001/

2. Запуск с определённым файлом настроек и отключением перезагрузки

Пример
python manage.py runserver 9000 --settings=myapp.settings.staging --noreload
Django version 4.2, using settings 'myapp.settings.staging'
Starting development server at http://127.0.0.1:9000/
Quit the server with CONTROL-C.
(No reloader output)

3. Использование IPv6 и явного адреса с портом 80 (требуются права)

Пример
sudo python manage.py runserver [::]:80
Starting development server at http://[::]:80/
(Сервер слушает все IPv6-интерфейсы на порту 80)
Запуск с sudo небезопасен; используйте только в изолированной среде разработки.

4. Запуск сервера через python -m django с явной установкой модуля настроек

Пример
export DJANGO_SETTINGS_MODULE=myproject.settings.development
python -m django runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Starting development server at http://0.0.0.0:8000/

5. Запуск фонового процесса (Linux/macOS) и его завершение

Пример
python manage.py runserver &
# Сервер запущен в фоне, PID сохранён
# Позже завершить:
kill %1
[1] 12345 (PID)
Starting development server at http://127.0.0.1:8000/

6. Использование переменной окружения для порта

Пример
export PORT=8888
python manage.py runserver $PORT
Starting development server at http://127.0.0.1:8888/

7. Запуск сервера с автоматическим выбором свободного порта (через скрипт)

Пример
# bash скрипт
port=$(python -c "import socket; s=socket.socket(); s.bind(('',0)); print(s.getsockname()[1]); s.close()")
python manage.py runserver $port
Starting development server at http://127.0.0.1:12345/ (случайный свободный порт)

8. Обработка ошибки 'Error: That port is already in use'

Пример
# Узнать PID процесса, занимающего порт 8000
lsof -ti:8000 | xargs kill -9
# Затем запустить снова
python manage.py runserver
(После kill) Starting development server at http://127.0.0.1:8000/

Запуск сервера Django (manage.py runserver) - comments

En
Python manage runserver (python)