Flask Nginx Guincorn / uwsgi dockerconfiguration

我想在digitalocean上设置一个Flask webiste,其中一些链接可以启动一些由tornando / twisted或其他Flask网站支持的游戏。 网站架构如下图所示:

拱

我见过的大多数教程都是以示例1 , 示例2 , 示例3和一些stackoverflow的答案以某种方式处理这个问题。 我与他们的问题是:

(a)例1虽然可笑容易,但是不透明。 这并不能帮助我正确理解ngnix,gunicorn以使我能够设置我的应用程序,如上图所示。

(b)例2,是我正在尝试使用,但是当我去我的网站的url,它默认为nginx的网页。 我会发布链接到完整的问题。 链接

(c)示例3,不使用Docker。

我的问题是这样的:

(a)我的build议架构甚至可以与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都有一个指向IP的DNSlogging111.222.333.444,nginx可以理解,site1.example.com是你的server1,site2是server2等…(即使所有这些'服务器'托pipe在同一个虚拟机。

  • uwsgi / gunicorn是Flask运行的服务器引擎。

  • Flask是帮助你build立网站的框架,并运行在uwsgi / gunicorn上。

  • Docker可以帮助您对应用程序进行容器化(即,无论部署在何处,都可以轻松部署,重现)

所以,就你的情况来说,你应该为每个应用程序使用一个Docker容器,例如它们都可以在端口8000上运行uwsgi / gunicorn,并为你的应用程序提供服务。 使用docker,部署时,可以使用不同的端口(比如app1-> 8000,app2-> 8001,app3-> 8002)

然后,nginx应该暴露在外面(例如HTTPS / SSL的端口443,HTTP的80端口),并将每个域/ url的请求redirect到合适的服务器端口。

寻找nginx的多个域名为此目的find示例configuration文件(如https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu -14-04-lts )