Ubuntu18.04下Apache部署Django项目遇500内部服务器错误排查
问题背景
在Ubuntu 18.04系统部署Django项目时,本地通过python manage.py runserver 0.0.0.0:8000测试完全正常,但配置Apache后出现500内部服务器错误,日志提示ModuleNotFoundError: No module named 'django'。尝试修改wsgi.py和Apache虚拟主机配置后,错误依旧。
核心错误点
你在更新Apache配置时把所有关键的WSGI配置代码全部注释掉了,导致Apache无法识别Django项目的虚拟环境,只能使用系统默认的Python环境(该环境未安装Django),这是引发模块找不到错误的根本原因。
另外,手动在wsgi.py中添加虚拟环境site-packages路径的操作冗余,且不能替代Apache的WSGI守护进程配置。
具体修复步骤
1. 恢复并修正Apache虚拟主机配置
将修改后的Apache配置中被注释的关键部分取消注释,确保WSGIDaemonProcess的路径完整正确,以下是修正后的完整配置:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined Alias /static /home/user/project/static <Directory /home/user/project/static> Require all granted </Directory> Alias /media /home/user/project/media <Directory /home/user/project/media> Require all granted </Directory> <Directory /home/user/project/project> <Files wsgi.py> Require all granted </Files> </Directory> WSGIScriptAlias / /home/user/project/project/wsgi.py WSGIDaemonProcess project python-path=/home/user/project python-home=/home/user/project/venv WSGIProcessGroup project ServerName server_domain_name_or_IP <Directory /var/www/html/> AllowOverride All </Directory> </VirtualHost>
注意:确保python-home=/home/user/project/venv是你的虚拟环境实际路径,路径不能出现截断(比如你之前配置中的/home/user$是错误的)。
2. 简化wsgi.py配置
不需要手动添加虚拟环境site-packages路径,因为WSGIDaemonProcess的python-home参数已经让Apache使用虚拟环境的Python解释器,自动加载虚拟环境内的所有包。简化后的wsgi.py如下:
import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') application = get_wsgi_application()
3. 验证虚拟环境目录权限
确保www-data用户能访问虚拟环境目录,执行以下命令:
sudo chmod -R 755 /home/user/project/venv sudo chown -R user:www-data /home/user/project/venv
4. 重启Apache服务
应用配置更改并重启Apache:
sudo systemctl restart apache2
验证修复
访问你的服务器域名或IP地址,查看是否能正常加载Django项目;如果仍有错误,查看Apache错误日志进一步排查:
tail -f /var/log/apache2/error.log
内容的提问来源于stack exchange,提问作者A_K

