Skip to content

Commit

Permalink
Use bandit web server by default
Browse files Browse the repository at this point in the history
  • Loading branch information
mayel committed Oct 19, 2023
1 parent 8132e1f commit e4a4500
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 77 deletions.
2 changes: 1 addition & 1 deletion flavours/classic/config/deps.hex
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ plug_crypto = "~> 2.0" # newer crypto for plug/phoenix
plug_cowboy = "~> 2.6" # should match the version in phoenix's mix.exs
cowboy = "~> 2.10" # should match the version used in plug_cowboy
# gettext = "<= 0.21.0" # note: usually we should let bonfire_ui_common control this
bandit = ">= 0.6.3" # alternative to Cowboy web server
bandit = "~> 1.0" # alternative to Cowboy web server
orion = "~> 1.0" # tracing with web UI (at /admin/system/orion)

# admin tools
Expand Down
4 changes: 3 additions & 1 deletion flavours/classic/config/dev.exs
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,14 @@ local_deps =
# ),
# else: []

use_cowboy? = System.get_env("PLUG_SERVER") == "cowboy"

# Watch static and templates for browser reloading.
config :bonfire, Bonfire.Web.Endpoint,
server: true,
debug_errors: false,
check_origin: false,
http: [protocol_options: [idle_timeout: 120_000]],
http: if(use_cowboy?, do: [protocol_options: [idle_timeout: 120_000]], else: []),
watchers: [
yarn: [
"watch.js",
Expand Down
146 changes: 75 additions & 71 deletions flavours/classic/config/runtime.exs
Original file line number Diff line number Diff line change
Expand Up @@ -26,68 +26,6 @@ hosts =

# |> IO.inspect()

if (config_env() == :prod or System.get_env("OTEL_ENABLED") == "1") and
(System.get_env("OTEL_EXPORTER_OTLP_ENDPOINT") || System.get_env("OTEL_LIGHTSTEP_API_KEY") ||
System.get_env("OTEL_HONEYCOMB_API_KEY")) do
config :opentelemetry,
disabled: false

config :opentelemetry_exporter,
otlp_protocol: :http_protobuf

otel_endpoint = System.get_env("OTEL_EXPORTER_OTLP_ENDPOINT")

if otel_endpoint do
IO.puts("NOTE: OTLP (open telemetry) data will be sent to #{otel_endpoint}")

config :opentelemetry_exporter,
otlp_endpoint: otel_endpoint
end

if System.get_env("OTEL_LIGHTSTEP_API_KEY") do
IO.puts("NOTE: OTLP (open telemetry) data will be sent to lightstep.com")
# Example configuration for Lightstep.com, for more refers to:
# https://github.com/open-telemetry/opentelemetry-erlang/tree/main/apps/opentelemetry_exporter#application-environment
config :opentelemetry_exporter,
# You can configure the compression type for exporting traces.
otlp_compression: :gzip,
oltp_traces_compression: :gzip,
otlp_traces_endpoint: "https://ingest.lightstep.com:443/traces/otlp/v0.9",
otlp_headers: [
{"lightstep-access-token", System.get_env("OTEL_LIGHTSTEP_API_KEY")}
]
end

if System.get_env("OTEL_HONEYCOMB_API_KEY") do
IO.puts("NOTE: OTLP (open telemetry) data will be sent to honeycomb.io")

config :opentelemetry, :processors,
otel_batch_processor: %{
exporter: {
:opentelemetry_exporter,
%{
endpoints: [
{:https, ~c"api.honeycomb.io", 443,
[
verify: :verify_peer,
cacertfile: :certifi.cacertfile(),
depth: 3,
customize_hostname_check: [
match_fun: :public_key.pkix_verify_hostname_match_fun(:https)
]
]}
],
headers: [
{"x-honeycomb-team", System.fetch_env!("OTEL_HONEYCOMB_API_KEY")},
{"x-honeycomb-dataset", System.get_env("OTEL_SERVICE_NAME", "bonfire")}
],
protocol: :grpc
}
}
}
end
end

## load extensions' runtime configs (and behaviours) directly via extension-provided modules
Bonfire.Common.Config.LoadExtensionsConfig.load_configs(Bonfire.RuntimeConfig)
##
Expand Down Expand Up @@ -142,6 +80,8 @@ config :bonfire,
signing_salt: signing_salt,
root_path: File.cwd!()

use_cowboy? = System.get_env("PLUG_SERVER") == "cowboy"

config :bonfire, Bonfire.Web.Endpoint,
server:
config_env() != :test or System.get_env("TEST_INSTANCE") == "yes" or
Expand All @@ -152,19 +92,21 @@ config :bonfire, Bonfire.Web.Endpoint,
],
# check_origin: hosts, # FIXME
check_origin: false,
http: [
port: server_port,
transport_options:
if(System.get_env("PLUG_SERVER") != "bandit",
do: [max_connections: 16_384, socket_opts: [:inet6]],
else: [:inet6]
)
],
adapter:
if(System.get_env("PLUG_SERVER") != "bandit",
if(use_cowboy?,
do: Phoenix.Endpoint.Cowboy2Adapter,
else: Bandit.PhoenixAdapter
),
http:
if(use_cowboy?,
do: [
port: server_port,
transport_options: [max_connections: 16_384, socket_opts: [:inet6]]
],
else: [
port: server_port
]
),
secret_key_base: secret_key_base,
live_view: [signing_salt: signing_salt]

Expand Down Expand Up @@ -227,6 +169,68 @@ case System.get_env("GRAPH_DB_URL") do
pool_size: 10
end

if (config_env() == :prod or System.get_env("OTEL_ENABLED") == "1") and
(System.get_env("OTEL_EXPORTER_OTLP_ENDPOINT") || System.get_env("OTEL_LIGHTSTEP_API_KEY") ||
System.get_env("OTEL_HONEYCOMB_API_KEY")) do
config :opentelemetry,
disabled: false

config :opentelemetry_exporter,
otlp_protocol: :http_protobuf

otel_endpoint = System.get_env("OTEL_EXPORTER_OTLP_ENDPOINT")

if otel_endpoint do
IO.puts("NOTE: OTLP (open telemetry) data will be sent to #{otel_endpoint}")

config :opentelemetry_exporter,
otlp_endpoint: otel_endpoint
end

if System.get_env("OTEL_LIGHTSTEP_API_KEY") do
IO.puts("NOTE: OTLP (open telemetry) data will be sent to lightstep.com")
# Example configuration for Lightstep.com, for more refers to:
# https://github.com/open-telemetry/opentelemetry-erlang/tree/main/apps/opentelemetry_exporter#application-environment
config :opentelemetry_exporter,
# You can configure the compression type for exporting traces.
otlp_compression: :gzip,
oltp_traces_compression: :gzip,
otlp_traces_endpoint: "https://ingest.lightstep.com:443/traces/otlp/v0.9",
otlp_headers: [
{"lightstep-access-token", System.get_env("OTEL_LIGHTSTEP_API_KEY")}
]
end

if System.get_env("OTEL_HONEYCOMB_API_KEY") do
IO.puts("NOTE: OTLP (open telemetry) data will be sent to honeycomb.io")

config :opentelemetry, :processors,
otel_batch_processor: %{
exporter: {
:opentelemetry_exporter,
%{
endpoints: [
{:https, ~c"api.honeycomb.io", 443,
[
verify: :verify_peer,
cacertfile: :certifi.cacertfile(),
depth: 3,
customize_hostname_check: [
match_fun: :public_key.pkix_verify_hostname_match_fun(:https)
]
]}
],
headers: [
{"x-honeycomb-team", System.fetch_env!("OTEL_HONEYCOMB_API_KEY")},
{"x-honeycomb-dataset", System.get_env("OTEL_SERVICE_NAME", "bonfire")}
],
protocol: :grpc
}
}
}
end
end

# start prod-only config
if config_env() == :prod do
config :bonfire, Bonfire.Common.Repo,
Expand Down
4 changes: 2 additions & 2 deletions flavours/classic/config/templates/public.env
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@ MAIL_BACKEND=none
SEARCH_MEILI_INSTANCE=http://localhost:7700
# require an email address to be invited before being able to sign up
INVITE_ONLY=true

# uncomment in order to NOT automatically change the database schema when you upgrade the app
# DISABLE_DB_AUTOMIGRATION=true
# max file upload size (default is 20 meg)
UPLOAD_LIMIT=20000000
# Use cowboy or bandit as webserver?
PLUG_SERVER=bandit
# ====================================
# You should not have to edit any of the following ones:
POSTGRES_HOST=localhost
Expand All @@ -27,4 +28,3 @@ POSTGRES_USER=postgres
POSTGRES_DB=bonfire_db
ACME_AGREE=true
SHOW_DEBUG_IN_DEV=true
# PLUG_SERVER=bandit
4 changes: 2 additions & 2 deletions mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"bamboo_ses": {:hex, :bamboo_ses, "0.4.2", "e148a0ae17f8223b830029c2e81b2ba18220aa7378531ef1f50c4212fbd9ddb1", [:mix], [{:bamboo, "~> 2.0", [hex: :bamboo, repo: "hexpm", optional: false]}, {:ex_aws, "~> 2.4.1", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:gen_smtp, "~> 1.2.0", [hex: :gen_smtp, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "feb609b57316d335b217937f66cfc7c1ebe37ec481bebe97fcd5da5f31171808"},
"bamboo_smtp": {:hex, :bamboo_smtp, "4.2.2", "e9f57a2300df9cb496c48751bd7668a86a2b89aa2e79ccaa34e0c46a5f64c3ae", [:mix], [{:bamboo, "~> 2.2.0", [hex: :bamboo, repo: "hexpm", optional: false]}, {:gen_smtp, "~> 1.2.0", [hex: :gen_smtp, repo: "hexpm", optional: false]}], "hexpm", "28cac2ec8adaae02aed663bf68163992891a3b44cfd7ada0bebe3e09bed7207f"},
"bamboo_sparkpost": {:hex, :bamboo_sparkpost, "2.0.0", "8617642e438340186da422b7f1ec25663d1c8fa869ecaf3e5ba2524131a1b5f0", [:mix], [{:bamboo, "~> 2.0", [hex: :bamboo, repo: "hexpm", optional: false]}], "hexpm", "a89a1c29e122270e50c53c77e091d885c40bebb689f8904572c38b299649bebf"},
"bandit": {:hex, :bandit, "0.7.7", "48456d09022607a312cf723a91992236aeaffe4af50615e6e2d2e383fb6bef10", [:mix], [{:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 0.6.7", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "772f0a32632c2ce41026d85e24b13a469151bb8cea1891e597fb38fde103640a"},
"bandit": {:hex, :bandit, "1.0.0", "2bd87bbf713d0eed0090f2fa162cd1676198122e6c2b68a201c706e354a6d5e5", [:mix], [{:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.0", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "32acf6ac030fee1f99fd9c3fcf81671911ae8637e0a61c98111861b466efafdb"},
"beam_file": {:hex, :beam_file, "0.5.3", "8ef6b6ab3b2981e5d67c20e635fdddab4b82d96d25fe50c26a259bafed996ead", [:mix], [], "hexpm", "f4722cc3b811b94c4941fa981e25319f7b2ae24495196fcf075208cffb9228e4"},
"benchee": {:hex, :benchee, "1.1.0", "f3a43817209a92a1fade36ef36b86e1052627fd8934a8b937ac9ab3a76c43062", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}], "hexpm", "7da57d545003165a012b587077f6ba90b89210fd88074ce3c60ce239eb5e6d93"},
"benchee_html": {:hex, :benchee_html, "1.0.0", "5b4d24effebd060f466fb460ec06576e7b34a00fc26b234fe4f12c4f05c95947", [:mix], [{:benchee, ">= 0.99.0 and < 2.0.0", [hex: :benchee, repo: "hexpm", optional: false]}, {:benchee_json, "~> 1.0", [hex: :benchee_json, repo: "hexpm", optional: false]}], "hexpm", "5280af9aac432ff5ca4216d03e8a93f32209510e925b60e7f27c33796f69e699"},
Expand Down Expand Up @@ -257,7 +257,7 @@
"tesla": {:hex, :tesla, "1.7.0", "a62dda2f80d4f8a925eb7b8c5b78c461e0eb996672719fe1a63b26321a5f8b4e", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.13", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:msgpax, "~> 2.3", [hex: :msgpax, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "2e64f01ebfdb026209b47bc651a0e65203fcff4ae79c11efb73c4852b00dc313"},
"text": {:hex, :text, "0.2.0", "5a1d84eec574533d500439feacafe3681e2326f883800976df9f9dffd4cf9afd", [:mix], [{:flow, "~> 0.14", [hex: :flow, repo: "hexpm", optional: false]}], "hexpm", "5ca265ba24bd2f00ab647dd524305e24cc17224b4f0052f169ff488013888bc3"},
"text_corpus_udhr": {:hex, :text_corpus_udhr, "0.1.0", "d29b37bdeedc922138e144a7161cae4ece3d7809d37a52398cb9d43d923cc141", [:mix], [{:text, "~> 0.2", [hex: :text, repo: "hexpm", optional: false]}], "hexpm", "056a0b6a804ef03070f89b9b2e09d3271539654f4e2c30bb7d229730262f3fb8"},
"thousand_island": {:hex, :thousand_island, "0.6.7", "3a91a7e362ca407036c6691e8a4f6e01ac8e901db3598875863a149279ac8571", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "541a5cb26b88adf8d8180b6b96a90f09566b4aad7a6b3608dcac969648cf6765"},
"thousand_island": {:hex, :thousand_island, "1.0.0", "63fc8807d8607c9d74fa670996897c8c8a1f2022c8c68d024182e45249acd756", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "996320c72ba8f34d7be9b02900622e44341649f24359e0f67643e4dda8f23995"},
"timex": {:hex, :timex, "3.7.11", "bb95cb4eb1d06e27346325de506bcc6c30f9c6dea40d1ebe390b262fad1862d1", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.20", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "8b9024f7efbabaf9bd7aa04f65cf8dcd7c9818ca5737677c7b76acbc6a94d1aa"},
"tls_certificate_check": {:hex, :tls_certificate_check, "1.20.0", "1ac0c53f95e201feb8d398ef9d764ae74175231289d89f166ba88a7f50cd8e73", [:rebar3], [{:ssl_verify_fun, "~> 1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "ab57b74b1a63dc5775650699a3ec032ec0065005eff1f020818742b7312a8426"},
"twinkle_star": {:git, "https://github.com/bonfire-networks/twinkle_star", "627a29bc426313c4d680803792b77eb8921c4e9d", []},
Expand Down

0 comments on commit e4a4500

Please sign in to comment.