Proxy boot config

Add commands for managing proxy boot config. Since the proxy can be
shared by multiple applications, the configuration doesn't belong in
`config/deploy.yml`.

Instead you can set the config with:

```
Usage:
  kamal proxy boot_config <set|get|clear>

Options:
      [--publish], [--no-publish], [--skip-publish]   # Publish the proxy ports on the host
                                                      # Default: true
      [--http-port=N]                                 # HTTP port to publish on the host
                                                      # Default: 80
      [--https-port=N]                                # HTTPS port to publish on the host
                                                      # Default: 443
      [--docker-options=option=value option2=value2]  # Docker options to pass to the proxy container
```

By default we boot the proxy with `--publish 80:80 --publish 443:443`.

You can stop it from publishing ports, specify different ports and pass
other docker options.

The config is stored in `.kamal/proxy/options` as arguments to be passed
verbatim to docker run.

Where someone wants to set the options in their application they can do
that by calling `kamal proxy boot_config set` in a pre-deploy hook.

There's an example in the integration tests showing how to use this to
front kamal-proxy with Traefik, using an accessory.
This commit is contained in:
Donal McBreen
2024-09-25 14:31:10 -04:00
parent e71bfcbadd
commit f6851048a6
15 changed files with 241 additions and 31 deletions

View File

@@ -0,0 +1,29 @@
service: app_with_traefik
image: app_with_traefik
servers:
- vm1
- vm2
deploy_timeout: 2
drain_timeout: 2
readiness_delay: 0
registry:
server: registry:4443
username: root
password: root
builder:
driver: docker
arch: <%= Kamal::Utils.docker_arch %>
args:
COMMIT_SHA: <%= `git rev-parse HEAD` %>
accessories:
traefik:
service: traefik
image: traefik:v2.10
port: 80
cmd: "--providers.docker"
options:
volume:
- "/var/run/docker.sock:/var/run/docker.sock"
roles:
- web