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
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
curl -fsSLO https://deploywithjig.askh.at/init.sh && bash init.sh
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
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
jig init
Deploy your project with a single command. Jig will pack the project, send it to the server and build it remotely
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
jig deploy -l
Let Traefik fetch certificates if you deploy with TLS enabled and you're done