Не удается запустить мой проект Django с Apache (пойман сигвинч, завершаюсь корректно)

Вопрос или проблема

Я новичок в веб-разработке, я пытаюсь создать бэкэнд-сайт с использованием python django. Я следовал уроку на w3schools и создал проект django, а теперь пытаюсь развернуть сервер apache на сервере aws ec2.

Каждый раз, когда я запускаю сервер apache, он завершает работу корректно (не знаю почему) и не удается подключиться к странице django.

cat var/log/apache2/error.log

Текущий поток 0x000073cc234fc780 (самый последний вызов сначала):
  <нет фрейма Python>
[Сб 26 окт 12:38:32.114927 2024] [wsgi:warn] [pid 111064:tid 127320602953600] (2)Нет такого файла или каталога: mod_wsgi (pid=111064): Не удается определить домашний каталог Python /home/ubuntu/name/venv. Интерпретатор Python может быть не инициализирован правильно. Проверьте указанный путь и права доступа ко всему пути.
Конфигурация пути Python:
  PYTHONHOME = '/home/ubuntu/name/venv'
  PYTHONPATH = (не установлено)  #для этого я установил путь python в конфигурации, не знаю почему написано не установлено (/home/ubuntu/name/project_name/project_name)

  имя программы="python3"
  изолированный = 0
  окружающая среда = 1
  пользовательский сайт = 1
  безопасный путь = 0
  импорт сайта = 1
  находится в дереве сборки = 0
  stdlib dir="/home/ubuntu/name/venv/lib/python3.12"
  sys._base_executable="/usr/bin/python3"
  sys.base_prefix = '/home/ubuntu/name/venv'
  sys.base_exec_prefix = '/home/ubuntu/name/venv'
  sys.platlibdir="lib"
  sys.executable="/usr/bin/python3"
  sys.prefix = '/home/ubuntu/name/venv'
  sys.exec_prefix = '/home/ubuntu/name/venv'
  sys.path = [
    '/home/ubuntu/name/venv/lib/python312.zip',
    '/home/ubuntu/name/venv/lib/python3.12',
    '/home/ubuntu/name/venv/lib/python3.12/lib-dynload',
  ]
Фатальная ошибка Python: init_fs_encoding: не удалось получить кодек Python для кодировки файловой системы
Состояние выполнения Python: ядро инициализировано
ModuleNotFoundError: Нет модуля с именем 'encodings'

Текущий поток 0x000073cc234fc780 (самый последний вызов сначала):
  <нет фрейма Python>
[Сб 26 окт 12:38:52.405882 2024] [mpm_event:notice] [pid 110875:tid 127320602953600] AH00492: пойман SIGWINCH, корректное завершение работы
[Сб 26 окт 12:38:59.533834 2024] [mpm_event:notice] [pid 111243:tid 130370169661312] AH00489: Apache/2.4.58 (Ubuntu) mod_wsgi/5.0.0 Python/3.12 настроен -- возобновление нормальных операций
[Сб 26 окт 12:38:59.533911 2024] [core:notice] [pid 111243:tid 130370169661312] AH00094: Командная строка: '/usr/sbin/apache2'
[Сб 26 окт 12:39:02.756608 2024] [mpm_event:notice] [pid 111243:tid 130370169661312] AH00493: Получен SIGUSR1. Выполняется корректный перезапуск
[Сб 26 окт 12:39:02.816854 2024] [mpm_event:notice] [pid 111243:tid 130370169661312] AH00489: Apache/2.4.58 (Ubuntu) mod_wsgi/5.0.0 Python/3.12 настроен -- возобновление нормальных операций
[Сб 26 окт 12:39:02.816874 2024] [core:notice] [pid 111243:tid 130370169661312] AH00094: Командная строка: '/usr/sbin/apache2'
[Сб 26 окт 12:40:14.277640 2024] [mpm_event:notice] [pid 111243:tid 130370169661312] AH00492: пойман SIGWINCH, корректное завершение работы
...#повторяющееся корректное завершение работы

Я добавил несколько тестовых функций в settings.py моего проекта django, но не могу их найти в журнале ошибок apache / журнале ошибок django. Проект можно нормально запустить на сервере разработки django.

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

Ответ или решение

Для решения проблемы с запуском вашего проекта Django с использованием Apache и модуль mod_wsgi на сервере AWS EC2, давайте рассмотрим несколько ключевых аспектов, которые могут быть причиной ошибок, которые вы наблюдаете.

1. Проверка конфигурации виртуального окружения

Ошибка:

(2)No such file or directory: mod_wsgi (pid=111064): Unable to stat Python home /home/ubuntu/name/venv.

Это сообщение указывает на то, что путь к вашему виртуальному окружению указан неверно или у Apache нет прав доступа к этому пути. Убедитесь, что:

  • Путь /home/ubuntu/name/venv действительно существует.
  • У Apache есть права на чтение этого каталога.

Для проверки прав выполните команду:

ls -ld /home/ubuntu/name/venv

Если права недостаточны, вы можете изменить их с помощью команды chmod или изменить владельца каталога:

sudo chown -R www-data:www-data /home/ubuntu/name/venv

2. Установка и активирование WSGI

Убедитесь, что модуль mod_wsgi установлен и правильно настроен для работы с вашей версией Python. Выполните команду для проверки установки:

sudo apt-get install libapache2-mod-wsgi-py3

После установки убедитесь, что модуль загружен в конфигурации Apache. Добавьте следующую строку в файл конфигурации вашего виртуального хоста (например, в /etc/apache2/sites-available/your_project.conf):

WSGIDaemonProcess your_project python-home=/home/ubuntu/name/venv python-path=/home/ubuntu/name/project_name
WSGIProcessGroup your_project

3. Проверка настроек Django

Вам следует убедиться, что в файле settings.py вашего Django проекта указаны правильные переменные для развертывания. Проверьте следующее:

ALLOWED_HOSTS = ['your-ec2-public-dns', 'localhost']

Не забудьте также собрать статические файлы, чтобы они были доступны через Apache:

python manage.py collectstatic

4. Проверка логов ошибок

Обратите внимание на логи ошибок Apache, чтобы найти более детальную информацию о проблеме. Логи можно найти по адресу: /var/log/apache2/error.log. Используйте следующий запрос, чтобы быстро найти ошибки:

tail -f /var/log/apache2/error.log

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

5. Перезапуск сервера Apache

После внесения всех изменений, обязательно перезапустите Apache для применения настроек:

sudo systemctl restart apache2

6. Отладка

Если после выполнения всех вышеперечисленных шагов проблема не исчезает, вы можете выполнить отладку, добавив дополнительные сообщения в ваш settings.py, чтобы убедиться, что файл загружается. Также рассмотрите возможность использования командной строки для непосредственного запуска WSGI-сервера.

7. Использование логирования Django

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

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/path/to/your/django/debug.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

Это позволит вам получать более полное представление о состоянии вашего приложения и выявлять ошибки в процессе выполнения.

Заключение

Следуя вышеперечисленным шагам, вы сможете устранить ошибки и правильно настроить ваш проект Django с Apache на AWS EC2. Если возникнут вопросы, погружайтесь в документацию Django и Apache, или обращайтесь за помощью к сообществу разработчиков.

Оцените материал
Добавить комментарий

Капча загружается...