Guides
Use Jupyter notebooks anywhere
We're living in the mobile age when productivity is not limited to desks. Setting-up Jupyter notebooks in the cloud can enable you to use it anywhere, including your mobile phone!
In this guide, we will be using Linode, its a great starting point for cloud beginners as it offers good value for money. Naturally, for more advanced workflows we'll be using AWS, but if you're just starting out and only plan on doing basic data visualization and analysis this won't be necessary.
Step 1: Create your account & setup Linode
1.1: Select a plan
Select either the Nanode 1GB plan or the Linode 2GB plan
Go to this link to start settingup your Linode.
As a beginner you should go for the $5 Nanode plan as you will not be needing a powerful server for doing basic tasks with Jupyter notebooks.
1.2: Selecting a Linux Distribution
Selecting linux distro
We'll be going with whatever the latest distribution of Ubuntu is, at the time of writing this is 19.04, for you the number might be higher. (.04 releases are long-term supported by Ubuntu which means you'll continue to receive updates for at least 2 years)
1.3: Add a label and create a password
Selecting Location, Plan and Label
Select the region that is the closest to you geographically, this will make a big difference on slower internet connections, as its faster to connect to a local server. For me this is London.
Add a label to help you remember the contents of your Linode (good if you're planning on using multiple Linodes for different tasks).
Next, create a password. The default username will be root, the password you set-up here is what we'll use to access the server for the first time.
Fill in all the information on this page and hit create in the top right-hand corner.
1.4: Copy the IP address
Setup screen
Next, you will see a progress bar with the screen above. The second widget on the right-hand side contains the IP address (blacked out here for security) note this down as we will use it to connect to the server.
Step 2: Connecting to the server
2.1: Install Termius
Download an SSH client. For iOS and Android termius is one of the best.
Next you'll need an SSH client. This is what will allow us to connect to a remote server, macOS has terminal built-in, but on Android and iOS Termius is the best ssh client. Get Termius here.
2.2: Creating a host
Create a new host in termius
Once installed open termius and select "Start without registering" next go into "Hosts" and create a new Host. Fill in the details as follows:
Alias: Jupyter_notebook
Hostname: (Enter you linode's IP address her)
Use SSH: (Toggle this option on)
Username: Root
Password: (Enter the password we created in the previous stage)
2.3: Connect to the server
Once you've entered the above details hit save and tap on the Jupyter_notebook host to connect.
Well done! We're now connected to the server.
2.4: Install updates
One of the first things we need to do is to update the server to make sure we have the latest security patches. Enter the following commands one-by-one:
apt-get update
apt-get upgrade
Typical SSH update screen
Once you enter apt-get upgrade
you will be prompted with a confirmation dialog just type Y
and continue.
just hit enter on your keybaord to continue
You might also be prompted by a language selection screen for one of the updates as I was above.
Step 3: Install Python and Jupyter Notebooks
Now that the system has been updated it's finally time to install python and Jupyter notebooks.
3.1: Install Python & Python-dev
First we should install python and python-dev as these are pre-requisites for everything we will be installing later, so type:
sudo apt install python3-pip python3-dev
3.2: Update PIP
Next lets update pip since we will be using it to update some packages
pip3 install --upgrade pip
3.3: Install useful packages
I usually always begin by installing pandas, numpy, matplotlib and scrapy. But feel free to pick and choose the packages you'll find most useful
pip3 install pandas
pip3 install numpy
pip3 install matplotlib
pip3 install scrapy
3.4: Install Jupyter Notebooks
And finally lets install Jupyter notebooks
pip3 install jupyter
The terminal screen after install Python and other packages
Step 4: Configuring jupyter notebooks
Now that jupyter notebooks has been installed we need to configure it such that we are able to access it remotely.
4.1: Create a Jupyter Notebooks config file and edit
Lets begin by generating a jupyter notebooks config file:
jupyter notebook --generate-config
This will create an editable configuration file. Lets use nano to edit this file:
sudo nano /root/.jupyter/jupyter_notebook_config.py
This will take you to the edit screen. Here you'll see that most lines are commented out, this means that these feautres are disabled in the default configuration.
Use ctrl+w
and search for c.NotebookApp.ip
once you have lcoated this line write the following under it:
c.NotebookApp.ip = '0.0.0.0'
Then type ctrl+x
followed by Y
to confirm the edit and exit
4.2: Install and configure a firewall
Next, we need to install a firewall so that we can allow external connections.
sudo apt-get install ufw
To allow connections to the Jupyter notebooks port enter:
sudo ufw allow 8888/tcp
Next, lets enable ssh, so that we can keep connecting via ssh
sudo ufw allow 22
Finally lets restart ssh to apply the changes
sudo ufw reload
4.3: Set a Jupyter notebooks password
Now that we have enabled remote connections we should setup a Jupyter notebooks password, so that we don't have to use token authentication which can be quite complex. To begin password setup type:
jupyter notebook password
You will be prompted to enter a password (note that there will be no visual feedback as you type, so just type in your password and enter).
4.4: Run Jupyter notebooks in the background
Now to keep Jupyter notebooks running in the background even if our terminal session is halted we need to use tmux
this will open a virtual terminal session so just type
tmux
If we want to return to this session after exiting the terminal we just need to type
tmux attach
4.5: Launch Jupyter notebooks
Finally, we can launch jupyter notebooks using:
jupyter notebook --allow-root --no-browser
Note: We're have been running everything as root since setting up the server which is not recomended which is why we need to use the --allow-root
flag. Likewise since jupyter notebooks is typically run locally we need to use the --no-browser
flag,
Finally, just navigate to http://your.ip.address.here:8888
to log into your new server.
Conclusion
Finally, we're done! At the end of this tutorial, you should have a live Jupyter notebooks server that is accessible from anywhere with an internet connection. Remember to save your ssh login details and log in regularly to update packages and Linux itself.
Keep in mind that while the above setup is quick, it is not ideal. Since we are running everything as root there is a risk some packages might become corrupted, so you might want to consider setting up a virtual environment. You might also want to add an SSL certificate to encrypt your connections. But since this tutorial is targetted at beginners I felt it was necessary to keep it as simple as possible. We will be adding more advanced tutorials in the near future.
Continue Reading
Apps
Timestripe - my new favourite productivity app
March 5, 2023
Guides
How to scrape tables from websites using Pandas read_html() function
February 2, 2023
Guides
Drop all duplicate rows across multiple columns in Python Pandas
January 28, 2023
Guides
How to create effective prompts for AI image generation
August 15, 2022
Guides
Generate Huge Datasets With Fake Data Easily and Quickly using Python and Faker
April 16, 2022
Guides
How to change or update a specific cell in Python Pandas Dataframe
March 25, 2021
Guides
How to add a row at the top in Pandas dataframe
March 22, 2021
Guides
Creating WordClouds in Python from a single-column in Pandas dataframe
November 15, 2020
Guides
Python Regex examples - How to use Regex with Pandas
September 9, 2020
Guides
Python regular expressions (RegEx) simple yet complete guide for beginners
September 15, 2020
Guides
8 Python Pandas Value_counts() tricks that make your work more efficient
May 31, 2020
Guides
Exploring Correlation in Python: Pandas, SciPy
May 5, 2020
Guides
How to add new columns to Pandas dataframe?
March 22, 2020
Guides
Delete column/row from a Pandas dataframe using .drop() method
February 2, 2020
Guides
How to visualize data with Matplotlib from a Pandas Dataframe
November 15, 2019
Guides
The ultimate beginners guide to Group by in Python Pandas
August 8, 2019
Guides
Guide to renaming columns with Python Pandas
July 2, 2019
Guides
How to suppress scientific notation in Pandas
July 12, 2019
Guides
The complete beginners guide to Pandas
June 29, 2019
Guides
Data project #1: Stockmarket analysis
June 29, 2019