Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Possible to run multiple instances of same app on different ports #322

Closed
waygee opened this issue Feb 24, 2014 · 5 comments
Closed

Possible to run multiple instances of same app on different ports #322

waygee opened this issue Feb 24, 2014 · 5 comments

Comments

@waygee
Copy link

waygee commented Feb 24, 2014

Hi,

I wanted to inquire whether it's possible to run my app.js multiple clusters like so:

app.js Cluster1 port 80
….
app.js Cluster2 port 81
….
app.js Cluster 3 port 82
….
app.js Cluster 4 port 83

My hosting provider, Rackspace, has advised me to try to set up this way.

Is this possible to do this under pm2 and have my app.js be running multiple clusters under different ports?

Thanks in advance for your help.

@soyuka
Copy link
Collaborator

soyuka commented Jun 13, 2014

You could clone your app 4 times... I think there are better solutions as load-balancing for those kind of things but pm2 can't handle this without some heavy mods.

@rlidwka
Copy link
Collaborator

rlidwka commented Jun 22, 2014

NODE_PORT=80 pm2 start app.js -f
NODE_PORT=81 pm2 start app.js -f
NODE_PORT=82 pm2 start app.js -f
NODE_PORT=83 pm2 start app.js -f

... where NODE_PORT is an arbitrary name that you add as .listen(process.env.NODE_PORT) into your program.

(-f flag is necessary to force re-execution, since pm2 will complain otherwise)

soyuka added a commit that referenced this issue Jun 22, 2014
@aagam29
Copy link

aagam29 commented Jun 14, 2019

What is the benefit of doing so ? @waygee
Deploying the same application on multiple ports and then attaching a proxy say nginx will help you serve requests better ?

@alikarimii
Copy link

alikarimii commented Feb 14, 2020

https://pm2.keymetrics.io/docs/usage/environment/

module.exports = { apps : [ { name: "myapp", script: "./app.js", instances: 2, exec_mode: "cluster", watch: true, increment_var : 'PORT', env: { "PORT": 3000, "NODE_ENV": "development" } } ] }
Use increment_var as in example

@jfoclpf
Copy link

jfoclpf commented May 22, 2022

What is the benefit of doing so ? @waygee Deploying the same application on multiple ports and then attaching a proxy say nginx will help you serve requests better ?

Load balancing with NGINX, an example

upstream my_nodejs_upstream {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    server 127.0.0.1:3003;
    keepalive 64;
}

server {
    listen 443 ssl;
    
    server_name www.my-website.com;
    ssl_certificate_key /etc/ssl/main.key;
    ssl_certificate     /etc/ssl/main.crt;
   
    location / {
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    	proxy_set_header Host $http_host;
        
    	proxy_http_version 1.1;
    	proxy_set_header Upgrade $http_upgrade;
    	proxy_set_header Connection "upgrade";
        
    	proxy_pass http://my_nodejs_upstream/;
    	proxy_redirect off;
    	proxy_read_timeout 240s;
    }
}

Then in PM2

module.exports = {
  apps : [
      {
        name: "myapp",
        script: "./app.js",
        instances: 4,
        exec_mode: "cluster",
        watch: true,
        increment_var : 'PORT',
        env: {
            "PORT": 3000,
            "NODE_ENV": "development"
        }
      }
  ]
}

Although PM2 with instances already does load balancing, so I don't know if it's worth the effort.

The nice thing here is that you're not limited by the number of cores

Check this article

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants