{"id":13687282,"url":"https://github.com/ubclaunchpad/inertia","last_synced_at":"2025-04-09T07:08:29.984Z","repository":{"id":55578697,"uuid":"112870404","full_name":"ubclaunchpad/inertia","owner":"ubclaunchpad","description":"✈️ Effortless, self-hosted continuous deployment for small teams and projects","archived":false,"fork":false,"pushed_at":"2023-05-11T20:39:41.000Z","size":23795,"stargazers_count":154,"open_issues_count":54,"forks_count":18,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-04-02T06:07:02.117Z","etag":null,"topics":["aws","continuous-deployment","deployment","devops","docker","docker-compose","golang","hacktoberfest","self-hosted","ubc"],"latest_commit_sha":null,"homepage":"https://inertia.ubclaunchpad.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ubclaunchpad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-12-02T19:26:10.000Z","updated_at":"2025-03-15T23:20:38.000Z","dependencies_parsed_at":"2024-01-14T15:21:33.599Z","dependency_job_id":"147fee0d-6caa-4a99-a700-8060ba43e454","html_url":"https://github.com/ubclaunchpad/inertia","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ubclaunchpad%2Finertia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ubclaunchpad%2Finertia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ubclaunchpad%2Finertia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ubclaunchpad%2Finertia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ubclaunchpad","download_url":"https://codeload.github.com/ubclaunchpad/inertia/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247994121,"owners_count":21030050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","continuous-deployment","deployment","devops","docker","docker-compose","golang","hacktoberfest","self-hosted","ubc"],"created_at":"2024-08-02T15:00:51.560Z","updated_at":"2025-04-09T07:08:29.943Z","avatar_url":"https://github.com/ubclaunchpad.png","language":"Go","funding_links":[],"categories":["golang"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/ubclaunchpad/inertia/blob/master/.static/inertia-with-name.png?raw=true\" width=\"25%\" alt=\"Inertia\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  An effortless, self-hosted continuous deployment platform.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/ubclaunchpad/inertia/actions?workflow=Pipeline\"\u003e\n    \u003cimg src=\"https://github.com/ubclaunchpad/inertia/workflows/Pipeline/badge.svg\"\n      alt=\"Build Status\" /\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://goreportcard.com/report/github.com/ubclaunchpad/inertia\"\u003e\n    \u003cimg src=\"https://goreportcard.com/badge/github.com/ubclaunchpad/inertia\"\n      alt=\"Clean code\" /\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://pkg.go.dev/github.com/ubclaunchpad/inertia\"\u003e\n    \u003cimg src=\"https://pkg.go.dev/badge/github.com/ubclaunchpad/inertia\"\n      alt=\"go.pkg.dev documentation available\" /\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://inertia.ubclaunchpad.com/#getting-started\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/downloads/ubclaunchpad/inertia/total\"\n      alt=\"inertia CLI downloads\"\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"https://github.com/ubclaunchpad/inertia/releases/latest\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/release/ubclaunchpad/inertia.svg\"\n      alt=\"Latest release\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#package-usage\"\u003e\u003cstrong\u003eUsage\u003c/strong\u003e\u003c/a\u003e · \n  \u003ca href=\"#bulb-motivation-and-design\"\u003e\u003cstrong\u003eMotivation \u0026 Design\u003c/strong\u003e\u003c/a\u003e · \n  \u003ca href=\"#books-contributing\"\u003e\u003cstrong\u003eContributing\u003c/strong\u003e\u003c/a\u003e · \n  \u003ca href=\"https://github.com/ubclaunchpad/inertia/wiki\"\u003e\u003cstrong\u003eWiki\u003c/strong\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/ubclaunchpad/inertia/blob/master/.static/inertia-init.png?raw=true\" width=\"35%\" /\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\nInertia is a user-friendly, cross-platform command line application and serverside\nagent that enables quick and easy setup and management of continuous, automated\ndeployment of a variety of project types on any virtual private server. The\nproject is used, built, and maintained with :heart: by [UBC Launch Pad](https://www.ubclaunchpad.com/),\nUBC's student-run software engineering club.\n\n|   | Main Features  |\n----|-----------------\n🚀  | **Simple to use** - set up a deployment from your computer without ever having to manually SSH into your remote\n🍰  | **Cloud-agnostic** - use any Linux-based remote virtual private server provider you want\n⚒  | **Versatile project support** - deploy any Dockerfile or docker-compose project\n🚄  | **Continuous deployment** - Webhook integrations for GitHub, GitLab, and Bitbucket means your project can be automatically updated, rebuilt, and deployed as soon as you `git push`\n🛂  | **In-depth controls** - start up, shut down, and monitor your deployment with ease from the command line or using Inertia's REST API\n🏷  | **Flexible configuration** - branch deployment, environment variables, easy file transfer for configuration files, build settings, and more\n📦  | **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\n👥  | **Built for teams** - provide shared access to an Inertia deployment by adding users\n🔑  | **Secure** - secured with access tokens and HTTPS across the board, as well as features like 2FA for user logins\n\n\u003cbr\u003e\n\n# :package: Usage\n\nCheck out our new **[Inertia Usage Guide](https://inertia.ubclaunchpad.com)** to\nget started with using Inertia for your project! The guide will walk you through\ninstalling Inertia, setting up a project, deploying to a remote, managing your\ndeployment, and advanced usage tips.\n\n### Why Use Inertia?\n\nIf you...\n\n* want a simple utility to quickly build and deploy the latest iterations of your projects\n* are new to the concept of \"deployment\" and related tooling\n* are on a tight budget and need to switch between cloud providers as your free trials run out\n* want some lightweight team features for managing your deployment\n\nInertia might be for you! For example, [UBC Launch Pad](https://www.ubclaunchpad.com/)\nteams have used Inertia to set up automated deployments for projects like\n[Rocket 2](https://github.com/ubclaunchpad/rocket2) and [Bumper](https://github.com/ubclaunchpad/bumper),\nand [nwPlus](https://www.nwplus.io/) used Inertia to stage previews of the\n[nwHacks 2019 website](https://github.com/nwplus/nwhacks2019) during development.\n\n\u003cbr\u003e\u003cbr\u003e\n\n# :bulb: Motivation and Design\n\n[UBC Launch Pad](http://www.ubclaunchpad.com) is a student-run software engineering club at the University of British Columbia that aims to provide students with a community where they can work together to build a all sorts of cool projects, ranging from mobile apps and web services to cryptocurrencies and machine learning applications.\n\nMany of our projects rely on hosting providers for deployment. Unfortunately we frequently change hosting providers based on available funding and sponsorship, meaning our projects often need to be redeployed. On top of that, deployment itself can already be a frustrating task, especially for students with little to no experience setting up applications on remote hosts. Inertia is a project we started to address these problems, with the goal of developing an in-house deployment system that can make setting up continuously deployed applications simple and painless, regardless of the hosting provider.\n\nThe primary design goals of Inertia are to:\n\n* minimize setup time for new projects\n* maximise compatibility across different client and VPS platforms\n* offer an easy-to-learn interface for managing deployed applications\n\n### How It Works\n\nThere is a detailed [Medium post](https://medium.com/ubc-launch-pad-software-engineering-blog/building-continuous-deployment-87a2bd8eedbe) that goes over the project, its motivations, the design choices we made, and Inertia's implementation. The team has also made a few presentations about Inertia that go over its design in some more detail:\n- [UBC Launch Pad internal demo](https://slides.ubclaunchpad.com/projects/inertia/demo-1.pdf)\n- [Vancouver DevOpsDays 2018](https://slides.ubclaunchpad.com/projects/inertia/devopsdays.pdf) ([video](https://youtu.be/amBYMEKGzTs?t=4h59m5s))\n\nIn summary, Inertia consists of two major components: a deployment daemon and a command line interface.\n\nThe deployment daemon runs persistently in the background on the server, receiving webhook events from GitHub whenever new commits are pushed. The CLI provides an interface to adjust settings and manage the deployment - this is done through HTTPS requests to the daemon, authenticated using JSON web tokens generated by the daemon. Remote configuration is stored locally in `.inertia.toml`.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://bobheadxi.github.io/assets/images/posts/inertia-diagram.png\" width=\"70%\" /\u003e\n\u003c/p\u003e\n\nInertia is set up serverside by executing a script over SSH that installs Docker and starts an Inertia daemon image with [access to the host Docker socket](https://bobheadxi.github.io/dockerception/#docker-in-docker). This Docker-in-Docker configuration gives the daemon the ability to start up other containers *alongside* it, rather than *within* it, as required. Once the daemon is set up, we avoid using further SSH commands and execute Docker commands through Docker's Golang API. Instead of installing the docker-compose toolset, we [use a docker-compose image](https://bobheadxi.github.io/dockerception/#docker-compose-in-docker) to build and deploy user projects.\n\n\u003cbr\u003e\u003cbr\u003e\n\n# :books: Contributing\n\nAny contribution (pull requests, feedback, bug reports, ideas, etc.) is welcome! \n\nPlease see our [contribution guide](https://github.com/ubclaunchpad/inertia/blob/master/CONTRIBUTING.md) for contribution guidelines as well as a detailed guide to help you get started with Inertia's codebase.\n\n\u003cbr\u003e\n\n[![0](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/images/0)](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/links/0)\n[![1](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/images/1)](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/links/1)\n[![2](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/images/2)](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/links/2)\n[![3](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/images/3)](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/links/3)\n[![4](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/images/4)](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/links/4)\n[![5](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/images/5)](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/links/5)\n[![6](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/images/6)](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/links/6)\n[![7](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/images/7)](https://sourcerer.io/fame/bobheadxi/ubclaunchpad/inertia/links/7)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fubclaunchpad%2Finertia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fubclaunchpad%2Finertia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fubclaunchpad%2Finertia/lists"}