我正在使用Whitenoise在Django应用中提供静态文件。我不正在使用Nginx。我计划在将来像Cloudfront这样的CDN后面使用Whitenoise。参见Whitenoise FAQs。
我一直在寻找可以解决以下问题的部署说明:
由于我没有使用nginx,因此我计划将gunicorn直接绑定到端口80。这将导致错误-Permission Denied
。我可以将gunicorn作为root用户运行,但这似乎是一个不好的方法。
如何处理SSL证书内容?通常,这是由Nginx之类的服务器处理的。
编辑:我正在将我的应用程序部署在Google Cloud Compute Engine的 Ubuntu 18.04 VM 上。
P.S .:矿山不会成为一个人流量大的网站。其他人则使用此配置为流量较高的网站提供服务。参见此Squeezing every drop of performance out of a Django app on Heroku。
答案 0 :(得分:0)
我使用nginx作为http服务器。我在nginx中删除了与静态文件关联的配置,因此静态文件请求被传递到wsgi层(gunicorn),并由Whitenoise处理。因此,您可以按照任何“ nginx + gunicorn + django”部署说明/指南进行操作,只需通过简单的Google搜索即可轻松获得。
此帖子为我清除了该帖子:Deploying your Django static files to AWS (Part 2)。
如前所述,有很多关于在Heroku上部署Django + Whitenoise应用程序的教程。正如评论中指出的那样:
Heroku,它在前端具有自己的代理层,因此根本不相关。
未经验证,我认为这必须是正确的。 gunicorn不是完整的Web服务器。实际上,gunicorn创作者强烈建议在代理服务器(例如Nginx)之后使用它。 See docs。
我很困惑,因为我一直认为Nginx只是一个反向代理。充当静态资产的反向代理只是
我已经知道了。不使用nginx或任何其他Web服务器将是愚蠢的。
Whitenoise可以为静态文件设置适当的缓存头,并使用gzip / brotli启用压缩。与whitenoise.storage.CompressedManifestStaticFilesStorage
一起使用时,它将自动生成版本化的静态文件。例如。 /static/js/app.49ec9402.js
(如果您已将文件作为{%statis%} 'js/app.js'
放在模板中)。版本文件的最大有效期限设置为10年,即永久缓存。
如果您不打算在Heroku上进行部署,您仍将需要Nginx之类的Web服务器。因此,您可以按照任何“ nginx + gunicorn + django”部署说明/指南进行操作,只需通过简单的Google搜索即可轻松获得。 Deploying your Django static files to AWS (Part 2)是其中之一,它帮助我弄清了这个问题。