You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache mod_wsgi部署Django报No module named 'django.core'排查

问题现象

Apache服务运行时wsgi:error日志持续抛出ModuleNotFoundError: No module named 'django.core'错误,mod_wsgi进程无法正常执行项目路径/root/novo-ai-api-main/backend/server/server/wsgi.py脚本,Django服务无法启动,对应错误日志如下:

[Thu Jun 16 20:32:08.505090 2022] [wsgi:error] [pid 131476:tid 140411386394368] [remote 193.32.127.157:53433] Traceback (most recent call last):
[Thu Jun 16 20:32:08.505133 2022] [wsgi:error] [pid 131476:tid 140411386394368] [remote 193.32.127.157:53433]   File "/root/novo-ai-api-main/backend/server/server/wsgi.py", line 18, in <module>
[Thu Jun 16 20:32:08.505139 2022] [wsgi:error] [pid 131476:tid 140411386394368] [remote 193.32.127.157:53433]     from django.core.wsgi import get_wsgi_application
[Thu Jun 16 20:32:08.505159 2022] [wsgi:error] [pid 131476:tid 140411386394368] [remote 193.32.127.157:53433] ModuleNotFoundError: No module named 'django.core'
[Thu Jun 16 20:48:58.603180 2022] [wsgi:error] [pid 131476:tid 140411361216256] [remote 200.110.48.158:35204] mod_wsgi (pid=131476): Failed to exec Python script file '/root/novo-ai-api-main/backend/server/server/wsgi.py'.
[Thu Jun 16 20:48:58.603316 2022] [wsgi:error] [pid 131476:tid 140411361216256] [remote 200.110.48.158:35204] mod_wsgi (pid=131476): Exception occurred processing WSGI script '/root/novo-ai-api-main/backend/server/server/wsgi.py'.
[Thu Jun 16 20:48:58.603447 2022] [wsgi:error] [pid 131476:tid 140411361216256] [remote 200.110.48.158:35204] Traceback (most recent call last):
[Thu Jun 16 20:48:58.603477 2022] [wsgi:error] [pid 131476:tid 140411361216256] [remote 200.110.48.158:35204]   File "/root/novo-ai-api-main/backend/server/server/wsgi.py", line 18, in <module>
[Thu Jun 16 20:48:58.603483 2022] [wsgi:error] [pid 131476:tid 140411361216256] [remote 200.110.48.158:35204]     from django.core.wsgi import get_wsgi_application
[Thu Jun 16 20:48:58.603506 2022] [wsgi:error] [pid 131476:tid 140411361216256] [remote 200.110.48.158:35204] ModuleNotFoundError: No module named 'django.core'
已完成配置与操作
  • 已正确安装适配Python 3.8版本的mod_wsgi模块
  • 已配置Apache虚拟主机文件000-default.conf,设置DocumentRoot、日志路径、wsgi.py访问权限、静态资源映射、WSGI相关规则,对应配置如下:
<VirtualHost *:80>
        DocumentRoot /root/novo-ai-api-main
        ErrorLog /root/novo-ai-api-main/error.log
        CustomLog /root/novo-ai-api-main/access.log combine
        <Directory /root/novo-ai-api-main/backend/server/server>
                <Files wsgi.py>
                         Require all granted
                </Files>
        </Directory>
        Alias /static /root/novo-ai-api-main/static
        <Directory /root/novo-ai-api-main/static>
                Require all granted
        </Directory>
        WSGIScriptAlias / /root/novo-ai-api-main/backend/server/server/wsgi.py
        WSGIDaemonProcess django_app python-path=/root/novo-ai-api-main/backend/server  python-home=/root/novo-ai-api-main/backend/django/
        WSGIProcessGroup django_app
</VirtualHost>
  • 已配置apache2.conf,设置服务运行参数、目录访问权限、配置引入规则,对应配置如下:
ServerRoot "/etc/apache2"
Timeout 300
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
LogLevel warn
<Directory />
        Options FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
<Directory /var/www/>
        AllowOverride All
        Require all granted
</Directory>
<Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
  • 已配置wsgi.py,手动引入虚拟环境依赖路径、设置Django环境变量、初始化wsgi应用,对应代码如下:
import os, sys
import site
site.addsitedir('/root/novo-ai-api-main/django/lib/python3.8/site-packages')
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings')
application = get_wsgi_application()
  • 已为项目目录、后端目录、静态资源目录、Python虚拟环境目录配置www-data用户访问权限,对应权限信息如下:
drwx--x--x  9 root     root       4096 Jun 16 22:05 .
drwxr-xr-x 19 root     root       4096 Jun 14 14:05 ..
drwxr-xr-x  3 root     root       4096 Jun 13 23:38 .local
drwxrwxr-x  8 root     root       4096 Jun 16 01:24 mod_wsgi-4.9.2
drwxr-xr-x  5 www-data www-data   4096 Jun 14 23:53 novo-ai-api-main (项目目录)
drwxr-xr-x  5 www-data www-data     4096 Jun 14 23:14 backend
drw-r--r-- 8 www-data www-data     4096 Jun 14 00:33 static
drwxr-xr-x 6 www-data www-data 4096 Jun 14 00:16 django (Python虚拟环境目录)
故障根因定位

共3个核心问题直接导致报错:

  1. 虚拟环境路径配置前后不一致:Apache虚拟主机配置中WSGIDaemonProcess的python-home参数写的是/root/novo-ai-api-main/backend/django/,但wsgi.py中手动添加的site-packages路径是/root/novo-ai-api-main/django/lib/python3.8/site-packages,两个路径不匹配,mod_wsgi无法从配置的虚拟环境路径中找到Django安装包。
  2. 静态目录缺少执行权限:静态资源目录/root/novo-ai-api-main/static权限为drw-r--r--,目录没有执行(x)权限,www-data用户无法进入该目录读取文件,即使Django启动成功静态资源也会返回403。
  3. 项目部署在/root目录下存在权限隐患:/root目录默认是root用户专属目录,当前权限为drwx--x--x,www-data作为其他用户仅能通过已知文件名访问下层文件,一旦上层路径权限变更会直接导致服务访问失败。
修复方案

按以下步骤操作即可解决问题:

  1. 先确认Django所在虚拟环境的真实路径,激活虚拟环境后执行以下命令查看路径:
    which python
    
    • 如果虚拟环境真实路径为/root/novo-ai-api-main/backend/django,则修改wsgi.py中的site.addsitedir路径为对应正确路径:
      site.addsitedir('/root/novo-ai-api-main/backend/django/lib/python3.8/site-packages')
      
    • 如果虚拟环境真实路径是/root/novo-ai-api-main/django,则修改Apache虚拟主机配置中WSGIDaemonProcess的python-home参数为:
      WSGIDaemonProcess django_app python-path=/root/novo-ai-api-main/backend/server python-home=/root/novo-ai-api-main/django
      
    路径配置统一后,建议删除wsgi.py中手动添加site路径的代码,mod_wsgi会自动从python-home配置的虚拟环境中加载依赖,不需要手动追加路径,避免后续路径变更出现冲突。
  2. 修复静态目录权限,给目录添加执行权限:
    chmod o+x /root/novo-ai-api-main/static
    
  3. (推荐)将项目迁移到/var/www/目录下,避免/root目录的权限限制,迁移后同步修改Apache配置中所有涉及项目路径的参数,再重新给www-data用户授权项目目录权限即可。
  4. 重启Apache服务生效配置:
    systemctl restart apache2
    

内容的提问来源于stack exchange,提问作者Tess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 06:36:16