Launch a server on the command line#
Once the app is ready for deployment it can be served using the Bokeh server. For a detailed breakdown of the design and functionality of Bokeh server, see the Bokeh documentation. The most important thing to know is that Panel (and Bokeh) provide a CLI command to serve a Python script, app directory, or Jupyter notebook containing a Bokeh or Panel app. To launch a server using the CLI, simply run:
panel serve app.ipynb
Alternatively you can also list multiple apps:
panel serve app1.py app2.ipynb
or even serve a number of apps at once:
panel serve apps/*.py
For development it can be particularly helpful to use the --dev option to panel serve as that will automatically reload the page whenever the application code or any of its imports change.
Note
We recommend installing watchfiles, which will provide a significantly better user experience when using --dev.
The panel serve command has the following options:
positional arguments:
DIRECTORY-OR-SCRIPT The app directories or scripts to serve (serve empty document if not specified)
options:
-h, --help show this help message and exit
--port PORT Port to listen on
--address ADDRESS Address to listen on
--unix-socket UNIX-SOCKET
Unix socket to bind. Network options such as port, address, ssl options are incompatible with unix socket
--log-level LOG-LEVEL
One of: trace, debug, info, warning, error or critical
--log-format LOG-FORMAT
A standard Python logging format string (default: '%(asctime)s %(message)s')
--log-file LOG-FILE A filename to write logs to, or None to write to the standard stream (default: None)
--use-config CONFIG Use a YAML config file for settings
--args ... Command line arguments remaining to passed on to the application handler. NOTE: if this argument precedes DIRECTORY-OR-SCRIPT then some other argument, e.g. --show, must be placed before the directory or script.
--dev [FILES-TO-WATCH ...]
Enable live reloading during app development. By default it watches all *.py *.html *.css *.yaml files in the app directory tree. Additional files can be passed as arguments. NOTE: if this argument precedes DIRECTORY-OR-SCRIPT then some other argument, e.g
--show, must be placed before the directory or script. NOTE: This setting only works with a single app. It also restricts the number of processes to 1. NOTE FOR WINDOWS USERS : this option must be invoked using 'python -m bokeh'. If not Tornado will fail to
restart the server
--show Open server app(s) in a browser
--allow-websocket-origin HOST[:PORT]
Public hostnames which may connect to the Bokeh websocket With unix socket, the websocket origin restrictions should be enforced by the proxy.
--prefix PREFIX URL prefix for Bokeh server URLs
--ico-path ICO_PATH Path to a .ico file to use as the favicon.ico, or 'none' to disable favicon.ico support. If unset, a default Bokeh .ico file will be used
--keep-alive MILLISECONDS
How often to send a keep-alive ping to clients, 0 to disable.
--check-unused-sessions MILLISECONDS
How often to check for unused sessions
--unused-session-lifetime MILLISECONDS
How long unused sessions last
--stats-log-frequency MILLISECONDS
How often to log stats
--mem-log-frequency MILLISECONDS
How often to log memory usage information
--use-xheaders Prefer X-headers for IP/protocol information
--ssl-certfile CERTFILE
Absolute path to a certificate file for SSL termination
--ssl-keyfile KEYFILE
Absolute path to a private key file for SSL termination
--session-ids MODE One of: unsigned, signed or external-signed
--auth-module AUTH_MODULE
Absolute path to a Python module that implements auth hooks
--enable-xsrf-cookies
Whether to enable Tornado support for XSRF cookies. All PUT, POST, or DELETE handlers must be properly instrumented when this setting is enabled.
--exclude-headers EXCLUDE_HEADERS [EXCLUDE_HEADERS ...]
A list of request headers to exclude from the session context (by default all headers are included).
--exclude-cookies EXCLUDE_COOKIES [EXCLUDE_COOKIES ...]
A list of request cookies to exclude from the session context (by default all cookies are included).
--include-headers INCLUDE_HEADERS [INCLUDE_HEADERS ...]
A list of request headers to make available in the session context (by default all headers are included).
--include-cookies INCLUDE_COOKIES [INCLUDE_COOKIES ...]
A list of request cookies to make available in the session context (by default all cookies are included).
--cookie-path COOKIE_PATH
Configure to control which sub path of the domain the cookie applies to.
--cookie-secret COOKIE_SECRET
Configure to enable getting/setting secure cookies
--index INDEX Path to a template to use for the site index
--disable-index Do not use the default index on the root path
--disable-index-redirect
Do not redirect to running app from root path
--num-procs N Number of worker processes for an app. Using 0 will autodetect number of cores (defaults to 1)
--session-token-expiration N
Duration in seconds that a new session token is valid for session creation. After the expiry time has elapsed, the token will not be able create a new session (defaults to seconds).
--websocket-max-message-size BYTES
Set the Tornado websocket_max_message_size value (default: 20MB)
--websocket-compression-level LEVEL
Set the Tornado WebSocket compression_level
--websocket-compression-mem-level LEVEL
Set the Tornado WebSocket compression mem_level
--glob Process all filename arguments as globs
--static-dirs KEY=VALUE [KEY=VALUE ...]
Static directories to serve specified as key=value pairs mapping from URL route to static file directory.
--basic-auth BASIC_AUTH
Password or filepath to use with Basic Authentication.
--oauth-provider OAUTH_PROVIDER
The OAuth2 provider to use.
--oauth-key OAUTH_KEY
The OAuth2 key to use
--oauth-secret OAUTH_SECRET
The OAuth2 secret to use
--oauth-redirect-uri OAUTH_REDIRECT_URI
The OAuth2 redirect URI
--oauth-extra-params OAUTH_EXTRA_PARAMS
Additional parameters to use.
--oauth-jwt-user OAUTH_JWT_USER
The key in the ID JWT token to consider the user.
--oauth-encryption-key OAUTH_ENCRYPTION_KEY
A random string used to encode the user information.
--oauth-error-template OAUTH_ERROR_TEMPLATE
A random string used to encode the user information.
--oauth-expiry-days OAUTH_EXPIRY_DAYS
Expiry off the OAuth cookie in number of days.
--oauth-refresh-tokens OAUTH_REFRESH_TOKENS
Whether to automatically refresh OAuth access tokens when they expire.
--auth-template AUTH_TEMPLATE
Template to serve when user is unauthenticated.
--basic-login-template BASIC_LOGIN_TEMPLATE
Template to serve for Basic Authentication login page.
--rest-provider REST_PROVIDER
The interface to use to serve REST API
--rest-endpoint REST_ENDPOINT
Endpoint to store REST API on.
--rest-session-info Whether to serve session info on the REST API
--session-history SESSION_HISTORY
The length of the session history to record.
--warm Whether to execute scripts on startup to warm up the server.
--admin Whether to add an admin panel.
--admin-log-level {debug,info,warning,error,critical}
One of: debug (default), info, warning, error or critical
--profiler PROFILER The profiler to use by default, e.g. pyinstrument, snakeviz or memray.
--autoreload Whether to autoreload source when script changes.
--num-threads NUM_THREADS
Whether to start a thread pool which events are dispatched to.
--setup SETUP Path to a setup script to run before server starts.
--liveness Whether to add a liveness endpoint.
--liveness-endpoint LIVENESS_ENDPOINT
The endpoint for the liveness API.
--reuse-sessions Whether to reuse sessions when serving the initial request.
--global-loading-spinner
Whether to add a global loading spinner to the application(s).
To turn a notebook into a deployable app simply append .servable() to one or more Panel objects, which will add the app to Bokeh’s curdoc, ensuring it can be discovered by Bokeh server on deployment. In this way it is trivial to build dashboards that can be used interactively in a notebook and then seamlessly deployed on Bokeh server.
When called on a notebook, panel serve first converts it to a python script using nbconvert.PythonExporter(), albeit with IPython magics stripped out. This means that non-code cells, such as raw cells, are entirely handled by nbconvert and may modify the served app.