Jupyter notebook as a service on Ubuntu 18.04 with Python 3

How amazing would it be to start your computer, visit localhost:8888, and  know that your Jupyter Notebook is waiting for you, up and running ? Well here is how to make this dream a reality on Ubuntu 18.04 with Python 3.

 

Step 1: Install Jupyter Notebook

 

Install pip3 and the python header files

sudo apt update 
sudo apt install python3-pip python3-dev

I also want the packages I install in my notebook not to be in conflict with the other python packages installed on the system, so I’m creating a virtual environment for Jupyter only. If the 2 lines of code below don’t work for you, check out this post for the full instructions.

virtualenv -p python3 notebook-env
. notebook-env/bin/activate

Your command line prompt should now be preceded by (notebook-env) to signal that you are working in the virtual environment you just created. As you will see by typing

(notebook-env) naysan@hp:~$ which pip3
/home/naysan/notebook-env/bin/pip3

From now on (until you deactivate the environment), the pip3 executable you will call is the one from your notebook environment. Use this pip3 binary to install jupyter

(notebook-env) naysan@hp:~$ pip3 install jupyter

Launch jupyter 

(notebook-env) naysan@hp:~$ jupyter-notebook

 

This command should open your browser at  localhost:8888. Now I don’t know about you, but since I launched the notebook from my home directory, there are a bunch of directories listed in the notebook interface that have nothing to do with where I’d like to store my python notebooks. Here is a way to dedicate a clean, separate directory for your Jupyter experiments.

Shut down your kernel with Ctrl+C, then

# Back to the HOME directory
(notebook-env) naysan@hp:~$ cd

# Create a clean new directory dedicated to your notebooks
(notebook-env) naysan@hp:~$ mkdir my-notebooks

# Use this directory as your --notebook-dir argment as you re-launch jupyter-notebook
(notebook-env) naysan@hp:~$ jupyter-notebook --notebook-dir=/home/naysan/my-notebooks

Much cleaner, right?

 

Step 2: Setup Jupyter-notebook as a service

 

This step is made easier if we setup a password for the notebook beforehand, otherwise Jupyter will ask you to use a very long token to access it. Shut down your kernel with Ctrl+C, then

(notebook-env) naysan@hp:~$ jupyter notebook password
Enter password: **********
Verify password: **********
[NotebookPasswordApp] Wrote hashed password to /home/naysan/.jupyter/jupyter_notebook_config.json

 

Locate your jupyter-notebook binary

(notebook-env) naysan@hp:~$ which jupyter-notebook 
/home/naysan/notebook-env/bin/jupyter-notebook 

Create a file named jupyter.service that contains the following content. Don’t forget to replace my personal info – like my user name, Naysan – with what works  for you

[Unit]
Description=Jupyter Notebook

[Service]
Type=simple
PIDFile=/run/jupyter.pid
ExecStart=/bin/bash -c ". /home/naysan/notebook-env/bin/activate;jupyter-notebook --notebook-dir=/home/naysan/my-notebooks"
User=naysan
Group=naysan
WorkingDirectory=/home/naysan/my-notebooks
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

 

It is now time to install the service

(notebook-env) naysan@hp:~$ sudo cp jupyter.service /etc/systemd/system/

# Use the enable command to ensure that the service starts whenever the system boots
(notebook-env) naysan@hp:~$ sudo systemctl enable jupyter.service

(notebook-env) naysan@hp:~$ sudo systemctl daemon-reload
(notebook-env) naysan@hp:~$ sudo systemctl start jupyter.service
(notebook-env) naysan@hp:~$ systemctl status jupyter.service 
● jupyter.service - Jupyter Notebook
   Loaded: loaded (/etc/systemd/system/jupyter.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-09-07 12:18:08 EDT; 53min ago
 Main PID: 32316 (bash)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/jupyter.service
           ├─32316 /bin/bash -c . /home/naysan/notebook-env/bin/activate;jupyter-notebook --notebook-dir=/home/naysan/my-notebooks
           └─32319 /home/naysan/notebook-env/bin/python3 /home/naysan/notebook-env/bin/jupyter-notebook --notebook-dir=/home/naysan/my-notebooks

Sep 07 12:18:08 hp bash[32316]: [I 12:18:08.473 NotebookApp] http://localhost:8888/

Step 3: Witness the magic

Visit http://localhost:8888/

Enter your password, and voilà, you are all set !