[Q] November 2016 - State of deployments for actual Meteor (1.4.2)?

Hi @aleritty

Im doing it by hand also… check my repo…

meteor-deployment

i have a simple script… just paste the folder… change the port … and voila… running.

If you want you can publish you port 80, or other port but you will need to use Nginx, i also left a cool link in the readme…

1 Like

This is intresting, old school bash scripting :smiley:

My question was more about finding common guidelines but this is a good base.

How do you get environment variables in? Do you just include them in your settings.json and build packs it in with the node app it pushes out?

Like @vjau, I’ve done some manual deployments using that same workflow. To get environment variables in, you can just start the node process with the environment variables already set (either by exporting them individually before issuing node bundle/main.js) or by cut and pasting something like:

sudo PORT=3000 MONGO_URL=mongodb://user:password@127.0.0.1:27017/mydbname?replicaSet=rs0 MONGO_OPLOG_URL=mongodb://oplogger:oploggerpassword@127.0.0.1:27017/local?authSource=admin ROOT_URL=https://mydomainname.com MAIL_URL="smtp://smtp.mydomainname.com/" node bundle/main.js

Manual deployment got tedious after a while, so I’ve got one script to run on the client and one on the server to achieve the same thing (build on client - ftp to server - untar - copy/rename folder - restart node).

I’ve also got that same app deployed to a different server and use a totally different deploy method:

By hacking Julien Chamond’s script (from back in the day …), I’ve got the deploy process down to a mup-like configuration script and one command on the client ( meteoric deploy) to have it up and running on the production server a minute or two later. What it’s doing behind the scenes is: ssh into prod server - pull the latest app version from github - build on the production server - untar - copy/move folder - restart node. There are downsides to this approach (production server CPU burn; intial setup is fiddly), but it does make the deploy process pretty straightforward, once the initial setup is done. Github repo for deploy scripts here.

For other apps, I’ve just pinned them to Meteor 1.2.1 so I can keep using mupx to deploy easily to D.O… (mupx hasn’t worked consistently for me since 1.2.1).

1 Like

try this one

5 Likes

That looks pretty cool. Nice work!

Good idea using pm2 that is rock solid!

I’ve switched from mup to pm2-meteor a month or 2 ago( during The Great 1.2 To 1.4 Transition), and very happy since.

pm2 is a great node process monitor, and pm2-meteor basically a one command deploy tool that bundles your app together with your settings.json, and sends it over to your VPS where pm2 takes over.

We are maintaining the Meteor Azure tool (with a path towards native integration in the future) which is compatible with any version of Meteor >1.4. The main Galaxy features are supported out-of-the-box i.e zero-downtime, one command deployment and you can configure more advanced architectures with multi-region fail-over or auto-scaling rules/schedule.

Not sure what your specific requirements are with deploying to a private network, but you might want to consider looking into Azure’s App Service Environment which is specifically designed for this sort of thing.

This is great. I’m deploying to AWS EC2 instance using Mup modified for Meteor version 1.3.5.1, but have issues once I tried to bump to 1.4.1.

Can/Will you share you procedure and script so I can give this a try myself?

My deployed app is still using Meteor 1.2.1 so i don’t know if this works with 1.4 but i suppose it can be adapted if not.
I’m using Ubuntu 14.04 LTS
I have an upstart script with following content

start on started mongod
stop on shutdown

respawn

setuid node

env MONGO_URL='mongodb://localhost:27017/meteor'
env ROOT_URL='http://xxx.xxx.xxx.xxx:pppp'
env PORT=pppp
env MAIL_URL='smtp://login:pass@url/'
exec /usr/bin/node /var/local/sites/myapp/bundle/main.js >> /var/log/myapp.log 2>&1

You put this script in /etc/init.d/

The bundle is untared in /var/local/sites/myapp
You have to install npm dependencies (look in the readme), with appropriate permissions.
You have to give permission to your node user to write to the log you have specified

I have also a node “script” that does a backup of the database every 30 minutes and upload it on amazon glacier and on my personnal NAS.

EDIT: it seems upstart is replaced by systemd in ubuntu 16.04, so perhaps try that instead

1 Like

This seems great! I’m a newbie regarding deployments, and I’m curious how to get this pm2 tool working to get a meteor server deployed to Amazon. Can someone help me ?

Well, start by installing PM2 on your server. There are several tutorials out there for that. I use Ubuntu 16.04 with nginx and pm2. You can use Amazon, Digital Ocean, or any other VPS provider. Try to get a barebones Node app running on it.

Once that’s working, install PM2-Meteor on your client, fill in the pm2-meteor.json file and pm2-meteor deploy to your server.

pm2-meteor simply builds and bundles your meteor app locally, and then sends that bundle to your server, unpacks it, and lets PM2 take it from there.

PM2 takes care of running, monitoring and logging. It restarts your meteor app in case of crash or server reboot,…

1 Like

wow nice! Thank you so much @eleventy for you kind reply. I’ll follow your instructions and return with some feedback.

I’m getting a problem while using a pem file that results in the following error: “Encrypted private key detected, but no passphrase given”

That’s is fixed by this from arunoda, but we get another problem: “All configured authentication methods failed”.
Something like this thread.

Someone knows how to surpass or have experienced this problems with pm2-meteor before ?

I’m using ssh keys without passphrases to login to the servers. Username/passwords are not permitted for security.

Have you set up passwordless, key-based ssh login on your server?
If it’s a Ubuntu server, try something like SSH setup. Make sure to set no passphrase, certainly in the beginning.

Once you can connect in the terminal without password, it might be good for security to disable password logins alltogether ( disable-password-authentication-in-ssh ).

If all that is working, try pm2-meteor again.

1 Like

Ok, I’ve tried without passphrases and the error is gone. But right now I’m getting about “bundle.tar.gz” ERROR: No such file

I’m into a folder named “deploy” with pm2-meteor.json configured.

{
  "appName": "AppNaEscola",
  "appLocation": {
    "local": "~/Projetos/AppNaEscola/Projeto/Backend",
    "git": "",
    "branch": "master"
  },
  "meteorSettingsLocation": "~/Projetos/AppNaEscola/Projeto/Backend/settings.json",
  "meteorSettingsInRepo": false,
  "prebuildScript": "",
  "meteorBuildFlags": "--architecture os.linux.x86_64",
  "env": {
    "ROOT_URL": "I'm using here my public IP",
    "PORT": 9000,
    "MONGO_URL": "mongodb://localhost:27017/AppNaEscola"
  },
  "server": {
    "host": "I'm using here my public IP",
    "username": "ubuntu",
    "deploymentDir": "/opt/pm2-meteor",
    "pem": "~/.ssh/meteor-server.pem",
    "loadProfile": "",
    "port": "22",
    "nvm": {
      "bin": "~/.nvm/nvm.sh",
      "use": ""
    },
    "exec_mode": "cluster_mode",
    "instances": 1
  },
  "allowUndeploy": true
}


I’m running pm2-meteor deploy into this folder, while my project folder is named Backend.

My directories structure is: Backend (with meteor stuff) and out this folder the deploy folder containing my pm2-meteor.json above.

Try putting your pm2-meteor.json file in your meteor folder( the one with package.json and all other stuff, Backend I guess), and try running the pm2-meteor deploy command from there, not from a different folder. pm2-meteor will create a tempory subfolder, and will clean up afterwards.

1 Like

I put right now in the same folder with my project, but the error is still here. It’s complaining about bundle.tar.gz, which is so strange.

I think we can continue talking about Meteor.js deployment after MUP death here: MUP OR PM2-Meteor OR any other deployment tools after lost arunoda and kadira?