• Stars
    star
    151
  • Rank 246,057 (Top 5 %)
  • Language
    Go
  • License
    MIT License
  • Created almost 7 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

✈️ Effortless, self-hosted continuous deployment for small teams and projects

Inertia

An effortless, self-hosted continuous deployment platform.

Build Status Clean code go.pkg.dev documentation available inertia CLI downloads Latest release


Usage · Motivation & Design · Contributing · Wiki



Inertia is a user-friendly, cross-platform command line application and serverside agent that enables quick and easy setup and management of continuous, automated deployment of a variety of project types on any virtual private server. The project is used, built, and maintained with ❤️ by UBC Launch Pad, UBC's student-run software engineering club.

Main 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 git push
🛂 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

📦 Usage

Check out our new Inertia Usage Guide to get started with using Inertia for your project! The guide will walk you through installing Inertia, setting up a project, deploying to a remote, managing your deployment, and advanced usage tips.

Why Use Inertia?

If you...

  • want a simple utility to quickly build and deploy the latest iterations of your projects
  • are new to the concept of "deployment" and related tooling
  • are on a tight budget and need to switch between cloud providers as your free trials run out
  • want some lightweight team features for managing your deployment

Inertia might be for you! For example, UBC Launch Pad teams have used Inertia to set up automated deployments for projects like Rocket 2 and Bumper, and nwPlus used Inertia to stage previews of the nwHacks 2019 website during development.



💡 Motivation and Design

UBC Launch Pad 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.

Many 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.

The primary design goals of Inertia are to:

  • minimize setup time for new projects
  • maximise compatibility across different client and VPS platforms
  • offer an easy-to-learn interface for managing deployed applications

How It Works

There is a detailed Medium post 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:

In summary, Inertia consists of two major components: a deployment daemon and a command line interface.

The 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.

Inertia 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. 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 to build and deploy user projects.



📚 Contributing

Any contribution (pull requests, feedback, bug reports, ideas, etc.) is welcome!

Please see our contribution guide for contribution guidelines as well as a detailed guide to help you get started with Inertia's codebase.


0 1 2 3 4 5 6 7

More Repositories

1

minutes

🔭 Speaker diarization via transfer learning
Python
27
star
2

sync

📺 Interactive, synchronized YouTube streaming
TypeScript
23
star
3

rocket2

🚀 The official UBC Launch Pad Slack bot and team management platform
Python
18
star
4

cumulus

💸 Cryptocurrency that doesn't waste your time
Go
13
star
5

bumper

🥊 Fast-paced multiplayer arcade game, built with Go, Javascript, and WebSockets
Go
13
star
6

pinpoint

📊 Versatile applicant management for any organization
Go
11
star
7

clinical-logging

Clinical logging platform to scan, digitize and store information from handwritten case records.
JavaScript
10
star
8

ubclaunchpad.com

✨ The official UBC Launch Pad website - https://ubclaunchpad.com
Vue
10
star
9

Essentially

Tool to Summarize and Analyze Articles
Jupyter Notebook
9
star
10

time-tracker

⏰ Track and visualize how you spend your time
Dart
9
star
11

todo-scheduler

Optimizes productivity by scheduling unscheduled to-do items into user's calendar
Dart
8
star
12

news-sentiment

📰 Your companion navigating the news!
Go
7
star
13

LP-website

UBC Launch Pad knowledge base
Svelte
7
star
14

Footprint

🍃 Learn how the food you eat impacts your carbon footprint
JavaScript
7
star
15

lp-interview-scheduler

📅 UBC Launch Pad's interview scheduling platform
TypeScript
6
star
16

labby

BC Cancer Lab Management System
JavaScript
6
star
17

Euphony

Generates playlists based on a list of filters and specifications
TypeScript
6
star
18

PromoPal-backend

Finding the best restaurant promotions and deals while supporting local 🍔
TypeScript
6
star
19

HappyHour

A supercharged when2meet alternative ⚡️
Vue
5
star
20

floradora

Jupyter Notebook
5
star
21

yeetcode

LeetCode/HackerRank PvP
JavaScript
5
star
22

food-doods

Dabbing out food waste and over-spending on groceries
Swift
5
star
23

PromoPal-frontend

