Вот пример как запускать cowboy одним файлом под супервизором приложения. Пример взят из документации по N2O —
Setup Web Server, это стандартный шаблон application и supervisor в одном флаконе. Здесь использованы два статических эндпойнта, один вебсокет эндпойнт и один HTTP/1 эндпойнт.
-module(sample).
-behaviour(supervisor).
-behaviour(application).
-export([init/1, start/2, stop/1, main/1]).
start(_,_) -> supervisor:start_link({local,review},review,[]).
stop(_) -> ok.
init([]) -> case cowboy:start_http(http,3,port(),env()) of
{ok, _} -> ok;
{error,_} -> halt(abort,[]) end, sup().
sup() -> { ok, { { one_for_one, 5, 100 }, [] } }.
port() -> [ { port, application:get_env(n2o,port,8000) } ].
env() -> [ { env, [ { dispatch, points() } ] } ].
static() -> { dir, "apps/sample/priv/static", mime() }.
n2o() -> { dir, "deps/n2o/priv", mime() }.
mime() -> [ { mimetypes, cow_mimetypes, all } ].
points() -> cowboy_router:compile([{'_', [
{ "/static/[...]", n2o_static, static()},
{ "/n2o/[...]", n2o_static, n2o()},
{ "/ws/[...]", n2o_stream, []},
{ '_', n2o_cowboy, []} ]}]).