Merge pull request #1000 from kpumuk/hosts

Allow specifying multiple hosts for kamal-proxy via an array
This commit is contained in:
Donal McBreen
2024-09-30 10:26:15 -04:00
committed by GitHub
7 changed files with 57 additions and 8 deletions

View File

@@ -360,7 +360,7 @@ class Kamal::Configuration
end
def ensure_unique_hosts_for_ssl_roles
hosts = roles.select(&:ssl?).map { |role| role.proxy.host }
hosts = roles.select(&:ssl?).flat_map { |role| role.proxy.hosts }
duplicates = hosts.tally.filter_map { |host, count| host if count > 1 }
raise Kamal::ConfigurationError, "Different roles can't share the same host for SSL: #{duplicates.join(", ")}" if duplicates.any?

View File

@@ -17,16 +17,19 @@
# `proxy: true` or providing a proxy configuration.
proxy:
# Host
# Hosts
#
# The hosts that will be used to serve the app. The proxy will only route requests
# to this host to your app.
#
# If no hosts are set, then all requests will be forwarded, except for matching
# requests for other apps deployed on that server that do have a host set.
#
# Specify one of `host` or `hosts`.
host: foo.example.com
# If multiple hosts are needed, these can be specified by comma-separating the hosts.
host: foo.example.com,bar.example.com
hosts:
- foo.example.com
- bar.example.com
# App port
#

View File

@@ -22,13 +22,13 @@ class Kamal::Configuration::Proxy
proxy_config.fetch("ssl", false)
end
def host
proxy_config["host"]
def hosts
proxy_config["hosts"] || proxy_config["host"]&.split(",") || []
end
def deploy_options
{
host: proxy_config["host"],
host: hosts,
tls: proxy_config["ssl"] ? true : nil,
"deploy-timeout": seconds_duration(config.deploy_timeout),
"drain-timeout": seconds_duration(config.drain_timeout),

View File

@@ -3,9 +3,13 @@ class Kamal::Configuration::Validator::Proxy < Kamal::Configuration::Validator
unless config.nil?
super
if config["host"].blank? && config["ssl"]
if config["host"].blank? && config["hosts"].blank? && config["ssl"]
error "Must set a host to enable automatic SSL"
end
if (config.keys & [ "host", "hosts" ]).size > 1
error "Specify one of 'host' or 'hosts', not both"
end
end
end
end