无法在 aws Ubuntu 服务器上部署 django + apache

Unabled to deploy django + apache on aws Ubuntu server

我正在尝试在 Ubuntu 服务器上使用 Apache 部署 Django 应用程序,但在使用端口 :80 时出现奇怪的错误(500 内部错误服务器错误)。

我使用端口 :8000 进行了一些测试 运行 命令:

python3 manage.py runserver 0.0.0.0:8000

应用程序在那里运行没有任何问题,但是当我尝试使用端口 80 访问应用程序时它确实可以运行。

我的 apache 配置文件如下所示:

<VirtualHost *:80>


Alias /static /home/ubuntu/gh_system/static
<Directory /home/ubuntu/gh_system/static>
    Require all granted
</Directory>

<Directory /home/ubuntu/gh_system/HRSYSTEM>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

WSGIDaemonProcess HRSYSTEM python-home=/home/ubuntu/gh_system/env python-path=/home/ubuntu/gh_system>
WSGIProcessGroup HRSYSTEM
WSGIScriptAlias / /home/ubuntu/gh_system/HRSYSTEM/wsgi.py

我查看了 apached2 错误日志,我得到:没有名为 'django' 的模块,我的 wsgi 文件是:

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "HRSYSTEM.settings")

application = get_wsgi_application()

经过一些研究、测试和审查 apache 日志:

sudo tail -100 /var/log/apache2/error.log

我发现问题与这一行有关:

WSGIDaemonProcess HRSYSTEM ***python-home=/home/ubuntu/gh_system/env*** python-path=/home/ubuntu/gh_system>

基本上,apache 试图读取虚拟环境中的包,但我确实使用以下命令安装了它们:

sudo pip3 install -r requirements.txt

显然,使用“sudo”命令是在虚拟环境之外安装软件包,这很奇怪;但是如果没有“sudo”,控制台会记录错误权限被拒绝,所以我向虚拟环境授予 chmod 700 权限,并在没有“sudo”的情况下再次安装包,然后它就可以工作了!

我了解到的关于错误的一些事情:

Problem: Not module 'encodings' --> this problem occurs when apache can not access your packages, usually for a bad path specified in the config file.

Problem: Not module 'x module, could be django' means you need to install the package using pip3.

希望对大家有所帮助!只是要指出,我最近学到的东西是:当你花太多时间试图解决一个问题,而互联网上没有太多关于它的信息时,这意味着你的某些非常非常基本的东西失败了项目;例如,像我一样在虚拟环境之外安装包,甚至没有意识到。