Creating, deploying and managing multiple instances of the same app


#1

I’m seeking advice on an architecture we’re planning.

We’re developing a network of small meteor apps, each of which are all fully stand alone apps. Each of these apps are essentially the same app, with a few different settings to differentiate each. (Also, they might be of different versions, but you get my point)

We also have a “mothership” app which, ideally, is capable of quickly spinning off an instance of the aforementioned Meteor app.

In terms of hosting, what are my options? I’ve never used anything but heroku, so my knowledge on this subject is kind of thin. We aren’t picky about the urls and domains, but of course we need to prioritize for cost. We need to be able to deploy and manage each instance separately, without taking down the whole network.

Sorry for the vagueness/ignorance of the question, I’m in uncharted waters.


#2

Can you just keep the differences in a settings.json file? If you need different assets (CSS, images, etc) maybe you could keep the under /private/{site1,site2,etc} and have a script that changes a symlink to point the the one you want?


#3

I think you should look into Docker.


#4

@adamwong246 how significant are differences between the apps. If you can abstact the differences to the level of environment variables you can just run them even on heroku.
For something fancy like automatic setup i’d agree with @serkandurusoy Docker might be the best option. You would need to proxy from your main meteor to some orchestration tool like fleet or kubernetes which will spin up instances for you,


#5

Check this repo out: https://github.com/rissem

He’s the creator of http://meteorpad.com/ which uses docker to create isolated meteor apps on demand.

His repo contains lots of related docker information.


#6

Yes, this is ideal. The assets are actually stored in the database.


#7

Yes, I think this is the way forward. Too bad I can’t seem to find the source for meteorpad


#8

I think it is closed source. But his github repos contain lots of related useful information. Perhaps if you can find your way around there, it is possible you figure it out. But of course, it would be great to find a good write up as a starting point.