繁体   English   中英

如何使用 gunicorn 部署 Django + Whitenoise 应用程序?

[英]How to deploy a Django + Whitenoise application using gunicorn?

我正在使用Whitenoise在我的 Django 应用程序中提供静态文件。 没有使用 Nginx。 我计划将来在像 Cloudfront 这样的 CDN 后面使用 Whitenoise。 请参阅白噪声常见问题解答

我一直在寻找处理这些问题的部署说明:

  1. 由于我没有使用nginx,我打算将gunicorn直接绑定到80端口,这样就报错了——Permission Permission Denied 我可以以 root 身份运行 gunicorn,但这似乎是一种糟糕的方法。

  2. 如何处理 SSL 证书的东西? 通常这是由 Nginx 等服务器处理的。

编辑:我正在 Google Cloud Compute Engine 上的Ubuntu 18.04 VM上部署我的应用程序。

PS:我的不会是一个流量很高的网站。 其他人使用此配置为高流量网站提供服务。 请参阅此从 Heroku 上的 Django 应用程序中榨取每一滴性能

长话短说

我使用 nginx 作为 http 服务器。 我去掉了nginx中静态文件相关的配置,这样静态文件请求就传到了wsgi层(gunicorn),交由Whitenoise处理。 因此,您可以遵循任何“nginx + gunicorn + django”部署说明/教程,通过简单的谷歌搜索即可轻松获得这些说明/教程。

这篇文章为我解决了这个问题: 将 Django 静态文件部署到 AWS(第 2 部分)

长答案

如前所述,有很多关于在 Heroku 上部署 Django + Whitenoise 应用程序的教程。 正如评论中指出的那样:

Heroku,它在前端有自己的代理层,因此根本不相关。

在没有验证这个说法的情况下,我认为这一定是真的。 gunicorn 不是一个完整的网络服务器。 事实上,gunicorn 的创建者强烈建议在代理服务器(例如 Nginx)后面使用它。 请参阅文档

我很困惑,因为我一直认为 Nginx 只是一个反向代理。 作为静态资产的反向代理只是nginx的功能之一。 它提供了更多功能,例如缓冲慢速客户端(gunicorn 没有),这有助于防止拒绝服务攻击。

我已经知道了。 不使用 nginx 或任何其他网络服务器是愚蠢的。

Whitenoise 就在那里为静态文件设置适当的缓存标头并使用 gzip/brotli 启用压缩。 当与whitenoise.storage.CompressedManifestStaticFilesStorage一起使用时,它会自动生成版本化的静态文件。 例如。 /static/js/app.49ec9402.js如果您已将文件作为{%statis%} 'js/app.js'放在模板中。 版本化文件会将 max-age 设置为 10 年,即永远缓存。

如果你不在 Heroku 上部署,你仍然需要像 Nginx 这样的网络服务器 因此,您可以遵循任何“nginx + gunicorn + django”部署说明/教程,通过简单的谷歌搜索即可轻松获得这些说明/教程。 其中之一是将 Django 静态文件部署到 AWS(第 2 部分) ,这帮助我解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM