Debian系统DigitalOcean虚拟机用Apache部署Django应用的问题与步骤
问题诊断与解决方案
核心原因:缺少WSGI配置
你看到文件列表,是因为Apache仅在做静态文件目录的遍历,没有把HTTP请求转发给Django的WSGI应用——这就是问题的关键,必须配置mod_wsgi来连接Apache和Django。
具体修复步骤
1. 安装mod_wsgi
Debian系统下先安装依赖模块:
sudo apt-get update sudo apt-get install libapache2-mod-wsgi-py3
(注:如果你的Django用Python2,替换成libapache2-mod-wsgi,现在主流都是Python3)
2. 修改attendance.conf配置
更新你的VirtualHost配置,添加WSGI相关指令,示例如下:
<VirtualHost *:80> ServerAdmin admin@143.244.134.97 ServerName 143.244.134.97 ServerAlias 143.244.134.97 # 设置WSGI应用运行环境 WSGIDaemonProcess attendance python-path=/var/www/attendance:/home/your-user/.local/lib/python3.x/site-packages WSGIProcessGroup attendance # 将根路径请求转发到Django的wsgi.py WSGIScriptAlias / /var/www/attendance/attendance/wsgi.py # 允许Apache访问wsgi.py文件 <Directory /var/www/attendance/attendance> <Files wsgi.py> Require all granted </Files> </Directory> # 配置静态文件访问(需先执行collectstatic收集) Alias /static/ /var/www/attendance/static/ <Directory /var/www/attendance/static> Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
说明:
WSGIDaemonProcess里的python-path要包含你的Django项目目录,以及Python包安装路径(如果用虚拟环境,替换成虚拟环境的site-packages路径)- 静态文件部分:先在Django项目里执行
python manage.py collectstatic,把所有静态文件收集到指定目录(比如示例中的/var/www/attendance/static)
3. 调整文件权限
确保Apache进程(用户为www-data)能访问项目目录:
sudo chown -R www-data:www-data /var/www/attendance sudo chmod -R 755 /var/www/attendance
4. 重启Apache服务
sudo systemctl restart apache2
其他排查点
- 检查Django项目的
settings.py:必须设置DEBUG = False(上线要求),ALLOWED_HOSTS里要加你的公网IP143.244.134.97 - 查看Apache错误日志定位问题:
tail -f /var/log/apache2/error.log,比如依赖缺失、路径错误都会在这里显示
Apache部署Django上线的必要步骤
服务器环境准备
- 更新系统包:
sudo apt update && sudo apt upgrade - 安装Python、pip、Apache、mod_wsgi
- 可选:创建Python虚拟环境,隔离项目依赖
- 更新系统包:
项目部署
- 将Django项目上传到服务器(比如/var/www/目录)
- 安装项目依赖:
pip install -r requirements.txt(用虚拟环境的话先激活)
Django项目配置
- 修改
settings.py:关闭DEBUG模式,配置ALLOWED_HOSTS(域名/公网IP) - 配置数据库:如果用PostgreSQL/MySQL等,安装对应驱动并设置连接参数
- 收集静态文件:
python manage.py collectstatic
- 修改
Apache配置
- 创建站点配置文件(如attendance.conf),配置VirtualHost,包含WSGI转发、静态文件别名
- 启用站点:
sudo a2ensite attendance.conf,禁用默认站点:sudo a2dissite 000-default.conf - 启用mod_wsgi:
sudo a2enmod wsgi(安装后一般自动启用,可手动确认)
权限与服务启动
- 设置项目目录权限,确保www-data用户可访问
- 重启Apache,验证服务状态:
sudo systemctl status apache2
上线验证
- 用公网IP/域名访问,检查页面加载情况
- 查看日志排查异常,确保功能正常运行
内容的提问来源于stack exchange,提问作者Milan Bhandari
相关产品推荐
相关产品推荐

