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

Ubuntu16.04服务器上Django2.0与Apache2、WSGI部署故障求助

结合你给出的环境配置(Ubuntu 16.04 Server、Django 2.0、Python 3.5、Apache2.4 + WSGI),我来帮你一步步排查并解决Django部署的常见问题——毕竟我踩过不少类似的坑:

1. 先确认Python3对应的WSGI模块已正确安装启用

Ubuntu 16.04默认自带的WSGI模块是针对Python2的,而你用的是Python3.5,必须安装对应版本的模块:

  • 安装模块:
    sudo apt-get install libapache2-mod-wsgi-py3
    
  • 启用模块:
    sudo a2enmod wsgi
    
  • 重启Apache让配置生效:
    sudo systemctl restart apache2
    
2. 配置Apache站点文件(核心步骤)

你需要创建一个专门的站点配置文件,指向你的Django项目。比如创建/etc/apache2/sites-available/datasystems.conf,内容如下:

<VirtualHost *:80>
    # 替换成你的服务器域名或公网IP
    ServerName your-server-ip-or-domain

    # 项目根目录
    DocumentRoot /var/www/html/DatasystemsCORE

    # 指向WSGI脚本文件
    WSGIScriptAlias / /var/www/html/DatasystemsCORE/DatasystemsCORE/wsgi.py

    # 允许Apache访问WSGI脚本所在目录
    <Directory /var/www/html/DatasystemsCORE/DatasystemsCORE>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    # 静态文件映射(Django部署必须配置,否则静态资源加载失败)
    Alias /static/ /var/www/html/DatasystemsCORE/static/
    <Directory /var/www/html/DatasystemsCORE/static>
        Require all granted
    </Directory>

    # 如果项目用到用户上传的媒体文件,添加这段配置
    Alias /media/ /var/www/html/DatasystemsCORE/media/
    <Directory /var/www/html/DatasystemsCORE/media>
        Require all granted
    </Directory>

    # 如果你用了虚拟环境,取消下面两行注释并替换虚拟环境路径
    # WSGIDaemonProcess datasystems python-path=/var/www/html/DatasystemsCORE:/path/to/your/venv/lib/python3.5/site-packages
    # WSGIProcessGroup datasystems
</VirtualHost>

配置完成后,启用这个站点并重启Apache:

sudo a2ensite datasystems.conf
sudo systemctl restart apache2
3. 补全并检查WSGI.py文件

你提供的wsgi.py内容被截断了,完整的文件应该包含Python路径的设置(确保Django能找到项目):

import os
import sys

# 将项目根目录添加到Python路径
sys.path.append('/var/www/html/DatasystemsCORE')

from django.core.wsgi import get_wsgi_application

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

application = get_wsgi_application()
4. 修复文件权限(最容易忽略的坑)

Apache运行的用户是www-data,必须确保它能访问甚至读写你的项目文件:

  • 递归修改项目目录的所属用户和组:
    sudo chown -R www-data:www-data /var/www/html/DatasystemsCORE
    
  • 调整目录和文件的权限:
    sudo chmod -R 755 /var/www/html/DatasystemsCORE
    
  • 如果你用的是SQLite数据库,还要单独给数据库文件加读写权限:
    sudo chmod 664 /var/www/html/DatasystemsCORE/db.sqlite3
    
5. 验证Django项目本身是否正常

先排除项目自身的问题:

  • 进入项目目录:
    cd /var/www/html/DatasystemsCORE
    
  • 执行数据库迁移(如果还没做):
    python3 manage.py migrate
    
  • 重点:收集静态文件(部署时必须执行,Django会把所有app的静态文件集中到static目录):
    python3 manage.py collectstatic
    
  • 临时启动开发服务器测试:
    python3 manage.py runserver 0.0.0.0:8000
    

如果能通过服务器IP:8000正常访问,说明项目本身没问题,问题大概率出在Apache配置。

6. 查看Apache错误日志定位问题

如果以上步骤都做完还是不行,直接看错误日志找具体原因:

tail -n 50 /var/log/apache2/error.log

日志里会明确提示是模块缺失、权限不足还是配置语法错误,针对性解决即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:25:54