Self-Hosted Continuous Deployment Platform
At UBC Launch Pad, many of our teams’ projects are web applications. A pretty awesome step in any web application’s development process is when you deploy it for everyone to try out. Unfortunately, deployment can be a frustrating task, especially for students with little to no experience setting up applications on remote hosts. Some of these students might also be learning a new framework or programming language as part of their projects, all while dealing with the stresses of a full course load. On top of that, we frequently find ourselves needing to deploy projects to new environments as funds run out or sponsorships end in order to keep projects online.
This was an unfortunate situation — seeing your hard work up and running can be a nice motivation boost, and the ability to gather feedback from fellow students is invaluable. We realised that we needed a tool that could make setting up continuously deployed applications simple and painless, regardless of the hosting provider.
So we built one! Inertia is a cross-platform command line tool that aims to simplify setup and management of automated deployment of a variety of project types on any virtual private server. With an effortless 4-step setup process, Inertia has saved UBC Launch Pad teams a great deal of headaches and time deploying, allowing students to focus on building great applications.
Here are some of Inertia’s core features:
- 🚀 Simple to use - set up a deployment from your computer without ever having to manually SSH into your remote
- 🍰 Cloud-agnostic - use any Linux-based remote virtual private server provider you want
- ⚒ Versatile project support - deploy any Dockerfile or docker-compose project
- 🚄 Continuous deployment - Webhook integrations for GitHub, GitLab, and Bitbucket means your project can be automatically updated, rebuilt, and deployed as soon as you
- 🛂 In-depth controls - start up, shut down, and monitor your deployment with ease from the command line or using Inertia’s REST API
- 🏷 Flexible configuration - branch deployment, environment variables, easy file transfer for configuration files, build settings, and more
- 📦 Built-in provisioning - easily provision and set up VPS instances for your project with supported providers such as Amazon Web Services using a single command
- 👥 Built for teams - provide shared access to an Inertia deployment by adding users
- 🔑 Secure - secured with access tokens and HTTPS across the board, as well as features like 2FA for user logins
High-level overview of how Inertia works from our first internal demo.
I built and designed the majority of Inertia’s core functionality and helped guide over 20 contributors (both internal and external) in making additions and new features for the tool. I also created a comprehensive suite of development tools and scripts (code) to improve how Inertia is developed, including hacky tooling like disposable mock remote hosts using Docker containers. I also established a complex Travis CI pipeline that runs our comprehensive suite of unit and integration tests against a wide range of deployment targets (Ubuntu, CentOS, Debian, AmazonOS, etc.) automatically (blog post). It also builds and deploys releases to GitHub releases and DockerHub automatically!
Detailed architecture diagram of Inertia components - more details available in our godocs.
A preview of the work-in-progress Inertia Web for interacting with your deployment from anywhere!
# Even More Stuff About Inertia
I’ve written a fair bit about Inertia:
- Official documentation website
- Blog post: Building Inertia
- Blog post: Docker-in-Docker-in-Docker
- Blog post: Optimising Travis CI Pipelines
- Blog post: Automated Documentation Generation
- Launch Pad Handbook: Deploying with Inertia
My team and I have also made a few presentations showcasing Inertia to fellow students and industry professionals:
Inertia team member Chad and I presenting at the 2018 Vancouver DevOps Days!
Inertia also inspired several spin-off side projects for myself:
- Go library for programmatic containerized builds
- Go library of helpful RESTful primitives
- silly post about the Inertia logo and the project README
Other fun stuff related to Inertia:
- Some students from a Computer Engineering course at UBC reached out in late 2019 to conduct a security analysis of Inertia for their course project, which was super exciting! You can read their comprehensive final report here and see some of the follow-up changes that were made on GitHub (such as #638, #637).
- Hashicorp released the Waypoint project in late 2020, and it seems to share some of Inertia’s core concepts, which is a neat validation of the direction we were headed in!
- I still use Inertia to this day as a test bed for tooling and automation ideas