slick-deploy

module
v0.0.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 7, 2024 License: MIT

README



SlickDeploy



Slick Deploy

Slick Deploy is a command-line tool designed to facilitate zero-downtime deployment for applications running in Docker containers, with Caddy as the reverse proxy.

[!WARNING] Slick is not ready for production, but you can give it a shot if you're feeling adventurous

Features

  • Zero-downtime deployment: Update your running application without interrupting service.
  • Easy configuration: Use simple YAML files to manage deployment settings.
  • Health checks: Ensure your application is running correctly before switching over.
  • Rollback capability: Quickly revert to the previous version if something goes wrong.

Why?

Just for fun, I couldn't find a tool that was minimal and had near zero-downtime deploys. All I was looking for something that worked as a slim layer between me and the tools I use to run apps on a VM. So I built it. I also wanted to learn Go for a while, and Go is simply amazing for building CLI tools.

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

Prerequisites

Before you begin, ensure you have the following installed:

  • Docker
  • Caddy
  • Go (1.15 or later)
Installing

To start using Slick Deploy, install it right from the source:

git clone https://github.com/scmmishra/slick-deploy.git
cd slick-deploy
make install
Usage

To deploy an application:

slick deploy --config path/to/your/config.yaml --env path/to/your/.env

To check the status of your deployment:

slick status

To check logs for your deployment:

slick logs

See slick --help for more information on commands and flags.

Configuration

Create a config.yaml file with your deployment settings. Here's an example configuration:

app:
  name: "memos"
  image: "ghcr.io/usememos/memos"
  container_port: 5230
  registry:
    username: "<username>"
    password: SLICK_REGISTRY_PASSWORD
  env:
    - AWS_S3_ACCESS_KEY_ID
    - AWS_S3_BUCKET_NAME
    - AWS_S3_CUSTOM_DOMAIN
    - AWS_S3_ENDPOINT_URL
    - AWS_S3_REGION_NAME
    - AWS_S3_SECRET_ACCESS_KEY
  port_range:
    start: 8000
    end: 9000

caddy:
  admin_api: "http://localhost:2019"
  rules:
    - match: "*.pages.dev"
      reverse_proxy:
        - path: ""
          to: "http://localhost:{port}"

    - match: "localhost"
      reverse_proxy:
        - path: ""
          to: "localhost:{port}"
        - path: "/api/*"
          to: "localhost:{port}/internal/api/*"

health_check:
  endpoint: "/health"
  timeout_seconds: 5
Managing environment variables

You can point to an .env file to load environment variables from. This is useful for storing sensitive information like passwords and API keys.

slick deploy --config path/to/your/config.yaml --env path/to/your/.env

However, it is best to use a tool like Phase to manage your environment variables. Phase allows you to store your environment variables in a secure, encrypted vault, and then inject them into your application at runtime.

phase run slick deploy

Read more about Phase CLI here.

Development

To run the build with air use the following command

air --build.cmd "go build -o bin/slick cmd/slick/main.go" --build.bin ""

Add an alias to your .bashrc or .zshrc file to make it easier to run the slick command

alias slickdev="<path-to-project>/bin/slick"

Note, we use slickdev instead of slick to avoid conflicts with the global slick binary.

Testing

To run the tests, use the following command

go test ./... -coverprofile=coverage.out

This will also generate the coverage report, which can be viewed by running

go tool cover -html=coverage.out

Directories

Path Synopsis
cmd
internal
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL