Skip to content
Open
Changes from 1 commit
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
b02d79c
Ajout de ma feature en draft
Feb 2, 2026
253cb5f
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 9, 2026
9a59a0a
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 9, 2026
be5d2af
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 9, 2026
151cfa0
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 9, 2026
360e674
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 9, 2026
e8cb9dd
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 9, 2026
26524e7
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 9, 2026
5c6b636
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 9, 2026
6ae04ff
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 9, 2026
46ea783
docs(jupyter): move persistence into note
Feb 10, 2026
e6cca38
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 16, 2026
10343b2
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 16, 2026
145c730
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 16, 2026
5f2a9fc
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 16, 2026
180870b
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 16, 2026
8b8a0fc
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 16, 2026
37b1e84
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 16, 2026
395b0c7
Update src/_posts/platform/getting-started/2000-01-01-getting-started…
Amyti Feb 16, 2026
df76791
add terraform section
Feb 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
---
title: Getting Started with Jupyter Notebook on Scalingo
modified_at: 2025-11-25 12:00:00
tags: tutorial jupyter notebook
index: 14
---


Jupyter Notebook is an open-source web application that allows you to create
and share documents containing live code, equations, visualizations, and
narrative text.



## Planning your Deployment


By default, Jupyter Notebook stores notebooks on the local filesystem. Since
Scalingo's filesystem is ephemeral, you'll have to provision a
[Scalingo for PostgreSQL®][db-postgresql] addon to persist your notebooks. We
usually advise to start with a Scalingo for PostgreSQL® Starter 512 addon, and
upgrade to a more powerful plan later if need be.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest to add the information you initially put at the end of the page here, like so:

Suggested change
By default, Jupyter Notebook stores notebooks on the local filesystem. Since
Scalingo's filesystem is ephemeral, you'll have to provision a
[Scalingo for PostgreSQL®][db-postgresql] addon to persist your notebooks. We
usually advise to start with a Scalingo for PostgreSQL® Starter 512 addon, and
upgrade to a more powerful plan later if need be.
- By default, Jupyter Notebook stores notebooks on the local filesystem. Since
Scalingo's [filesystem is ephemeral][fs], we can't rely on it. To circumvent
this, and ensure persistence, we suggest to leverage [`pgcontents`][pgcontents]
backed by a [Scalingo for PostgreSQL®][db-postgresql] addon. We usually advise
to start with a Scalingo for PostgreSQL® Starter 512 addon, and upgrade to a
more powerful plan later if need be. Doing so ensures:
- Notebooks survive application restarts.
- Notebooks benefit from Scalingo's automated database backups.
- No data loss due to Scalingo's ephemeral filesystem.



Depending on several factors such as the size of your datasets, the complexity
of your computations, and the number of notebooks you run at the same time,
Jupyter Notebook can consume a lot of RAM.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Depending on several factors such as the size of your datasets, the complexity
of your computations, and the number of notebooks you run at the same time,
Jupyter Notebook can consume a lot of RAM.
- Depending on several factors such as the size of your datasets, the complexity
of your computations, and the number of notebooks you run at the same time,
Jupyter Notebook can consume a lot of RAM.



## Deploying


### Using the Command Line


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

We maintain a repository called [jupyter-notebook-persistence][jupyter-notebook-persistence]
on GitHub to help you deploy Jupyter Notebook on Scalingo. Here are the few
additional steps you will need to follow:


1. Clone our repository:
```bash
git clone https://github.com/Amyti/jupyter-notebook-persistence
cd jupyter-notebook-persistence
```


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

2. Create the application on Scalingo:
```bash
scalingo create my-jupyter
```

Notice that our Command Line automatically detects the git repository, and
adds a git remote to Scalingo:
```bash
git remote -v

origin https://github.com/Scalingo/jupyter-scalingo (fetch)
origin https://github.com/Scalingo/jupyter-scalingo (push)
scalingo git@ssh.osc-fr1.scalingo.com:my-jupyter.git (fetch)
scalingo git@ssh.osc-fr1.scalingo.com:my-jupyter.git (push)
```


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

3. Provision a Scalingo for PostgreSQL® Starter 512 addon:
```bash
scalingo --app my-jupyter addons-add postgresql postgresql-starter-512
```


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

4. (optional) Instruct the platform to run the `web` process type in a single
L container:
```bash
scalingo --app my-jupyter scale web:1:L
```


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

5. Set a **mandatory** environment variables:

Set the password to access Jupyter Notebook:
Comment on lines +75 to +77
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
5. Set a **mandatory** environment variables:
Set the password to access Jupyter Notebook:
5. Set the password to access Jupyter Notebook:

```bash
scalingo --app my-jupyter env-set JUPYTER_NOTEBOOK_PASSWORD=<YOUR_SECURE_PASSWORD>
```


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

