要从单个Python脚本在Bokeh服务器上运行Bokeh应用程序,请将脚本名称传递给 bokeh serve 在命令行上:
bokeh serve
bokeh serve app_script.py
默认情况下,Bokeh应用程序将由Bokeh服务器在本地主机的默认端口(5006)上提供服务,该端口位于路径下 /app_script ,即
/app_script
http://localhost:5006/app_script
也可以在jupyter笔记本上运行相同的命令:
bokeh serve app_notebook.ipynb
这将生成与python脚本描述的相同的结果,并且应用程序将在本地主机的默认端口(5006)上提供服务,该端口位于路径下 /app_notebook
/app_notebook
也可以从目录创建应用程序。目录应包含 main.py (以及所需的任何其他助手模块)以及任何附加资产(例如,主题文件)。将目录名传递给 bokeh serve 要运行应用程序:
main.py
bokeh serve app_dir
可以同时运行多个应用程序:
bokeh serve app_script.py app_dir
如果要自动打开浏览器以显示HTML页,可以传递 --show 命令行上的选项:
--show
bokeh serve app_script.py app_dir --show
这将打开两页 /app_script 和 /app_dir ,分别。
/app_dir
如果你能把参数传递给boh --args 选项作为命令行上的最后一个选项:
--args
bokeh serve app_script.py myapp.py --args foo bar --baz
所有的事情 --args 将包含在 sys.argv 当应用程序运行时。在这种情况下,什么时候 myapp.py 执行,内容 sys.argv 将 ['myapp.py', 'foo', 'bar', '--baz'] ,与标准Python对 sys.argv .
sys.argv
myapp.py
['myapp.py', 'foo', 'bar', '--baz']
请注意,如果提供了多个脚本或目录,则它们都会收到由 --args .
如果只有一个应用程序,服务器根目录将重定向到它。否则,您可以在服务器根目录下看到所有正在运行的应用程序的索引:
http://localhost:5006/
可以使用 --disable-index 选项,则可以使用 --disable-index-redirect 选择权。
--disable-index
--disable-index-redirect
运行多个应用程序的另一种方法是使用glob表示法来指示与特定模式匹配的所有文件都应该得到服务。
bokeh serve *.py
命令行shell通常会展开 *.py 自动地。但是,如果您是以编程方式启动Bokeh服务器,那么带有globs的文件名参数可能不会被shell展开。在这种情况下 --glob 标志可用于使Bokeh服务器显式执行全局定位:
*.py
--glob
subprocess.call(["bokeh", "serve", "--glob", "*.py"])
Bokeh服务器可以将底层的tornado服务器分成多个进程。这在尝试处理多个连接时非常有用,尤其是在需要高计算负载的应用程序上下文中。默认行为是一个进程。使用0将自动检测内核数并启动相应的进程数
bokeh serve app_script.py --num-procs 2
请注意,由于Tornado固有的限制,Windows不支持 --num-procs 值大于1!在这种情况下,考虑在负载平衡器后面运行多个Bokeh服务器实例。
--num-procs
Bokeh服务器还可以向所有URL路径添加可选前缀。这通常与“反向代理”设置结合使用。
bokeh serve app_script.py --prefix foobar
然后,申请将在以下URL下提供:
http://localhost:5006/foobar/app_script
如果需要,Bokeh服务器可以按固定的间隔发送keep-alive ping。要配置此功能,请设置 --keep-alive 选项:
--keep-alive
bokeh serve app_script.py --keep-alive 10000
该值以毫秒为单位指定。默认的保持活动间隔为37秒。指定值0以禁用保持活动ping。
要控制Bokeh服务器侦听的端口,请使用 --port 论点:
--port
bokeh serve app_script.py --port 8080
要在任意端口上侦听,请通过 0 作为端口号。实际端口号将在启动时记录。
0
类似地,可以使用 --address 争论。例如:
--address
bokeh serve app_script.py --address 0.0.0.0
将让Bokeh服务器监听所有可用的网络地址。
默认情况下,不允许跨站点连接到Bokeh服务器websocket。通过使用指定来自其他主机的websocket连接,可以启用这些连接 BOKEH_ALLOW_WS_ORIGIN 环境变量或 --allow-websocket-origin 选项:
BOKEH_ALLOW_WS_ORIGIN
--allow-websocket-origin
bokeh serve app_script.py --allow-websocket-origin foo.com:8081
可以通过添加 --allow-websocket-origin 选项多次,并提供以逗号分隔的主机列表 BOKEH_ALLOW_WS_ORIGIN
使Bokeh服务器覆盖所有请求的远程IP和URI方案/协议 X-Real-Ip , X-Forwarded-For , X-Scheme , X-Forwarded-Proto 标头(如果提供了),则设置 --use-xheaders 选项:
X-Real-Ip
X-Forwarded-For
X-Scheme
X-Forwarded-Proto
--use-xheaders
bokeh serve app_script.py --use-xheaders
当在SSL终止的反向代理后面运行Bokeh服务器时,通常需要这样做。
警告
不建议在直接面向Internet的Bokeh服务器上设置此选项。
Bokeh服务器还可以通过指定指向PEM格式的单个文件的路径来直接终止SSL连接,该文件包含证书以及建立证书真实性所需的任意数量的CA证书:
bokeh serve --ssl-certfile /path/to/cert.pem
或者,也可以通过设置环境变量来提供路径 BOKEH_SSL_CERTFILE .
BOKEH_SSL_CERTFILE
如果私钥单独存储,则可以通过设置 --ssl-keyfile 命令行参数,或通过设置 BOKEH_SSL_KEYFILE 环境变量。如果私钥需要密码,则应通过设置 BOKEH_SSL_PASSWORD 环境变量。
--ssl-keyfile
BOKEH_SSL_KEYFILE
BOKEH_SSL_PASSWORD
通常,连接到Bokeh服务器的每个浏览器选项卡都有自己的会话ID。当服务器生成一个ID时,它将使其无法使用密码。这使得用户无法访问彼此的会话。
为了控制谁可以使用Bokeh应用程序,服务器可以使用密钥对会话id进行签名,并拒绝“虚构的”会话名称。有三种模式,由 --session-ids 论点:
--session-ids
bokeh serve app_script.py --session-ids signed
有符号或无符号模式:有符号或无符号
在 unsigned 模式下,服务器将接受URL中提供给它的任何会话ID。例如, http://localhost/app_script?bokeh-session-id=foo 将创建会话 foo . 在 unsigned 模式,如果会话ID未提供 ?bokeh-session-id= 在URL中,服务器仍然会生成一个加密的不可使用的ID。但是,服务器允许客户端创建可猜测的或有意共享的会话(如果他们愿意)。
unsigned
http://localhost/app_script?bokeh-session-id=foo
foo
?bokeh-session-id=
unsigned 当服务器在本地运行以进行开发时,模式是最有用的,例如,您可以让多个进程访问一个固定的会话名称,例如 default . unsigned 模式也很方便,因为不需要生成或配置密钥。
default
在 signed 模式下,会话ID必须采用特殊格式并使用密钥签名。尝试使用无效会话ID的应用程序将失败,但如果不是 ?bokeh-session-id= 参数,则服务器将生成一个新的签名会话ID signed 模式是只允许安全会话ID,但任何人都可以连接到服务器。
signed
在 external-signed 模式下,会话ID必须签名,但服务器本身不会生成会话ID ?bokeh-session-id= 参数将是必需的。要使用此模式,外部进程(如另一个web应用程序)将使用该函数 bokeh.util.token.generate_session_id() 创建有效的会话ID。外部进程和Bokeh服务器必须共享同一个进程 BOKEH_SECRET_KEY 环境变量。
external-signed
bokeh.util.token.generate_session_id()
BOKEH_SECRET_KEY
external-signed 如果希望另一个进程验证对Bokeh服务器的访问,则mode非常有用。如果某人被允许使用Bokeh应用程序,您将为他们生成一个会话ID,然后使用该有效会话ID将其重定向到Bokeh服务器。如果您不为某人生成会话ID,则他们无法从Bokeh服务器加载应用程序。
两者兼而有之 signed 和 external-signed 模式下,密钥必须保密;任何拥有密钥的人都可以生成有效的会话ID。
密钥应该设置在 BOKEH_SECRET_KEY 环境变量,并且应该是一个加密随机字符串,至少有256位(32字节)的熵。这个 bokeh secret 命令可以生成新的密钥。
bokeh secret
Bokeh服务器只能配置为仅在有经过适当身份验证的用户时才允许连接。这是通过提供到模块的路径来实现命令行上的必要功能的:
bokeh serve --auth-module=/path/to/auth.py
或者通过设置 BOKEH_AUTH_MODULE 环境变量。
BOKEH_AUTH_MODULE
模块必须包含 one 将返回当前用户(或无)的以下两个函数之一:
def get_user(request_handler): pass async def get_user_async(request_handler): pass
这个功能通过龙卷风传递 RequestHandler 并且可以检查cookie或请求头来确定经过身份验证的用户。如果没有有效的经过身份验证的用户,这些函数应该返回None。
RequestHandler
此外,模块必须指定重定向未经验证的用户的位置。它必须包含:
模块a属性 login_url 和(可选)a LoginHandler 类
login_url
LoginHandler
的函数定义 get_login_url
get_login_url
login_url = "..." class LoginHandler(RequestHandler): pass def get_login_url(request_handler): pass
当一个亲戚 login_url 是一个可选的 LoginHandler 类也可以提供,它将作为路由自动安装在Bokeh服务器上。
这个 get_login_url 函数在登录URL必须根据请求或Cookie等而变化的情况下很有用。不能指定 LoginHandler 什么时候? get_url_function 定义。
get_url_function
与登录选项类似,可选 logout_url 和 LogoutHandler 值可以定义用于注销用户的端点。
logout_url
LogoutHandler
如果没有提供身份验证模块,那么将假定一个默认用户,并且访问Bokeh服务器端点不需要身份验证。
将执行auth模块的内容!
Bokeh还可以使用Tornado的XFRF cookie保护。要启用此功能,请使用 --enable-xsrf-cookies 选项,或设置环境变量 BOKEH_XSRF_COOKIES=yes . 如果启用此设置,则必须正确检测自定义或登录处理程序上的任何PUT、POST或DELETE操作才能正常工作。通常,这意味着添加 xsrf_form_html() 模块到HTML表单提交模板。有关详细信息,请参见:
--enable-xsrf-cookies
BOKEH_XSRF_COOKIES=yes
xsrf_form_html()
https://www.tornarweb.org/en/stable/guide/security.htmlcross-网站请求防伪
配置检查未使用会话的频率。设置 --check-unused-sessions 选项:
--check-unused-sessions
bokeh serve app_script.py --check-unused-sessions 10000
该值以毫秒为单位指定。检查未使用会话的默认间隔为17秒。只接受正整数值。
配置未使用会话持续的频率。设置 --unused-session-lifetime 选项:
--unused-session-lifetime
bokeh serve app_script.py --unused-session-lifetime 60000
该值以毫秒为单位指定。未使用会话的默认生存期间隔为15秒。只接受正整数值。
日志记录级别可以由 --log-level 论点:
--log-level
bokeh serve app_script.py --log-level debug
可用的日志级别有:trace、debug、info、warning、error或critical
日志格式可以由 --log-format 论点:
--log-format
bokeh serve app_script.py --log-format "%(levelname)s: %(message)s"
默认日志格式为 "%(asctime)s %(message)s"
"%(asctime)s %(message)s"
要控制统计日志的写入频率,请设置 --stats-log-frequency 选项:
--stats-log-frequency
bokeh serve app_script.py --stats-log-frequency 30000
该值以毫秒为单位指定。记录统计信息的默认间隔是15秒。只接受正整数值。
Bokeh还可以选择性地记录进程内存使用情况。此功能需要可选 psutil 要安装的程序包。启用内存集 --mem-log-frequency 选项:
psutil
--mem-log-frequency
. 代码块::sh
bokeh服务应用程序_脚本.py--记录频率30000
该值以毫秒为单位指定。记录统计信息的默认间隔为0(禁用)。只接受正整数值。
Serve
子命令来启动Bokeh服务器。
customize_kwargs
允许子类自定义 server_kwargs .
server_kwargs
应该修改并返回 server_kwargs 字典。
invoke
name
此子命令的名称