Replace Traefik with parachute

[mproxy](https://github.com/basecamp/parachute) 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.
This commit is contained in:
Donal McBreen
2024-03-08 08:19:48 +00:00
parent 10b8c826d8
commit 822590dcf6
66 changed files with 754 additions and 1161 deletions

View File

@@ -44,10 +44,10 @@ class IntegrationTest < ActiveSupport::TestCase
deployer_exec(:kamal, *commands, **options)
end
def assert_app_is_down
def assert_app_is_down(response_code: "503")
response = app_response
debug_response_code(response, "502")
assert_equal "502", response.code
debug_response_code(response, response_code)
assert_equal response_code, response.code
end
def assert_app_is_up(version: nil)
@@ -101,8 +101,8 @@ class IntegrationTest < ActiveSupport::TestCase
def assert_200(response)
code = response.code
if code != "200"
puts "Got response code #{code}, here are the traefik logs:"
kamal :traefik, :logs
puts "Got response code #{code}, here are the proxy logs:"
kamal :proxy, :logs
puts "And here are the load balancer logs"
docker_compose :logs, :load_balancer
puts "Tried to get the response code again and got #{app_response.code}"
@@ -129,10 +129,10 @@ class IntegrationTest < ActiveSupport::TestCase
def debug_response_code(app_response, expected_code)
code = app_response.code
if code != expected_code
puts "Got response code #{code}, here are the traefik logs:"
kamal :traefik, :logs
puts "Got response code #{code}, here are the proxy logs:"
kamal :proxy, :logs, raise_on_error: false
puts "And here are the load balancer logs"
docker_compose :logs, :load_balancer
docker_compose :logs, :load_balancer, raise_on_error: false
puts "Tried to get the response code again and got #{app_response.code}"
end
end