6. Everything's ready, deploy to Scalingo:
```bash
git push scalingo main
```

## Updating


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

Jupyter Notebook is a Python application, distributed via its own package
called `jupyter`. Updating to a newer version mainly consists in updating your
requirements in the `requirements.txt` file of your Jupyter repository.


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

1. In your Jupyter repository, update the `requirements.txt` file with the
desired version:
```
jupyter==<NEW_VERSION>
```


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

2. Commit the update:
```bash
git add requirements.txt
git commit -m "Upgrade to Jupyter <NEW_VERSION>"
```


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

### Using the Command Line


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

- Make sure you've successfully followed the first steps
- Push the changes to Scalingo:
```bash
git push scalingo main
```


## Customizing


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

### Environment


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

Jupyter Notebook supports several environment variables to customize its
behavior.

Moreover, the deployment makes use of the following environment variable(s).
They can be leveraged to customize your deployment:

- **`SCALINGO_UID`**\\
This variable will set your UID for your scalingo postgresql account.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We try to avoid future when not necessary:

Suggested change
This variable will set your UID for your scalingo postgresql account.
Allows to specify the PostgreSQL account UID.


- **`JUPYTER_NOTEBOOK_PASSWORD`** \\
Sets the password to access the Jupyter Notebook interface.
Jupyter Notebook will start if this variable is not set, you just have to enter your token.

- **`JUPYTER_TOKEN`**(mandatory)\\
Sets the token to access the Jupyter Notebook interface.\\
Jupyter Notebook will not start if this variable is not set.

- **`DATABASE_URL`** (automatically set)\\
This variable is automatically set when you provision a Scalingo for
PostgreSQL® addon. It is used to store notebooks persistently in the
database.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We really don't want user to mess with this one ^^

Suggested change
- **`DATABASE_URL`** (automatically set)\\
This variable is automatically set when you provision a Scalingo for
PostgreSQL® addon. It is used to store notebooks persistently in the
database.



Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

### Installing Additional Python Packages


Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

To install additional Python packages, add them to the `requirements.txt` file
at the root of your repository:

```
jupyter
numpy
pandas
matplotlib
scikit-learn
```

Then, commit and push your changes to trigger a new deployment.



### Object Storage (Outscale) – Optional

If you want to store large files or share notebooks across multiple projects, it is **possible** to use an external S3-compatible object storage, such as Outscale Object Storage.

> ⚠️ Note: By default, JupyterLab uses **pgcontents** with PostgreSQL to persist notebooks. Using S3 storage is **entirely optional**. PostgreSQL is sufficient for most use cases on Scalingo.

For reference and further details about using S3 storage with JupyterLab, you can check out the [S3ContentsManager documentation](https://github.com/cloudbutton/s3contents).

No implementation is required to use PostgreSQL — this section is informational only.



## Persistent Storage


By default, notebooks are stored in a PostgreSQL database to ensure persistence
across container restarts and redeployments. This is achieved using
[pgcontents][pgcontents], a Postgres-backed storage system for Jupyter.

This means:

- Notebooks survive application restarts
- Notebooks benefit from Scalingo's automated database backups
- No data loss due to Scalingo's ephemeral filesystem



Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd suggest to remove this in favor of further explanations at the beginning of the page.

Suggested change
## Persistent Storage
By default, notebooks are stored in a PostgreSQL database to ensure persistence
across container restarts and redeployments. This is achieved using
[pgcontents][pgcontents], a Postgres-backed storage system for Jupyter.
This means:
- Notebooks survive application restarts
- Notebooks benefit from Scalingo's automated database backups
- No data loss due to Scalingo's ephemeral filesystem

[jupyter-notebook-persistence]: https://github.com/Amyti/jupyter-notebook-persistence
[pgcontents]: https://github.com/quantopian/pgcontents
[db-postgresql]: https://doc.scalingo.com/databases/postgresql/getting-started/provisioning
[dashboard]: https://dashboard.scalingo.com/apps/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[jupyter-notebook-persistence]: https://github.com/Amyti/jupyter-notebook-persistence
[pgcontents]: https://github.com/quantopian/pgcontents
[db-postgresql]: https://doc.scalingo.com/databases/postgresql/getting-started/provisioning
[dashboard]: https://dashboard.scalingo.com/apps/
[jupyter-notebook-persistence]: https://github.com/Amyti/jupyter-notebook-persistence
[jupyter-s3]: https://github.com/cloudbutton/s3contents
[pgcontents]: https://github.com/quantopian/pgcontents
[dashboard]: https://dashboard.scalingo.com/apps/
[db-postgresql]: {% post_url databases/postgresql/about/2000-01-01-overview %}
[fs]: {% post_url platform/app/2000-01-01-filesystem %}