Elixir Caddy
View SourceStart Caddy
reverse proxy server in Elixir
project.
Manage caddy configuration in Elixir
.
Add this in deps
in mix.exs
to install
{:caddy, "~> 2.1.3"}
If caddy bin is set, caddy server will automate start when application start.
Start in extra_applications
def application do
[
extra_applications: [Caddy.Application]
]
end
- Notice
If caddy_bin is not specifiy, Caddy.Server will not start.
Set Caddy
binary when needed.
Set caddy_bin
to the path of Caddy binary file and start Caddy.Server
.
Caddy.Config.set_bin("/usr/bin/caddy")
Caddy.restart_server()
This will restart server automatically
Caddy.Config.set_bin!("/usr/bin/caddy")
Config
import Config
# dump caddy server log to stdout
config :caddy, dump_log: false
# caddy server will not start, this is useful for testing
config :caddy, start: false
# configure caddy paths
config :caddy, :base_path, "/custom/caddy/path"
config :caddy, :etc_path, "/custom/etc/path"
config :caddy, :run_path, "/custom/run/path"
config :caddy, :tmp_path, "/custom/tmp/path"
config :caddy, :env_file, "/custom/path/envfile"
config :caddy, :pid_file, "/custom/path/caddy.pid"
Telemetry
The library includes comprehensive telemetry support for monitoring Caddy operations. Telemetry events are emitted for:
- Configuration changes:
[:caddy, :config, :set]
,[:caddy, :config, :get]
, etc. - Server lifecycle:
[:caddy, :server, :start]
,[:caddy, :server, :stop]
- API operations:
[:caddy, :api, :request]
,[:caddy, :api, :response]
- File operations:
[:caddy, :file, :read]
,[:caddy, :file, :write]
- Validation:
[:caddy, :validation, :success]
,[:caddy, :validation, :error]
- Adaptation:
[:caddy, :adapt, :success]
,[:caddy, :adapt, :error]
Usage Example
# Attach telemetry handler
:telemetry.attach_many("caddy_handler", [
[:caddy, :config, :set],
[:caddy, :server, :start]
], fn event_name, measurements, metadata, _config ->
IO.inspect({event_name, measurements, metadata})
end, %{})
# Start telemetry poller
Caddy.Telemetry.start_poller(30_000)
Available Functions
Caddy.Telemetry.emit_config_change/3
- Configuration change eventsCaddy.Telemetry.emit_server_event/3
- Server lifecycle eventsCaddy.Telemetry.emit_api_event/3
- API operation eventsCaddy.Telemetry.list_events/0
- List all available eventsCaddy.Telemetry.attach_handler/3
- Attach telemetry handlerCaddy.Telemetry.detach_handler/1
- Detach telemetry handler