部署Ubuntu 16服务器后Django静态文件无法加载求助
嘿,我之前在Ubuntu 16上折腾Django+Apache+mod_wsgi部署的时候,也被静态文件加载失败的问题卡过好久。结合你给出的.conf片段,咱们一步步排查可能的问题:
你给出的配置代码不完整,首先得确保静态文件目录的权限配置完整,同时WSGI脚本的指向也不能错。完整的配置应该类似这样:
Alias /media/ /var/www/fpbg/media Alias /static/ /var/www/fpbg/static <Directory /var/www/fpbg/media> Require all granted </Directory> <Directory /var/www/fpbg/static> Require all granted </Directory> # 核心:WSGI脚本的路径要精准指向项目里的wsgi.py WSGIScriptAlias / /var/www/fpbg/fpbg/wsgi.py <Directory /var/www/fpbg/fpbg> <Files wsgi.py> Require all granted </Files> </Directory>
这里要特别注意:所有路径必须完全匹配你的实际文件位置,多一层或少一层目录都会出问题。
静态文件加载失败,大概率和collectstatic命令没执行对有关:
- 先检查项目
settings.py里的关键配置,确保这几个参数没写错:
DEBUG = False # 生产环境必须关闭DEBUG ALLOWED_HOSTS = ['你的服务器IP/域名'] # 别留空 STATIC_URL = '/static/' STATIC_ROOT = '/var/www/fpbg/static' # 这个路径必须和Apache Alias里的完全一致 MEDIA_URL = '/media/' MEDIA_ROOT = '/var/www/fpbg/media'
- 然后在项目根目录执行收集命令:
python manage.py collectstatic
执行完后,去/var/www/fpbg/static目录下看看,应该能看到所有app的静态文件(比如admin的css、js文件夹)。如果目录是空的,说明收集过程出错了,回去检查settings.py里的INSTALLED_APPS是否包含需要静态文件的app,或者路径有没有拼写错误。
Ubuntu 16上Apache默认以www-data用户运行,所以静态文件目录必须让这个用户能访问:
# 把目录所有者改成www-data sudo chown -R www-data:www-data /var/www/fpbg/static sudo chown -R www-data:www-data /var/www/fpbg/media # 设置安全的权限(别用777,不安全还可能被Apache拒绝) sudo chmod -R 755 /var/www/fpbg/static sudo chmod -R 755 /var/www/fpbg/media
每次修改配置或权限后,一定要重启Apache生效:
sudo service apache2 restart
如果还是不行,直接看Apache的错误日志找线索——这是最有效的排查方式:
sudo tail -f /var/log/apache2/error.log
日志里会明确告诉你问题,比如“Permission denied”(权限不够)、“File not found”(路径错了),照着提示改就行。
最新版Django一般用Python3,但Ubuntu 16默认的mod_wsgi可能是Python2版本的,这会导致静态文件收集或加载异常:
- 先检查当前mod_wsgi绑定的Python版本:
mod_wsgi-express module-config
如果输出里是Python2的路径,赶紧安装Python3版本的mod_wsgi:
sudo apt-get install libapache2-mod-wsgi-py3 sudo a2enmod wsgi sudo service apache2 restart
内容的提问来源于stack exchange,提问作者Tural

