【问题标题】:Deploying multiple rails application in a single digital ocean droplet using capistrano+nginx使用 capistrano+nginx 在单个数字海洋水滴中部署多个 Rails 应用程序
【发布时间】:2019-08-27 03:43:55
【问题描述】:

我有一个在 IP xxx.xxx.xxx.xx 的数字海洋服务器上运行的 rails 应用程序。使用 Capistrano 部署现在很容易运行。现在我正在考虑使用 capistrano 将另一个应用程序部署到同一台服务器,经过多次研究,我没有得到任何合适的解决方案来解决我的疑问,或者找不到任何最好的教程。

在将第二个应用程序部署到服务器之前需要注意哪些基本步骤?

第二个应用程序应该监听哪个 nginx 端口,默认是 80,第一个应用程序已经在监听了。?

如果部署到同一个droplet后如何访问第二个应用程序,现在我可以使用ip访问第一个应用程序。?

【问题讨论】:

    标签: ruby-on-rails digital-ocean


    【解决方案1】:

    对于每个应用程序,您需要确保您使用的任何服务器正在侦听不同的套接字。

    之后,您必须在 Nginx 配置中添加另一个服务器块,如下所示,

    upstream app_one {
        # Path to server1 SOCK file
    }
    
    upstream app_two {
        # Path to server2 SOCK file
    }
    
    server {
        listen 80;
        server_name IP;
    
        # Application root, as defined previously
        root /root/app_one/public;
    
        try_files $uri/index.html $uri @app;
    
        location @app {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://app_one;
        }
    
        error_page 500 502 503 504 /500.html;
        client_max_body_size 4G;
        keepalive_timeout 10;
    } 
    
    server {
        listen 8080;
        server_name IP;
    
        # Application root, as defined previously
        root /root/app_two/public;
    
        try_files $uri/index.html $uri @app;
    
        location @app {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://app_two;
        }
    
        error_page 500 502 503 504 /500.html;
        client_max_body_size 4G;
        keepalive_timeout 10;
    }  
    

    【讨论】:

    • server_name domain_app_two.com; 目前我没有任何域,如何使用 ips 访问这些应用程序
    • 那么您应该在服务器名称中传递您的实例的 IP,并在可行的情况下为不同的应用程序使用不同的端口。
    • 更新了我的答案
    • 在单个 nginx.conf 文件中进行上述配置 ???或为每个应用程序分开???
    【解决方案2】:

    出于测试目的或限制用户计数的应用程序,您可以拥有任意数量的域。您只需添加到 /etc/hosts(假设您有 Linux 机器)

    NGINX.IP.ADDR.ESS domain-one.com
    NGINX.IP.ADDR.ESS domain-two.com
    

    然后在您的 Nginx 配置文件中的相应服务器块中使用这些服务器名称。在这种情况下,您可以使用相同的端口号。这些应用程序的其他用户应在他们的盒子上进行相同的更改。

    此外,如果此类用户在同一个 LAN 中分组,您可以在 DNS 上配置虚假区域并使用它来代替 /etc/hosts

    【讨论】:

    • 我没有像 'domain-one.com' 或 'domain-two.com' 这样的域,我使用 DO 给我的 ip 访问第一个应用程序。现在我需要部署对于同一个 droplet,我部署了应用程序,但几乎没有配置错误。
    • 我知道您没有这些域,它只是资源的名称,这些名称仅在修改/etc/hosts 的盒子上有效。此文件中的设置优先于默认名称解析。尝试添加 /etc/hosts stackoverflow.com 和你的 DO 服务器的 IP 地址,并在 Nginx 服务器块中指定 server_name stackoverflow.com;,然后在浏览器中指向 stackoverflow.com,你会得到你的 DO 应用程序。您可以通过这种方式使用任何个域名。
    猜你喜欢
    • 2016-05-30
    • 2020-06-30
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2018-07-01
    相关资源
    最近更新 更多