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 realized 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 lot about Inertia:
- Blog post: Building Inertia
- Official documentation website
- Blog post: Docker-in-Docker-in-Docker
- Blog post: Travis CI pipeline optimizations
- Blog post: Automated documentation generation
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: