Merge branch 'basecamp:main' into buildpacks
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
require "active_support/core_ext/array/conversions"
|
||||
|
||||
class Kamal::Cli::Accessory < Kamal::Cli::Base
|
||||
desc "boot [NAME]", "Boot new accessory service on host (use NAME=all to boot all accessories)"
|
||||
def boot(name, prepare: true)
|
||||
|
||||
@@ -135,7 +135,7 @@ class Kamal::Cli::Main < Kamal::Cli::Base
|
||||
puts "No documentation found for #{section}"
|
||||
end
|
||||
|
||||
desc "init", "Create config stub in config/deploy.yml and env stub in .env"
|
||||
desc "init", "Create config stub in config/deploy.yml and secrets stub in .kamal"
|
||||
option :bundle, type: :boolean, default: false, desc: "Add Kamal to the Gemfile and create a bin/kamal binstub"
|
||||
def init
|
||||
require "fileutils"
|
||||
|
||||
@@ -21,16 +21,18 @@ class Kamal::Cli::Proxy < Kamal::Cli::Base
|
||||
end
|
||||
end
|
||||
|
||||
desc "boot_config <set|get|clear>", "Mange kamal-proxy boot configuration"
|
||||
desc "boot_config <set|get|reset>", "Manage kamal-proxy boot configuration"
|
||||
option :publish, type: :boolean, default: true, desc: "Publish the proxy ports on the host"
|
||||
option :http_port, type: :numeric, default: Kamal::Configuration::PROXY_HTTP_PORT, desc: "HTTP port to publish on the host"
|
||||
option :https_port, type: :numeric, default: Kamal::Configuration::PROXY_HTTPS_PORT, desc: "HTTPS port to publish on the host"
|
||||
option :log_max_size, type: :string, default: Kamal::Configuration::PROXY_LOG_MAX_SIZE, desc: "Max size of proxy logs"
|
||||
option :docker_options, type: :array, default: [], desc: "Docker options to pass to the proxy container", banner: "option=value option2=value2"
|
||||
def boot_config(subcommand)
|
||||
case subcommand
|
||||
when "set"
|
||||
boot_options = [
|
||||
*(KAMAL.config.proxy_publish_args(options[:http_port], options[:https_port]) if options[:publish]),
|
||||
*(KAMAL.config.proxy_logging_args(options[:log_max_size])),
|
||||
*options[:docker_options].map { |option| "--#{option}" }
|
||||
]
|
||||
|
||||
|
||||
@@ -13,12 +13,14 @@ servers:
|
||||
# - 192.168.0.1
|
||||
# cmd: bin/jobs
|
||||
|
||||
# Enable SSL auto certification via Let's Encrypt (and allow for multiple apps on one server).
|
||||
# Set ssl: false if using something like Cloudflare to terminate SSL (but keep host!).
|
||||
proxy:
|
||||
# Enable SSL auto certification via Let's Encrypt and allow for multiple apps on a single web server.
|
||||
# Remove this section when using multiple web servers and ensure you terminate SSL at your load balancer.
|
||||
#
|
||||
# Note: If using Cloudflare, set encryption mode in SSL/TLS setting to "Full" to enable CF-to-app encryption.
|
||||
proxy:
|
||||
ssl: true
|
||||
host: app.example.com
|
||||
# kamal-proxy connects to your container over port 80, use `app_port` to specify a different port.
|
||||
# Proxy connects to your container on port 80 by default.
|
||||
# app_port: 3000
|
||||
|
||||
# Credentials for your image host.
|
||||
@@ -89,7 +91,7 @@ builder:
|
||||
# directories:
|
||||
# - data:/var/lib/mysql
|
||||
# redis:
|
||||
# image: redis:7.0
|
||||
# image: valkey/valkey:8
|
||||
# host: 192.168.0.2
|
||||
# port: 6379
|
||||
# directories:
|
||||
|
||||
@@ -1,13 +1,3 @@
|
||||
#!/usr/bin/env ruby
|
||||
#!/bin/sh
|
||||
|
||||
# A sample docker-setup hook
|
||||
#
|
||||
# Sets up a Docker network on defined hosts which can then be used by the application’s containers
|
||||
|
||||
hosts = ENV["KAMAL_HOSTS"].split(",")
|
||||
|
||||
hosts.each do |ip|
|
||||
destination = "root@#{ip}"
|
||||
puts "Creating a Docker network \"kamal\" on #{destination}"
|
||||
`ssh #{destination} docker network create kamal`
|
||||
end
|
||||
echo "Docker set up on $KAMAL_HOSTS..."
|
||||
|
||||
@@ -43,7 +43,12 @@ class Kamal::Commander::Specifics
|
||||
end
|
||||
|
||||
def specified_hosts
|
||||
(specific_hosts || config.all_hosts) \
|
||||
.select { |host| (specific_roles || config.roles).flat_map(&:hosts).include?(host) }
|
||||
specified_hosts = specific_hosts || config.all_hosts
|
||||
|
||||
if (specific_role_hosts = specific_roles&.flat_map(&:hosts)).present?
|
||||
specified_hosts.select { |host| specific_role_hosts.include?(host) }
|
||||
else
|
||||
specified_hosts
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -11,14 +11,7 @@ module Kamal::Commands
|
||||
end
|
||||
|
||||
def run_over_ssh(*command, host:)
|
||||
"ssh".tap do |cmd|
|
||||
if config.ssh.proxy && config.ssh.proxy.is_a?(Net::SSH::Proxy::Jump)
|
||||
cmd << " -J #{config.ssh.proxy.jump_proxies}"
|
||||
elsif config.ssh.proxy && config.ssh.proxy.is_a?(Net::SSH::Proxy::Command)
|
||||
cmd << " -o ProxyCommand='#{config.ssh.proxy.command_line_template}'"
|
||||
end
|
||||
cmd << " -t #{config.ssh.user}@#{host} -p #{config.ssh.port} '#{command.join(" ").gsub("'", "'\\\\''")}'"
|
||||
end
|
||||
"ssh#{ssh_proxy_args} -t #{config.ssh.user}@#{host} -p #{config.ssh.port} '#{command.join(" ").gsub("'", "'\\\\''")}'"
|
||||
end
|
||||
|
||||
def container_id_for(container_name:, only_running: false)
|
||||
@@ -96,5 +89,14 @@ module Kamal::Commands
|
||||
def tags(**details)
|
||||
Kamal::Tags.from_config(config, **details)
|
||||
end
|
||||
|
||||
def ssh_proxy_args
|
||||
case config.ssh.proxy
|
||||
when Net::SSH::Proxy::Jump
|
||||
" -J #{config.ssh.proxy.jump_proxies}"
|
||||
when Net::SSH::Proxy::Command
|
||||
" -o ProxyCommand='#{config.ssh.proxy.command_line_template}'"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,29 +1,31 @@
|
||||
module Kamal::Commands::Builder::Clone
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
delegate :clone_directory, :build_directory, to: :"config.builder"
|
||||
end
|
||||
|
||||
def clone
|
||||
git :clone, Kamal::Git.root, "--recurse-submodules", path: clone_directory
|
||||
git :clone, escaped_root, "--recurse-submodules", path: config.builder.clone_directory.shellescape
|
||||
end
|
||||
|
||||
def clone_reset_steps
|
||||
[
|
||||
git(:remote, "set-url", :origin, Kamal::Git.root, path: build_directory),
|
||||
git(:fetch, :origin, path: build_directory),
|
||||
git(:reset, "--hard", Kamal::Git.revision, path: build_directory),
|
||||
git(:clean, "-fdx", path: build_directory),
|
||||
git(:submodule, :update, "--init", path: build_directory)
|
||||
git(:remote, "set-url", :origin, escaped_root, path: escaped_build_directory),
|
||||
git(:fetch, :origin, path: escaped_build_directory),
|
||||
git(:reset, "--hard", Kamal::Git.revision, path: escaped_build_directory),
|
||||
git(:clean, "-fdx", path: escaped_build_directory),
|
||||
git(:submodule, :update, "--init", path: escaped_build_directory)
|
||||
]
|
||||
end
|
||||
|
||||
def clone_status
|
||||
git :status, "--porcelain", path: build_directory
|
||||
git :status, "--porcelain", path: escaped_build_directory
|
||||
end
|
||||
|
||||
def clone_revision
|
||||
git :"rev-parse", :HEAD, path: build_directory
|
||||
git :"rev-parse", :HEAD, path: escaped_build_directory
|
||||
end
|
||||
|
||||
def escaped_root
|
||||
Kamal::Git.root.shellescape
|
||||
end
|
||||
|
||||
def escaped_build_directory
|
||||
config.builder.build_directory.shellescape
|
||||
end
|
||||
end
|
||||
|
||||
@@ -14,9 +14,10 @@ class Kamal::Configuration
|
||||
|
||||
include Validation
|
||||
|
||||
PROXY_MINIMUM_VERSION = "v0.7.0"
|
||||
PROXY_MINIMUM_VERSION = "v0.8.1"
|
||||
PROXY_HTTP_PORT = 80
|
||||
PROXY_HTTPS_PORT = 443
|
||||
PROXY_LOG_MAX_SIZE = "10m"
|
||||
|
||||
class << self
|
||||
def create_from(config_file:, destination: nil, version: nil)
|
||||
@@ -252,8 +253,12 @@ class Kamal::Configuration
|
||||
argumentize "--publish", [ "#{http_port}:#{PROXY_HTTP_PORT}", "#{https_port}:#{PROXY_HTTPS_PORT}" ]
|
||||
end
|
||||
|
||||
def proxy_logging_args(max_size)
|
||||
argumentize "--log-opt", "max-size=#{max_size}"
|
||||
end
|
||||
|
||||
def proxy_options_default
|
||||
proxy_publish_args PROXY_HTTP_PORT, PROXY_HTTPS_PORT
|
||||
[ *proxy_publish_args(PROXY_HTTP_PORT, PROXY_HTTPS_PORT), *proxy_logging_args(PROXY_LOG_MAX_SIZE) ]
|
||||
end
|
||||
|
||||
def proxy_image
|
||||
|
||||
@@ -29,7 +29,7 @@ class Kamal::Configuration::Proxy
|
||||
def deploy_options
|
||||
{
|
||||
host: hosts,
|
||||
tls: proxy_config["ssl"],
|
||||
tls: proxy_config["ssl"].presence,
|
||||
"deploy-timeout": seconds_duration(config.deploy_timeout),
|
||||
"drain-timeout": seconds_duration(config.drain_timeout),
|
||||
"health-check-interval": seconds_duration(proxy_config.dig("healthcheck", "interval")),
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
module Kamal
|
||||
VERSION = "2.1.0"
|
||||
VERSION = "2.2.2"
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user