How to easily and quickly deploy purpose specific servers?

May 14, 2014 2.7k views
I'd like to have the ability to easily launch prebuilt purpose specific (ex. ftp, web, mysql) server configurations in different regions. My organization's users would request for example an FTP server in NYC1 with a certain CPU/RAM/SSD config (DO standard plan) and have it ready for use within minutes. I assume snapshots would be a solution? I'm however new to this type of development and would like to get input on how this could be setup in other ways without being dependent on DO snapshots. Any suggestions welcome!
7 Answers
You can spin up a new droplet, install and configure an FTP server on it, and snapshot it. Then, whenever you want to spin up a new FTP server, just create a new droplet that is based on the FTP snapshot.

There is another option, which would be using a configuration management software such as Chef, Puppet, SaltStack, etc. We have plenty of articles on that:
Generally I use snapshots to create new droplets. Here we was created a default droplet with all configurations then snapshot it.

If you have many clients running on dedicated droplets, this way can be very helpful.
Chef, of course. I just setup "one command creating and configuring digital ocean instance with hosted chef" last weekend. :) Looks like this:

knife digital_ocean droplet create --server-name prenticeville-app-0 \
--image 3101918 \
--location 5 \
--size 66 \
--run-list "recipe[myawesomeserverconfig::default]" \

And then, exactly, it creates new server and configures it.
Puppet / Chef / Salt or Docker or Image snapshot
I built a devops command-line tool called Overcast specifically to make this sort of thing easier.

# Spin up an Ubuntu 14.04 app server in SFO1:
overcast digitalocean create app.01 --region-slug sfo1
overcast run app.01 install/core install/nginx /path/to/my/install/script

# Spin up a 1GB Ubuntu 14.04 MySQL server in NYC2:
overcast digitalocean create db.01 --size-slug 1gb
overcast run db.01 install/core install/mysql

# Create a snapshot and spin up a copy:
overcast digitalocean snapshot db.01 db.snapshot
overcast digitalocean create db.02 --image-name db.snapshot

# Run commands across all of them at once:
overcast run all uptime "free -m"

If you have any trouble, feedback, or feature ideas, let me know on Github.
Maybe it is time for DO to start thinking about providing some sort of market place for pre-configured images?

I am the developer of HiveMind (, and I know devs would like a box that they can literally just logon to and start hacking..
Have another answer? Share your knowledge.