[mproxy](https://github.com/kevinmcconnell/mproxy) is a custom minimal proxy designed specifically for Kamal. It has two big advantages over Traefik: 1. Imperative deployments - we tell it to switch from container A to container B, and it waits for container B to start then switches. No need to poll for health checks ourselves or mess around with forcing health checks to fail. 2. Support for multiple apps - as much as possible, configuration is supplied at runtime by the deploy command, allowing us to have multiple apps share an instance of mproxy without conflicting config.
22 lines
814 B
Ruby
22 lines
814 B
Ruby
class Kamal::Cli::Healthcheck < Kamal::Cli::Base
|
|
default_command :perform
|
|
|
|
desc "perform", "Health check current app version"
|
|
def perform
|
|
raise "The primary host is not configured to run a proxy" unless KAMAL.config.role(KAMAL.config.primary_role).running_proxy?
|
|
on(KAMAL.primary_host) do
|
|
begin
|
|
execute *KAMAL.healthcheck.run
|
|
Poller.wait_for_healthy { capture_with_info(*KAMAL.healthcheck.status) }
|
|
rescue Poller::HealthcheckError => e
|
|
error capture_with_info(*KAMAL.healthcheck.logs)
|
|
error capture_with_pretty_json(*KAMAL.healthcheck.container_health_log)
|
|
raise
|
|
ensure
|
|
execute *KAMAL.healthcheck.stop, raise_on_non_zero_exit: false
|
|
execute *KAMAL.healthcheck.remove, raise_on_non_zero_exit: false
|
|
end
|
|
end
|
|
end
|
|
end
|