A first look at Digital Ocean's app platform
I've been a user of Digital Ocean (DO) for a few years. Their low cost Virtual Private Server (VPS) tiers were an attractive offer for setting up a basic blog and a fun test bed to learn about web and back-end development and deployment.
While I might be somewhat comfortable with the prospect of setting up a service on a remote computer with nothing more than ssh access, that certainly isn't true for all developers. The success of platforms like Heroku, Firebase and other Platform As A Service (PaaS) providers demonstrates the demand for such simple and scalable deployment infrastructure with a low barrier to entry.
I recently migrated my app to App platform and I've been somewhat pleased with the process. App Platform is ideal for developers that want a Heroku like experience of pointing the service to a repository and having it run a deployment on push. It works with cloud native build-packs and supports a fairly comprehensive set of languages and frameworks out of the box.
Pricing wise there is a free tier, however it's restricted to deploying static sites. Deploying any dynamic apps you to hop onto their Basic plan which is priced pretty competitively at $5/mo - I believe this is targeted at developers but I can imagine this being enough for a low traffic production deployment if your framework/tools are lightweight enough. However, the platform does recommend the $10/mo variant as the lowest tier for production deployments. A managed DB will run you $7/mo for a development instance and $15/mo for a full production instance.
It's worth noting that it is a new platform. Looking to the future, there improvements that I hope would be made on the platform to make the developer experience a lot better. This is my wish-list.
- The ability to build your own Virtual Private Cloud (VPC) that encompassed the app and other DO managed services - It's really unfortunate that all the connections between services including the managed Database (DB) have to run over a public connection. There's even a warning on the dashboard itself that this is not a great idea.
- Ability to manually roll back a deployment or start a previously built instance - There's currently an automatic rollback feature if a deployment fails. My understanding of this is that they may just keep the current instance running. However there are occasions when you want to manually undo a deployment. Given that it's tied to your repository, this would involve a messy set of git reverts. It would be nice to have a dashboard/cli option to roll back to a previous deployment.
- Control over build timeouts - App platform times-out builds after 20 minutes by default and caps build minutes at 500 for basic and 1000 for higher tiers and bills for overages. Fortunately, DO support is able to adjust this behind the scenes. However it would be nice to have some control over this.
- A 1 click way to make app platform part of my CI pipeline - It would be nice to not have to rely strictly on DO's build infrastructure but have deployments depend on my CI pipeline. For example, trigger a deployment only after tests pass. I believe it's possible to do this with the doctl cli/action although admittedly I've not tried, it would be awesome to see a simple way to do this in the future.
- Bring Your Own container options - Right now there's no way to push up my own containers for deployment. This means that I have to rebuild containers on the platform for deployment. Building on my points above, it would be fantastic to push a docker image artifact from my build pipeline to the DO container registry and use that for depoyments.
- Persistent Runtime logs - While build logs are persisted for as long as the builds remain on the dashboard (I have 25 builds as of this writing and I don't know how long they stick around for) runtime logs aren't persisted between deployments. It would be nice to have some kind of platform support in capturing and managing logs.
- Finally it would be great to see an addon library similar to the Marketplace library. It would be excellent to have 1 click deployment options for tools like Reddis without having to manage my own VM.
Conclusion
Overall I think this is a great start. There's definitely a lot to do to make this a top tier service offering - supporting more languages and platforms (for example, Java is not officially supported), better integrations with DO's own service offerings VPCs and better control over builds and deployments but I'm excited to see where it goes.