mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-10-25 12:56:13 +08:00
Allow LIVEBOOK_PORT to be set to 0 for a random port (#906)
This commit is contained in:
parent
526499dfa5
commit
bd3363acde
5 changed files with 39 additions and 12 deletions
|
|
@ -169,7 +169,8 @@ The following environment variables configure Livebook:
|
||||||
|
|
||||||
* LIVEBOOK_PORT - sets the port Livebook runs on. If you want to run multiple
|
* LIVEBOOK_PORT - sets the port Livebook runs on. If you want to run multiple
|
||||||
instances on the same domain with the same credentials but on different ports,
|
instances on the same domain with the same credentials but on different ports,
|
||||||
you also need to set LIVEBOOK_SECRET_KEY_BASE. Defaults to 8080.
|
you also need to set LIVEBOOK_SECRET_KEY_BASE. Defaults to 8080. If set to 0,
|
||||||
|
a random port will be picked.
|
||||||
|
|
||||||
* LIVEBOOK_ROOT_PATH - sets the root path to use for file selection. This does
|
* LIVEBOOK_ROOT_PATH - sets the root path to use for file selection. This does
|
||||||
not restrict access to upper directories unless the operating system user is
|
not restrict access to upper directories unless the operating system user is
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@ config :livebook, LivebookWeb.Endpoint,
|
||||||
http: [ip: {127, 0, 0, 1}, port: 8080],
|
http: [ip: {127, 0, 0, 1}, port: 8080],
|
||||||
server: true
|
server: true
|
||||||
|
|
||||||
# Start log-level in notice by default to reduce output
|
# Set log level to warning by default to reduce output
|
||||||
config :logger, level: :notice
|
config :logger, level: :warning
|
||||||
|
|
||||||
# ## SSL Support
|
# ## SSL Support
|
||||||
#
|
#
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,8 @@ defmodule Livebook.Application do
|
||||||
# Start the unique task dependencies
|
# Start the unique task dependencies
|
||||||
Livebook.UniqueTask,
|
Livebook.UniqueTask,
|
||||||
# Start the Endpoint (http/https)
|
# Start the Endpoint (http/https)
|
||||||
LivebookWeb.Endpoint
|
# We skip the access url as we do our own logging below
|
||||||
|
{LivebookWeb.Endpoint, log_access_url: false}
|
||||||
] ++ app_specs()
|
] ++ app_specs()
|
||||||
|
|
||||||
opts = [strategy: :one_for_one, name: Livebook.Supervisor]
|
opts = [strategy: :one_for_one, name: Livebook.Supervisor]
|
||||||
|
|
|
||||||
|
|
@ -78,10 +78,8 @@ if Mix.target() == :app do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp import_livebook(url) do
|
defp import_livebook(url) do
|
||||||
%{
|
LivebookWeb.Endpoint.access_struct_url()
|
||||||
URI.parse(LivebookWeb.Endpoint.access_url())
|
|> Map.replace!(:path, "/import")
|
||||||
| path: "/import"
|
|
||||||
}
|
|
||||||
|> append_query("url=#{URI.encode_www_form(url)}")
|
|> append_query("url=#{URI.encode_www_form(url)}")
|
||||||
|> URI.to_string()
|
|> URI.to_string()
|
||||||
|> Livebook.Utils.browser_open()
|
|> Livebook.Utils.browser_open()
|
||||||
|
|
|
||||||
|
|
@ -78,14 +78,41 @@ defmodule LivebookWeb.Endpoint do
|
||||||
|
|
||||||
plug LivebookWeb.Router
|
plug LivebookWeb.Router
|
||||||
|
|
||||||
def access_url() do
|
def access_struct_url() do
|
||||||
root_url = url()
|
base =
|
||||||
|
case struct_url() do
|
||||||
|
%URI{scheme: "https", port: 0} = uri ->
|
||||||
|
%{uri | port: get_port(__MODULE__.HTTPS, 433)}
|
||||||
|
|
||||||
|
%URI{scheme: "http", port: 0} = uri ->
|
||||||
|
%{uri | port: get_port(__MODULE__.HTTP, 80)}
|
||||||
|
|
||||||
|
%URI{} = uri ->
|
||||||
|
uri
|
||||||
|
end
|
||||||
|
|
||||||
|
base = update_in(base.path, &(&1 || "/"))
|
||||||
|
|
||||||
if Livebook.Config.auth_mode() == :token do
|
if Livebook.Config.auth_mode() == :token do
|
||||||
token = Application.fetch_env!(:livebook, :token)
|
token = Application.fetch_env!(:livebook, :token)
|
||||||
root_url <> "/?token=" <> token
|
%{base | query: "token=" <> token}
|
||||||
else
|
else
|
||||||
root_url
|
base
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def access_url do
|
||||||
|
URI.to_string(access_struct_url())
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_port(ref, default) do
|
||||||
|
try do
|
||||||
|
:ranch.get_addr(ref)
|
||||||
|
rescue
|
||||||
|
_ -> default
|
||||||
|
else
|
||||||
|
{_, port} when is_integer(port) -> port
|
||||||
|
_ -> default
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue