This blog is powered by enaml-web and Jupyterlab as an admin backend. Jupyterlab happens to be great for doing everything, including writing and previewing markdown as well as testing any code you have.
So how does it work? Simple, jupyterlab's backend is tornado, a simple
pip install jupyterlab get's jupyterlab and it's dependencies installed. But by default Jupyterlab launches to Jupyterlab itself, so to customize it we'll have to use the jupyterlab_server to add hooks in to have it display our pages.
As the docs explain, just subclass the
LabServerApp then we can hook in with our own request handlers. For example:
import tornado.web from jupyter_server.app import LabServerApp class HomeHandler(tornado.web.RequestHandler): def get(self): # Whatever you want the home page to be self.write("Hello, world") class CustomApp(LabServerApp): def start(self): self.init_site() super(CustomApp, self).start() def init_site(self): # Add tornado handlers here custom_handlers = [ (r"/", HomeHandler), # And others etc.. ] self.web_app.add_handlers('.*$', custom_handlers)
Just doing this however, Jupyterlab will still redirect to the lab application, but we can change that too. The easiest method I've found is just to pass the configuration directly to the
launch_instance call like this:
import os from app import CustomApp def main(): CustomApp.launch_instance( # Whatever your server port needs to be port=8888, # Listen on all ports ip='*', # Where you want jupyterlab to be base_url='/jupyterlab/', notebook_dir='data/', debug=False, open_browser=False, # Set the hashed password password=os.environ.get('HASHED_PWD') ) if __name__ == '__main__': main()
You'll want to create the
HASHED_PWD by using
from notebook.auth import passwd passwd()
Then just run that file using however you like to deply stuff
Note: I highly recommend running in a container like docker
At some point, I'll cover how the enaml-web stuff works, for now, enjoy go give Jupyterlab a try!
What other blog admins have tabs, split panes, and full IPython access? None that I know of, it's great!
Updated to correct hashed passwd usage