Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PM2 + Meteor not working

Tags:

meteor

pm2

I get an error when trying to run it:

~/projects/test-app 
/usr/local/bin/meteor:3
# This is the script that we install somewhere in your $PATH (as "meteor")

Here is the command I run:

pm2 start meteor-pm2.json

And here is meteor-pm2.json:

{
  "name" : "test-app",
  "script" : "/usr/local/bin/meteor",
  "MAIL_URL":"smtp://yourmail_configuration_here",
  "MONGO_URL":"mongodb://localhost:27017/meteor",
  "ROOT_URL":"https://www.mysite.com/",
  "PORT":"3000",
  "out_file":"/home/josh/logs/app.log",
  "error_file":"/home/josh/logs/err.log"
}

I also try this: cat start

#!/bin/bash

MONGO_URL="mongodb://localhost:27017/meteor"
PORT=3000
ROOT_URL="https://www.mysite.com/"

/usr/local/bin/meteor

and I run it with:

pm2 start ./start -x interpreter bash

and I get:

/usr/local/bin/meteor
^
ReferenceError: usr is not defined

when i modify the bash script by adding the export:

#!/bin/bash

export MONGO_URL="mongodb://localhost:27017/meteor"
export PORT=3000
export ROOT_URL="https://www.mysite.com/"

/usr/local/bin/meteor

I get:

export - SyntaxError: Unexpected reserved word

Any ideas what am I doing wrong? Is pm2 trying to run the bash script in it's own special script interpreter that doesn't allow the use of export?

like image 874
user3538541 Avatar asked Feb 03 '26 02:02

user3538541


2 Answers

I believe this process.json syntax is more correct:

{
  "apps": [
    {
      "name": "myAppName",
      "script": "./bundle/main.js",
      "log_date_format": "YYYY-MM-DD",
      "exec_mode": "fork_mode",
      "env": {
        "PORT": 3000,
        "MONGO_URL": "mongodb://127.0.0.1/meteor",
        "ROOT_URL": "https://myapp.example.com/",
        "BIND_IP": "127.0.0.1"
      }
    }
  ]
}

then I just start it using run.sh which contains:

#!/bin/sh

#
# This shell script starts the actual
# app in the production environtment.
#

pm2 start process.json -i max # Enable load-balancer and cluster features

Note: the BIND_IP env var is there to change it from the default (0.0.0.0). The 0.0.0.0 would make the app accessible around the ssl proxy layer (if you use SSL/TLS with nginx or some other web server and the BIND_IP is set to 0.0.0.0 then pretty much anyone could access it via http://myapp.example.com:3000 around the encrypted layer, unless you block that port in your web server's configuration).

This is how I got my meteor app (Telescope) working

 ROOT_URL=http://localhost:3000 PORT=3000 MONGO_URL=mongodb://127.0.0.1:27017/Telescope pm2 start main.js

inside .meteor/local/build

like image 44
ajay Avatar answered Feb 05 '26 16:02

ajay



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!