Flask Nginx Guincorn/uwsgi docker 配置
Flask Nginx Guincorn/uwsgi docker configuration
我想在 digitalocean 上设置一个 Flask 网站,其中有一些 link 可以启动一些由 tornando/twisted 支持的游戏或其他 Flask 网站。网站架构如下图所示:
我看过的大多数教程 Example 1, Example 2 , Example 3 和一些 Whosebug 答案都以这样或那样的方式处理这个问题。我对他们的问题是:
(a) 示例 1 虽然非常简单,但却是不透明的。它并不能帮助我正确地理解 ngnix、gunicorn 来使我能够像上图那样设置我的应用程序。
(b) 示例 2 是我尝试使用的,但是当我访问我的站点 url 时,它默认为 nginx 网页。 我会 post link 完整的问题。
(c) 例3,不使用Docker。
我的问题是:
(a) 我提出的架构在 Docker、Flask、Nginx 和 uwsgi/gunicorn 的组合下是否可行?有没有更好的办法?
(b) 我应该使用 Docker 吗?我想用Docker学习如何使用docker-compose并最终Docker Swarm,但如果太麻烦,我愿意完全放弃这个想法。
感谢您的回复。
nginx 是您的反向代理:它将来自 url 的调用定向到正确的服务器。您需要 nginx 能够接收来自多个 URL / 域名到同一 IP 地址的请求:例如,如果 site1.example.com、site2.example.com 和 site3.example.com 都具有 DNS记录指向 IP 111.222.333.444,nginx 可以理解 site1.example.com 是你的 server1,site2 是 server2 等等...(即使所有这些 'servers' 都托管在同一个虚拟机上。
uwsgi/gunicorn 是 Flask 运行 所在的服务器引擎。
Flask 是帮助您构建网站的框架,运行s 在 uwsgi/gunicorn.
Docker 帮助您将应用程序容器化(即使它们易于部署,无论部署在何处都可重现)
因此,在您的情况下,您应该为每个应用程序使用一个 Docker 容器,例如,它们都可以 运行 uwsgi/gunicorn 在端口 8000 上,并为您的应用程序提供服务。
使用 docker,在部署时,您可以使用不同的端口公开这些容器(例如 app1->8000、app2->8001、app3->8002)
然后 nginx 应该暴露在外部(即 HTTPS/SSL 的端口 443,HTTP 的 80)并将每个 domain/url 的请求重定向到正确的服务器端口。
查找 nginx 多个域以找到用于此目的的示例配置文件(如 https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-14-04-lts)
我想在 digitalocean 上设置一个 Flask 网站,其中有一些 link 可以启动一些由 tornando/twisted 支持的游戏或其他 Flask 网站。网站架构如下图所示:
我看过的大多数教程 Example 1, Example 2 , Example 3 和一些 Whosebug 答案都以这样或那样的方式处理这个问题。我对他们的问题是:
(a) 示例 1 虽然非常简单,但却是不透明的。它并不能帮助我正确地理解 ngnix、gunicorn 来使我能够像上图那样设置我的应用程序。
(b) 示例 2 是我尝试使用的,但是当我访问我的站点 url 时,它默认为 nginx 网页。 我会 post link 完整的问题。
(c) 例3,不使用Docker。
我的问题是:
(a) 我提出的架构在 Docker、Flask、Nginx 和 uwsgi/gunicorn 的组合下是否可行?有没有更好的办法?
(b) 我应该使用 Docker 吗?我想用Docker学习如何使用docker-compose并最终Docker Swarm,但如果太麻烦,我愿意完全放弃这个想法。
感谢您的回复。
nginx 是您的反向代理:它将来自 url 的调用定向到正确的服务器。您需要 nginx 能够接收来自多个 URL / 域名到同一 IP 地址的请求:例如,如果 site1.example.com、site2.example.com 和 site3.example.com 都具有 DNS记录指向 IP 111.222.333.444,nginx 可以理解 site1.example.com 是你的 server1,site2 是 server2 等等...(即使所有这些 'servers' 都托管在同一个虚拟机上。
uwsgi/gunicorn 是 Flask 运行 所在的服务器引擎。
Flask 是帮助您构建网站的框架,运行s 在 uwsgi/gunicorn.
Docker 帮助您将应用程序容器化(即使它们易于部署,无论部署在何处都可重现)
因此,在您的情况下,您应该为每个应用程序使用一个 Docker 容器,例如,它们都可以 运行 uwsgi/gunicorn 在端口 8000 上,并为您的应用程序提供服务。 使用 docker,在部署时,您可以使用不同的端口公开这些容器(例如 app1->8000、app2->8001、app3->8002)
然后 nginx 应该暴露在外部(即 HTTPS/SSL 的端口 443,HTTP 的 80)并将每个 domain/url 的请求重定向到正确的服务器端口。
查找 nginx 多个域以找到用于此目的的示例配置文件(如 https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-14-04-lts)