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:
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).
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.
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
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,…
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 ).
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.