An easy to use DigitalOcean custom image uploader.
go get github.com/htr/do-image-uploader
Build a VM image in any of the supported formats. You can get some ideas here.
Upload the image:
$ do-image-uploader --api-token=... --image-file=image.qcow2.gz --region=fra1 --name=my-image --wait-until-available
Currently, the uploader assumes there is public IP connectivity. In the future, image upload through DO Spaces might be implemented.