The frontend for PromoPal.
TypeScript
4
star
24

task-scheduling

Dart
4
star
25

ubcsim2

💭 A 'choose your own adventure' style browser game where the player attempts to survive a year as a student at UBC
TypeScript
4
star
26

ubc-degree-navigator

JavaScript
4
star
27

rocketpoll

An iOS app for polling within groups
Swift
4
star
28

sleuth

:shipit: Domain-specific search engine service backed by Django, Apache Solr, and Scrapy
Python
4
star
29

physiospace-react

The Physio Space React App
CSS
3
star
30

sift-web

Web interface for the Sift app
JavaScript
3
star
31

mimic

💬 Mimicking text for great fun and delight
Python
3
star
32

epilog

Dart
3
star
33

Internado

🌪 Find Internship Opportunities
TypeScript
3
star
34

bounce

🏀 Bringing people with common interests together
Python
3
star
35

durian

🍍 A scripting language halfway between bash and python
C++
3
star
36

Room8

🏠 A WIP roommate organization mobile app.
Java
3
star
37

etch.space

📝 A live multi-user collaborative etch-a-sketch built on websockets.
JavaScript
3
star
38

life-at-ubc

Course scheduling at UBC made easier!
TypeScript
3
star
39

nei-nei

Vancouver housing analytics
JavaScript
3
star
40

sift-nlp

Natural language processing and analysis service of the Sift app
Python
3
star
41

virtual-pet

Dart
3
star
42

workoutpersonalizer-backend

TypeScript
2
star
43

localization

Python
2
star
44

workshop-guide-to-docker

🎃 Materials for UBC Launch Pad's "A Developer's Guide to Docker" workshop
JavaScript
2
star
45

yelp-challenge

UBC Launch Pad's entry for the Yelp Dataset Challenge
Python
2
star
46

workoutpersonalizer-frontend

Dart
2
star
47

accessyouth-api

The backend to support youth outreach and empowerment by facilitating easier communication between Access Youth (NPO) and troubled youth
TypeScript
2
star
48

soil-topARgraphy

🌱 Android app that teaches soil science students in APBI 200 through AR
Java
2
star
49

ratemycourse

Java
2
star
50

LumberMill

A Simple iOS Testing Framework
Swift
2
star
51

ubclaunchpad.github.io-old

🍗 (formerly) UBC Launch Pad's official website - superseded by https://github.com/ubclaunchpad/ubclaunchpad.com
CSS
2
star
52

eat

Should we eat 🌮, 🍟, or 🍣?
Swift
2
star
53

driver

🚗 Getting everyone home safe
Java
2
star
54

rocket

🚀 Slack bot, team management, and onboarding system for UBC Launch Pad - superseded by Rocket2: https://github.com/ubclaunchpad/rocket2
Go
2
star
55

ledge-it

An app targeted to help students take control of their finances as seamlessly as possible.
JavaScript
2
star
56

hermes

👟 On the way to captioning dialogs
Python
2
star
57

rocketcast

📻 Podcast discovery and playback
Swift
2
star
58

handbook

1
star
59

CosmicGateway

The official UBC Launch Pad website // will replace current https://ubclaunchpad.com
Svelte
1
star
60

QuestionNight

1
star
61

iOS-Easier-Task

A pre-task for iOS hiring
1
star
62

sift-api

API server for the Sift app
Go
1
star
63

ubc-api-base-docs

An api that is able to call many UBC apis. Backend in AWS API Gateway + Lambda. Frontend in react.js
JavaScript
1
star
64

physiospace-backend

backend for physiospace
Python
1
star
65

iOS-Easy-Task

A pre-task for iOS hiring
1
star
66

sleuth-frontend

🕵🏻 Web app for Sleuth, a domain-specific search engine service
JavaScript
1
star
67

eslint-config-ubclaunchpad

JavaScript code standards for UBC Launch Pad
JavaScript
1
star
68

physiospace-api

Physiospace express api with mongoose/mongodb
JavaScript
1
star
69

cashout

💵 Fantasy currency trading
Ruby
1
star
70

vue-fathom

🔌 A simple Vue plugin for Fathom Analytics
JavaScript
1
star
71

simon

JavaScript interview question project
JavaScript
1
star