Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm working on a SaaS application where each customer runs its own version of the application. All the application instances currently run on a single server. This works quite well for us (we need less resources in total). The application doesn't use a lot of resources, so even a small VPS would be overkill (and more expensive).

Adding a new customer is currently quite a bit of work:

  • Create a user that is allowed to ssh
  • Create a new MySQL database and user
  • Create a virtual host for the application
  • Log in with the new user, do a git checkout of the application (in the right location)
  • Create tables in the new database, and add some init data
  • Add some cron jobs
  • Create a first user that can log in
  • Add this new instance to capistrano

What would be the best way to automate these tasks? Are the applications that can (given proper configuration) do this? Ideally this should be usable for a sales-person (so something web-based).

I could write a (bash) script that does most of these tasks, and then maybe add a small web-based wrapper where someone could provider the domain/default user information. Of course, this would also require a delete-script, since some customers will eventually leave, which means that you need a list of all existing customers/instances.

share|improve this question

closed as not a real question by MDMarra, Michael Hampton, Greg Askew, HopelessN00b, Scott Pack Nov 18 '12 at 4:56

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.If this question can be reworded to fit the rules in the help center, please edit the question.

2 Answers 2

up vote 2 down vote accepted

This is, in fact, your job as a system administrator. Script all the things that are repetitive so that you can work on other things that need to be done or fixed.

If you're not confident in your scripting skills yet, you should have a test environment similar to your production where you can test out your scripts in an environment that won't cost you money and customers if you break it.

share|improve this answer

My answer would depend on how many new customers you are expecting. If "every once in a while" you add a new customer - I would create a checklist for all of your above procedures and follow it carefully each time a new customer was added. If adding new customers is going to be done several times per day - or on many servers, then I would automate it.

My rule of thumb for systems administration: It is difficult to be too anal retentive, so make backups of every file you touch while adding a customer...

1.) Script something using useradd and command line parameters to make the user - being sure to make "600 root:root" copies of /etc/passwd and /etc/shadow (if local users) before issuing the useradd command. 2.) mkdir /etc/ssh.date +%Y%m%d 3.) cp /etc/ssh/* /etc/ssh.date +%Y%m%d 4.) awk, sed, sshkeygen (or whatever) to make the ssh keys and add the user 5.) bash script that takes command line parameters to create the SQL shots to create a database. ...blah blah blah

You get my reasoning...final step - create a "super script" that ties all of the steps together.

Hmm...the "web" aspect...unless you have some pretty good firewalls and security up and running....I would not create a web page to add the customer. I am sure you have thought of this...and how you proceed is up to you, but my thinking is that you are saying you want a web page that can execute scripts as root on a box. You have to be root to add the user. Maybe you can do it, but I would not trust myself to create a page that some user could willy nilly enter data into forms and have it execute something as root. I can sanitize OK...and I can follow sanitizing recipes OK...but, I do not trust my skills at "hacking" enough to test my own app that has root level commands...sorry, I am a wimp I guess :-)

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.