适用于多个网站的Docker设置

时间:2016-02-13 21:05:20

标签: php ssl nginx docker scaling

我想知道使用简单的LEMP堆栈设置多个网站的正确流程是什么。假设我有一台来自Digital Ocean的虚拟机。我想在这个VM上托管3个网站。 要接受请求,我要么在前面有一个HAproxy容器或Nginx虚拟主机容器。然后将特定请求路由到处理应用程序的容器堆栈

请求=> Nginx / HAproxy =>

(website1.com)=> (Nginx,php-fpm,mysql堆栈)

(website2.com)=> (Nginx,php-hpm,mysql堆栈)

(website3.com)=> (Nginx,php-hpm,mysql堆栈)

如果这是正确的设置,我该如何扩展各个网站。如果网站2获得了更多流量,并且需要更多容器,我会扩展整个堆栈(nginx,php-fpm,mysql)x2,还是让我在堆栈前面的Nginx容器在多个php-fpm之间进行负载平衡实例?

website2.com =>使用循环法1(nginx,php-fpm,mysql)或2(nginx,php-fpm,mysql)。

OR

website2.com => (nginx,php-fpm,php-fpm,php-fpm,mysql)其中nginx容器处理php-fpm容器之间的循环。

另外注意,我在哪里为每个网站放置我的SSL证书?我是否将它们放在HAproxy / Nginx虚拟主机容器中,或者我只是存在于堆栈nginx容器中。

1 个答案:

答案 0 :(得分:1)

首先,请注意容器应该运行单个进程,而不是堆栈。虽然可以运行一个 init-like 进程在单个容器中生成多个进程,甚至可以运行Supervisord来实现这一点,但这不是最佳实践。容器本打算用作微服务。

因此,在不考虑数据库的情况下,一种可能的情况是:

  1. 多个应用程序容器,每个网站一个,运行 php-fpm ;
  2. 一个网络服务器容器,为每个网站运行 Nginx 并包含 vhost 配置,并链接到您的所有应用容器;
  3. 一个负载均衡器容器,运行您选择的任何代理平衡解决方案,具有网站所需的所有配置,包括SSL。
  4. 所以,我知道你会有至少2层:负载均衡器/代理 - >应用。所以,3)进入上层,1)和2)进入另一个,它们应该在同一台服务器上运行。

    关于数据库服务,我不确定在容器中运行它是一个不错的选择。您必须从主机映射数据目录(因为容器是短暂的,但您的数据不是),并且在没有移动数据的情况下将容器移动到其他服务器是没有意义的,因此容器似乎相当在这种情况下没用。无论如何,在这种情况下你不会使用容器来利用部署,所以我看不到它有多大的优势。最好只为数据库安装另一台服务器。

    关于扩展,如果您决定在同一台服务器上运行所有站点,那么除了将所有内容扩展到一起之外,您没有太多选择。或者,您可以通过服务拆分。每个“微服务”都有一组机器(比方说, website1 + nginx1 website2 + nginx2 等)。这样,您可以独立扩展每个服务,但这可能意味着大量的开销和资源浪费。这一切都取决于你认为你需要多么复杂。

    这不是一个容易回答的问题,在这样的架构方面没有对错。这只是决定什么是你的良好权衡的问题。