kamal 2.1.0 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/kamal/cli/main.rb +1 -1
- data/lib/kamal/cli/templates/deploy.yml +3 -2
- data/lib/kamal/cli/templates/sample_hooks/docker-setup.sample +2 -12
- data/lib/kamal/commander/specifics.rb +7 -2
- data/lib/kamal/configuration/proxy.rb +1 -1
- data/lib/kamal/version.rb +1 -1
- metadata +2 -3
- data/lib/kamal/configuration/proxy.rb.orig +0 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1aaf8b7548e1dfebb3f19739491a5fb53ec715aea28ea3a93060b4b08c7904da
|
4
|
+
data.tar.gz: f4c669cfff249ab9595a6109ee6d858601345495e689b9c8e020c3e1fe7a477f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a3ee617d039db0c058fede9fbe66c0ffcc937c437ec9a85c13d2f5d9c645e475a29eab638d05b938305a197dba96493f9d9349fc736c226ef1457615843f648
|
7
|
+
data.tar.gz: 7ef1c0c7173d2f8c0b37d0f5efa507c70f8691c9045ccbfce78daec50fc71faf396e2e456a29c86e78f59fe8f1a0ac785a9ff8c27455d86ca04573faf46de08c
|
data/lib/kamal/cli/main.rb
CHANGED
@@ -135,7 +135,7 @@ class Kamal::Cli::Main < Kamal::Cli::Base
|
|
135
135
|
puts "No documentation found for #{section}"
|
136
136
|
end
|
137
137
|
|
138
|
-
desc "init", "Create config stub in config/deploy.yml and
|
138
|
+
desc "init", "Create config stub in config/deploy.yml and secrets stub in .kamal"
|
139
139
|
option :bundle, type: :boolean, default: false, desc: "Add Kamal to the Gemfile and create a bin/kamal binstub"
|
140
140
|
def init
|
141
141
|
require "fileutils"
|
@@ -14,8 +14,9 @@ servers:
|
|
14
14
|
# cmd: bin/jobs
|
15
15
|
|
16
16
|
# Enable SSL auto certification via Let's Encrypt (and allow for multiple apps on one server).
|
17
|
-
#
|
18
|
-
|
17
|
+
# If using something like Cloudflare, it is recommended to set encryption mode
|
18
|
+
# in Cloudflare's SSL/TLS setting to "Full" to enable end-to-end encryption.
|
19
|
+
proxy:
|
19
20
|
ssl: true
|
20
21
|
host: app.example.com
|
21
22
|
# kamal-proxy connects to your container over port 80, use `app_port` to specify a different port.
|
@@ -1,13 +1,3 @@
|
|
1
|
-
#!/
|
1
|
+
#!/bin/sh
|
2
2
|
|
3
|
-
|
4
|
-
#
|
5
|
-
# Sets up a Docker network on defined hosts which can then be used by the application’s containers
|
6
|
-
|
7
|
-
hosts = ENV["KAMAL_HOSTS"].split(",")
|
8
|
-
|
9
|
-
hosts.each do |ip|
|
10
|
-
destination = "root@#{ip}"
|
11
|
-
puts "Creating a Docker network \"kamal\" on #{destination}"
|
12
|
-
`ssh #{destination} docker network create kamal`
|
13
|
-
end
|
3
|
+
echo "Docker set up on $KAMAL_HOSTS..."
|
@@ -43,7 +43,12 @@ class Kamal::Commander::Specifics
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def specified_hosts
|
46
|
-
|
47
|
-
|
46
|
+
specified_hosts = specific_hosts || config.all_hosts
|
47
|
+
|
48
|
+
if (specific_role_hosts = specific_roles&.flat_map(&:hosts)).present?
|
49
|
+
specified_hosts.select { |host| specific_role_hosts.include?(host) }
|
50
|
+
else
|
51
|
+
specified_hosts
|
52
|
+
end
|
48
53
|
end
|
49
54
|
end
|
@@ -29,7 +29,7 @@ class Kamal::Configuration::Proxy
|
|
29
29
|
def deploy_options
|
30
30
|
{
|
31
31
|
host: hosts,
|
32
|
-
tls: proxy_config["ssl"],
|
32
|
+
tls: proxy_config["ssl"].presence,
|
33
33
|
"deploy-timeout": seconds_duration(config.deploy_timeout),
|
34
34
|
"drain-timeout": seconds_duration(config.drain_timeout),
|
35
35
|
"health-check-interval": seconds_duration(proxy_config.dig("healthcheck", "interval")),
|
data/lib/kamal/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kamal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-10-
|
11
|
+
date: 2024-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -285,7 +285,6 @@ files:
|
|
285
285
|
- lib/kamal/configuration/env/tag.rb
|
286
286
|
- lib/kamal/configuration/logging.rb
|
287
287
|
- lib/kamal/configuration/proxy.rb
|
288
|
-
- lib/kamal/configuration/proxy.rb.orig
|
289
288
|
- lib/kamal/configuration/registry.rb
|
290
289
|
- lib/kamal/configuration/role.rb
|
291
290
|
- lib/kamal/configuration/servers.rb
|
@@ -1,67 +0,0 @@
|
|
1
|
-
class Kamal::Configuration::Proxy
|
2
|
-
include Kamal::Configuration::Validation
|
3
|
-
|
4
|
-
DEFAULT_LOG_REQUEST_HEADERS = [ "Cache-Control", "Last-Modified", "User-Agent" ]
|
5
|
-
CONTAINER_NAME = "kamal-proxy"
|
6
|
-
|
7
|
-
delegate :argumentize, :optionize, to: Kamal::Utils
|
8
|
-
|
9
|
-
attr_reader :config, :proxy_config
|
10
|
-
|
11
|
-
def initialize(config:, proxy_config:, context: "proxy")
|
12
|
-
@config = config
|
13
|
-
@proxy_config = proxy_config
|
14
|
-
validate! @proxy_config, with: Kamal::Configuration::Validator::Proxy, context: context
|
15
|
-
end
|
16
|
-
|
17
|
-
def app_port
|
18
|
-
proxy_config.fetch("app_port", 80)
|
19
|
-
end
|
20
|
-
|
21
|
-
def ssl?
|
22
|
-
proxy_config.fetch("ssl", false)
|
23
|
-
end
|
24
|
-
|
25
|
-
def hosts
|
26
|
-
proxy_config["hosts"] || proxy_config["host"]&.split(",") || []
|
27
|
-
end
|
28
|
-
|
29
|
-
def deploy_options
|
30
|
-
{
|
31
|
-
<<<<<<< HEAD
|
32
|
-
host: hosts,
|
33
|
-
tls: proxy_config["ssl"] ? true : nil,
|
34
|
-
=======
|
35
|
-
host: proxy_config["host"],
|
36
|
-
tls: proxy_config["ssl"],
|
37
|
-
>>>>>>> 530d2cb (Use `=` in kamal-proxy deploy command args)
|
38
|
-
"deploy-timeout": seconds_duration(config.deploy_timeout),
|
39
|
-
"drain-timeout": seconds_duration(config.drain_timeout),
|
40
|
-
"health-check-interval": seconds_duration(proxy_config.dig("healthcheck", "interval")),
|
41
|
-
"health-check-timeout": seconds_duration(proxy_config.dig("healthcheck", "timeout")),
|
42
|
-
"health-check-path": proxy_config.dig("healthcheck", "path"),
|
43
|
-
"target-timeout": seconds_duration(proxy_config["response_timeout"]),
|
44
|
-
"buffer-requests": proxy_config.fetch("buffering", { "requests": true }).fetch("requests", true),
|
45
|
-
"buffer-responses": proxy_config.fetch("buffering", { "responses": true }).fetch("responses", true),
|
46
|
-
"buffer-memory": proxy_config.dig("buffering", "memory"),
|
47
|
-
"max-request-body": proxy_config.dig("buffering", "max_request_body"),
|
48
|
-
"max-response-body": proxy_config.dig("buffering", "max_response_body"),
|
49
|
-
"forward-headers": proxy_config.dig("forward_headers"),
|
50
|
-
"log-request-header": proxy_config.dig("logging", "request_headers") || DEFAULT_LOG_REQUEST_HEADERS,
|
51
|
-
"log-response-header": proxy_config.dig("logging", "response_headers")
|
52
|
-
}.compact
|
53
|
-
end
|
54
|
-
|
55
|
-
def deploy_command_args(target:)
|
56
|
-
optionize ({ target: "#{target}:#{app_port}" }).merge(deploy_options), with: "="
|
57
|
-
end
|
58
|
-
|
59
|
-
def merge(other)
|
60
|
-
self.class.new config: config, proxy_config: proxy_config.deep_merge(other.proxy_config)
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
def seconds_duration(value)
|
65
|
-
value ? "#{value}s" : nil
|
66
|
-
end
|
67
|
-
end
|