Files
git-pages/fly.toml
Catherine 4c087278cb Fly.io: switch health check method to [[services.http_checks]].
More specifically, remove the dedicated HTTP datapath for health
checks and verify the entire stack, from TLS frontend to S3 backend.
Verifying too little has resulted in a small outage recently when
the pages listener got misconfigured but the health listener happily
accepted connections like normal. This would not happen now that
the health check uses port 443, too.
2025-09-23 02:34:55 +00:00

101 lines
2.0 KiB
TOML

# Requires secrets to be set:
# - ACME_EMAIL
# - PAGES_CONFIG_FILE
# - PAGES_STORAGE_S3_ENDPOINT
# - PAGES_STORAGE_S3_ACCESS_KEY_ID
# - PAGES_STORAGE_S3_SECRET_ACCESS_KEY
# - PAGES_STORAGE_S3_BUCKET
[build]
dockerfile = "Dockerfile"
[experimental]
cmd = ["supervisord"]
[[vm]]
cpu-type = "shared"
cpus = 2
memory = 512
[env]
UDP_BIND_TO = "fly-global-services"
ALLOW_PROXY = "172.16.0.0/16"
AUTOMEMLIMIT = "0.25"
[[files]]
guest_path = "/app/config.toml"
local_path = "config.fly.toml"
# [::]:80/TCP; HTTP/1.1 and HTTP/2 (cleartext)
[[services]]
internal_port = 80
protocol = "tcp"
auto_stop_machines = "stop"
auto_start_machines = true
[[services.ports]]
port = 80
handlers = ["proxy_proto"]
proxy_proto_options = { version = "v2" }
[services.concurrency]
type = "connections"
soft_limit = 250
[[services.http_checks]]
protocol = "http"
method = "get"
path = "/"
headers = { Health-Check = "🩺", Host = "localhost" }
grace_period = "5s"
interval = "2s"
timeout = "1.5s"
# [::]:433/TCP; HTTP/1.1 and HTTP/2
[[services]]
internal_port = 443
protocol = "tcp"
auto_stop_machines = "stop"
auto_start_machines = true
[[services.ports]]
port = 443
handlers = ["proxy_proto"]
proxy_proto_options = { version = "v2" }
[services.concurrency]
type = "connections"
soft_limit = 250
[[services.http_checks]]
protocol = "https"
method = "get"
path = "/"
headers = { Health-Check = "🩺", Host = "localhost" }
grace_period = "5s"
interval = "2s"
timeout = "1.5s"
# At the moment there's no good way to handle this, so staging needs TLS keys from production
# for this one host that isn't used for anything other than full stack health checks.
# These can be copied over manually whenever they expire.
tls_skip_verify = false
tls_server_name = "git-pages.fly.dev"
# 0.0.0.0:433/UDP; HTTP/3
# (Fly.io does not support UDP on public IPv6!)
[[services]]
internal_port = 443
protocol = "udp"
ports = [{ port = 443 }]
auto_stop_machines = "stop"
auto_start_machines = true
# Metrics
[metrics]
port = 2019
path = "/metrics"