Jig [ jig ]

noun

a device that holds a piece of work and guides the tool operating on it.

What is Jig?


Jig is a dead simple deployment tool to automate routine work with Docker and Traefik to streamline running services on own virtual servers with following goals:

  • Bring Vercel DX to own servers: Vercel is setting a standard for deployment tools for many years and aiming for anything less would mean disservice to everyone
  • Minimize error human error via automation: It's very easy to forget one little command, skip a stop while removing a container and you get an error, start over and get sad. Automation solves this, but when bash scripts aren't enough stuff like Jig should be a great start
  • Keep things fast: From one line deployments to keeping disk writes to absolute minimum streaming data whereever this is possible, it is important to keep things fast for the comfortable blazingly fast™ automation

Jig was heavily inspired by Zeit (older version of Vercel) and Exoframe.js with focus on self-hosting and being minimal whenever this is possible.

Installation


Installation is in two steps:

  • Server setup: Run a startup script on the server to pull all relevant images and take off
  • Client setup: Download a client and get authentication ready

Server setup

Docker is a prerequisite, so ensure docker is available and running on your server

DNS management is not builtin just yet so you need to point domain names you wish to use with Jig manually. 😔

Thankfully it's mostly a one-time thing and you won't need to deal with it later. With Vercel domains it's as easy as an example below, but it depends on your provider

bash
vc dns add <your base domain> <sub domain> A <your server public IP>

As a last infra part you'll need to open up ports 80 (http) and 443 (https). Traefik handles https redirection and Let's Encrypt http challenges so you don't need to worry about unsecured connections

Load and run startup\update script below

bash
curl -fsSL https://deploywithjig.askh.at/init.sh | bash

This will load traefik, jig, ask you for an email, jwt signing key, launch everything and spit out a command to run on your machine to login

Login command will look something like jig login loooooong+code keep it for later

Client setup

Any node package manager is a prerequisite

bash
curl -fsSL https://deploywithjig.askh.at/install.sh | bash

After that just plug in the command you received in Server setup stage and start deploying

Start deploying


Initiate jig project and create the config

bash
jig init

Deploy your project with a single command. Jig will pack the project, send it to the server and build it remotely

bash
jig deploy

Or build it locally using docker and deploy the image to the server. This is useful for CI and to save resources on the server

bash
jig deploy -l

Let Traefik fetch certificates if you deploy with TLS enabled and you're done