I built a git hosting service called Hosted Gitea and discovered that automated deployment of VPS boxes on Digital Ocean is super simple. Here is how I got it working.
When a customer signs up a chain of events is set in motion:
- Their details are stored.
- A background task starts.
- Use the Digital Ocean API to create a fresh Ubuntu VPS box.
- Use the Gandi DNS API to point a domain name at the box.
- Run some Ansible scripts to provision Gitea on the new box.
The Digital Ocean API part consists of just a handful of function calls using python-digitalocean:
from digitalocean import Droplet, Manager # get our DO API token from an environment variable token = environ.get("DIGITALOCEAN_ACCESS_TOKEN") or exit("DIGITALOCEAN_ACCESS_TOKEN is not set.") manager = Manager(token=token) ssh_keys = manager.get_all_sshkeys() droplet = Droplet(token=token, ssh_keys=ssh_keys ... etc.) droplet.create() # then you can wait for the droplet to be created: actions = droplet.get_actions() for action in actions: if action.type == "create": while action.status != "completed": sleep(2) print("Waiting for box to deploy.")
It's as simple as that to launch a new VPS box and wait for it to come online. After this step there are a few other things that happen like emails being sent, Ansible scripts to set up Gitea etc. but the part of bringing a new box online is done.
Photo by Todd Cravens on Unsplash.