Какова команда для запуска сервера WSGI для Django?

Я разработал приложение на Django, которое я обычно запускаю в режиме разработки:

python manage.py runserver

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

Из документации Django мне не ясно, как:

  • Для простоты я выбрал wsgi (а не asgi): https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/ . Из этой страницы мне не ясно, как изменить команду 'runserver', чтобы запустить сервер wsgi на сервере разработки. Должен ли я запустить файл wsgi.py? Похоже, это ничего не дает.
  • Из приведенной выше страницы неясно, является ли wsgi действительно сервером, или это скорее платформа/тип серверов. Нужно ли мне использовать uwsgi/uvicorn/etc. вместо этого?
  • .
  • Я тестирую на windows - uvicorn только для unix, поэтому я попробовал uwsgi, но он выдает следующее сообщение об ошибке: AttributeError: module 'os' has no attribute 'uname' - я предполагаю, что он тоже только для Unix
  • .
  • Итак, я использую образ docker, который я уже собирал для развертывания - uwsgi снова дает мне проблемы, потому что мой образ docker не имеет компилятора, так что я пробую теперь с gunicorn.
  • это должно быть просто: gunicorn project.wsgi, что дает мне:

ModuleNotFoundError: Нет модуля с именем 'project/wsgi'

  • моя структура папок выглядит так:

  • корневая папка

    • проект
      • wsgi.py
      • settings.py
    • django_app_1
    • django_app_2 manage.py

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

Наверное, я упускаю что-то очень очевидное - кто знает что?

Файл wsgi.py просто дает вам приложение, совместимое с WSGI, которое может запустить HTTP-сервер WSGI (например, Gunicorn).

Полагаю, что вам нужно запустить gunicorn project.wsgi из корневой папки (той, что содержит модуль project).

Обычно каталог, содержащий manage.py, и модуль, в котором находится wsgi.py, являются одним и тем же. Но не в вашем случае.

Вернуться на верх