生产环境Django如何在cPanel Linux共享主机上托管用户上传媒体文件
Django cPanel环境媒体文件访问配置调整方案
现有配置问题
MEDIA_URL为空,未指定媒体文件的访问路由前缀MEDIA_ROOT放在了静态文件收集目录staticfiles下,Whitenoise默认仅处理collectstatic生成的静态资源,不会托管用户动态上传的媒体文件- 生产环境(
DEBUG=False)下Django默认不提供媒体文件访问服务,需要适配cPanel的请求规则
具体修改步骤
1. 调整settings.py配置
修改媒体相关配置,将媒体存储目录和静态文件目录分离:
STATIC_ROOT = BASE_DIR / 'staticfiles' STATIC_URL = '/static/' # 设置媒体文件访问前缀 MEDIA_URL = '/media/' STATICFILES_DIRS =[ BASE_DIR/ 'static' ] # 单独设置媒体文件存储目录,放在项目根目录下 MEDIA_ROOT = BASE_DIR / 'media'
创建项目根目录下的media文件夹,用于存储所有用户上传的媒体文件。
2. 调整urls.py配置
确保媒体路由正确注册:
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # 保留原有所有路由规则 ] # 补充媒体文件路由(开发环境生效,生产环境依赖cPanel重写规则) urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
3. 配置cPanel重写规则
在cPanel绑定域名对应的public_html目录下找到.htaccess文件,新增以下规则,注意替换路径为自己的项目实际路径:
# 媒体文件请求直接转发到media目录 RewriteRule ^media/(.*)$ /home/你的cPanel用户名/你的项目目录名/media/$1 [L] # 原有passenger部署相关规则保留在下方
4. 配置目录权限
给media目录设置可读可写权限,确保网站运行用户可以读写该目录:
- 命令行执行:
chmod -R 755 /home/你的cPanel用户名/你的项目目录名/media - 也可以直接在cPanel文件管理器中右键media目录,修改权限为755
5. 重启服务验证
在cPanel的Python应用管理界面重启项目,或者在项目根目录创建tmp/restart.txt文件触发passenger重启。上传测试图片后访问你的域名/media/图片文件名即可正常访问。
注意:Whitenoise仅用于托管静态资源,不处理动态上传的媒体文件,上述配置将媒体请求直接通过Apache转发,性能更高也更稳定。
内容的提问来源于stack exchange,提问作者AsadMalik
相关产品推荐
相关产品推荐

