mirror of
https://github.com/jupyterhub/the-littlest-jupyterhub.git
synced 2025-12-18 21:54:05 +08:00
Compare commits
37 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc8e19b1b5 | ||
|
|
1f21e3cb26 | ||
|
|
b13f09564d | ||
|
|
c40d95c02a | ||
|
|
c35a4cbe65 | ||
|
|
fb78464dec | ||
|
|
9efe59f4f7 | ||
|
|
e14b8d8b77 | ||
|
|
cc00bf3a1a | ||
|
|
c6d86d059f | ||
|
|
4cd5da40c3 | ||
|
|
55db9c5d0b | ||
|
|
e893959ce5 | ||
|
|
5fdc31f9a9 | ||
|
|
a8c6c40b2b | ||
|
|
854f5edd06 | ||
|
|
0122a21c71 | ||
|
|
e9de9f6042 | ||
|
|
2b1b6787b8 | ||
|
|
3a7c6f7b38 | ||
|
|
1a83791191 | ||
|
|
0f03f40eff | ||
|
|
6801c68333 | ||
|
|
2fbe803530 | ||
|
|
0da7d09298 | ||
|
|
91af54ade3 | ||
|
|
645251a134 | ||
|
|
dfeddc2e53 | ||
|
|
4b13303d01 | ||
|
|
ad1455e4da | ||
|
|
6f38ec6a95 | ||
|
|
b6ee97c770 | ||
|
|
bdfabc5ce8 | ||
|
|
86a4bb67c8 | ||
|
|
259d2ff11d | ||
|
|
3753a3c775 | ||
|
|
bc09121677 |
@@ -11,7 +11,7 @@
|
|||||||
repos:
|
repos:
|
||||||
# Autoformat: Python code, syntax patterns are modernized
|
# Autoformat: Python code, syntax patterns are modernized
|
||||||
- repo: https://github.com/asottile/pyupgrade
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
rev: v3.8.0
|
rev: v3.10.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: pyupgrade
|
- id: pyupgrade
|
||||||
args:
|
args:
|
||||||
@@ -37,13 +37,13 @@ repos:
|
|||||||
|
|
||||||
# Autoformat: Python code
|
# Autoformat: Python code
|
||||||
- repo: https://github.com/psf/black
|
- repo: https://github.com/psf/black
|
||||||
rev: 23.3.0
|
rev: 23.7.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: black
|
- id: black
|
||||||
|
|
||||||
# Autoformat: markdown, yaml
|
# Autoformat: markdown, yaml
|
||||||
- repo: https://github.com/pre-commit/mirrors-prettier
|
- repo: https://github.com/pre-commit/mirrors-prettier
|
||||||
rev: v3.0.0-alpha.9-for-vscode
|
rev: v3.0.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: prettier
|
- id: prettier
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ repos:
|
|||||||
|
|
||||||
# Lint: Python code
|
# Lint: Python code
|
||||||
- repo: https://github.com/pycqa/flake8
|
- repo: https://github.com/pycqa/flake8
|
||||||
rev: "6.0.0"
|
rev: "6.1.0"
|
||||||
hooks:
|
hooks:
|
||||||
- id: flake8
|
- id: flake8
|
||||||
|
|
||||||
|
|||||||
27
docs/conf.py
27
docs/conf.py
@@ -20,6 +20,7 @@ author = "Project Jupyter Contributors"
|
|||||||
#
|
#
|
||||||
extensions = [
|
extensions = [
|
||||||
"sphinx_copybutton",
|
"sphinx_copybutton",
|
||||||
|
"sphinx.ext.intersphinx",
|
||||||
"sphinxext.opengraph",
|
"sphinxext.opengraph",
|
||||||
"sphinxext.rediraffe",
|
"sphinxext.rediraffe",
|
||||||
"myst_parser",
|
"myst_parser",
|
||||||
@@ -74,6 +75,32 @@ myst_enable_extensions = [
|
|||||||
"fieldlist",
|
"fieldlist",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for intersphinx extension ---------------------------------------
|
||||||
|
# ref: https://www.sphinx-doc.org/en/master/usage/extensions/intersphinx.html#configuration
|
||||||
|
#
|
||||||
|
# The extension makes us able to link like to other projects like below.
|
||||||
|
#
|
||||||
|
# rST - :external:py:class:`jupyterhub.spawner.Spawner`
|
||||||
|
# MyST - {external:py:class}`jupyterhub.spawner.Spawner`
|
||||||
|
#
|
||||||
|
# rST - :external:py:attribute:`jupyterhub.spawner.Spawner.default_url`
|
||||||
|
# MyST - {external:py:attribute}`jupyterhub.spawner.Spawner.default_url`
|
||||||
|
#
|
||||||
|
# To see what we can link to, do the following where "objects.inv" is appended
|
||||||
|
# to the sphinx based website:
|
||||||
|
#
|
||||||
|
# python -m sphinx.ext.intersphinx https://jupyterhub.readthedocs.io/en/stable/objects.inv
|
||||||
|
#
|
||||||
|
intersphinx_mapping = {
|
||||||
|
"jupyterhub": ("https://jupyterhub.readthedocs.io/en/stable/", None),
|
||||||
|
}
|
||||||
|
|
||||||
|
# intersphinx_disabled_reftypes set based on recommendation in
|
||||||
|
# https://docs.readthedocs.io/en/stable/guides/intersphinx.html#using-intersphinx
|
||||||
|
intersphinx_disabled_reftypes = ["*"]
|
||||||
|
|
||||||
|
|
||||||
# -- Options for linkcheck builder -------------------------------------------
|
# -- Options for linkcheck builder -------------------------------------------
|
||||||
# ref: https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-the-linkcheck-builder
|
# ref: https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-the-linkcheck-builder
|
||||||
#
|
#
|
||||||
|
|||||||
64
docs/howto/admin/upgrade-tljh.md
Normal file
64
docs/howto/admin/upgrade-tljh.md
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
(howto-admin-upgrade-tljh)=
|
||||||
|
|
||||||
|
# Upgrade TLJH
|
||||||
|
|
||||||
|
A TLJH installation is supposed to be upgradable to get updates to JupyterHub
|
||||||
|
itself and its dependencies in the [hub environment](hub-environment). For
|
||||||
|
details on what is done during an upgrade, see
|
||||||
|
[](topic-installer-upgrade-actions).
|
||||||
|
|
||||||
|
## Step 1: Read the changelog
|
||||||
|
|
||||||
|
Before making an upgrade, please read the [](changelog) to become aware about
|
||||||
|
breaking changes. If there are breaking changes, you may need to update your
|
||||||
|
configuration files or take other actions as well as part of the upgrade.
|
||||||
|
|
||||||
|
Adjusting to the breaking changes isn't part of this documentation, please rely
|
||||||
|
on the TLJH changelog and the changelogs of related projects linked to from the
|
||||||
|
TLJH changelog.
|
||||||
|
|
||||||
|
## Step 2: Consider making a backup
|
||||||
|
|
||||||
|
Before making an upgrade, consider if you want to first make a backup in some
|
||||||
|
way. While upgrades between TLJH versions are tested with automation, there are
|
||||||
|
no guarantees.
|
||||||
|
|
||||||
|
This project does't yet provide documentation on how to make backups, but if
|
||||||
|
TLJH is installed on a virtual machine in a cloud, a good option is to try
|
||||||
|
create a snapshot of the associated disk. If this isn't an option, you could
|
||||||
|
consider making a backup of the files in `/opt/tljh` that contain most but not
|
||||||
|
all things during an upgrade, or perhaps only the JupyterHub database with
|
||||||
|
information about its users in `/opt/tljh/state` together with some other
|
||||||
|
details.
|
||||||
|
|
||||||
|
## Step 3: Make the upgrade
|
||||||
|
|
||||||
|
To initialize the upgrade, do the following from a terminal on the machine where
|
||||||
|
TLJH is installed.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# IMPORTANT: This should NOT be run from a JupyterHub started user server, but
|
||||||
|
# should only run from a standalone terminal session in the machine
|
||||||
|
# where TLJH has been installed.
|
||||||
|
#
|
||||||
|
curl -L https://tljh.jupyter.org/bootstrap.py \
|
||||||
|
| sudo python3 - \
|
||||||
|
--version=latest
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also upgrade to specific version by changing `--version=latest` to
|
||||||
|
`--version=1.0.0` or similar. There is no need to specify admin users etc again.
|
||||||
|
|
||||||
|
## Step 4: Verify function
|
||||||
|
|
||||||
|
After having made an upgrade its always good to verify that the JupyterHub
|
||||||
|
installation still works as expected. You may want to try logging out, logging
|
||||||
|
in, and starting a new server for example.
|
||||||
|
|
||||||
|
If you have issues consider the [](troubleshooting) documentation. If you need
|
||||||
|
help you can ask questions in [Jupyter forum], and if you think there is a bug
|
||||||
|
or documentation improvement that should be made you can open an issue or pull
|
||||||
|
request in the [TLJH GitHub project].
|
||||||
|
|
||||||
|
[jupyter forum]: https://discourse.jupyter.org/c/jupyterhub/tljh
|
||||||
|
[tljh github project]: https://github.com/jupyterhub/the-littlest-jupyterhub
|
||||||
@@ -22,6 +22,7 @@ content/share-data
|
|||||||
user-env/user-environment
|
user-env/user-environment
|
||||||
user-env/notebook-interfaces
|
user-env/notebook-interfaces
|
||||||
user-env/server-resources
|
user-env/server-resources
|
||||||
|
user-env/override-lab-settings
|
||||||
```
|
```
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
@@ -55,6 +56,7 @@ admin/nbresuse
|
|||||||
admin/https
|
admin/https
|
||||||
admin/enable-extensions
|
admin/enable-extensions
|
||||||
admin/systemd
|
admin/systemd
|
||||||
|
admin/upgrade-tljh
|
||||||
```
|
```
|
||||||
|
|
||||||
## Cloud provider configuration
|
## Cloud provider configuration
|
||||||
|
|||||||
@@ -1,49 +1,47 @@
|
|||||||
(howto/user-env/notebook-interfaces)=
|
(howto/user-env/notebook-interfaces)=
|
||||||
|
|
||||||
# Change default User Interface
|
# Change default user interface
|
||||||
|
|
||||||
By default, logging into TLJH puts you in the classic Jupyter Notebook
|
By default a user starting a server will see the JupyterLab interface. This can
|
||||||
interface we all know and love. However, there are at least two other
|
be changed with TLJH config `user_environment.default_app` or with the
|
||||||
popular notebook interfaces you can use:
|
JupyterHub config
|
||||||
|
{external:py:attr}`jupyterhub.spawner.Spawner.default_url` directly.
|
||||||
|
|
||||||
1. [JupyterLab](http://jupyterlab.readthedocs.io/en/stable/)
|
The TLJH config supports the options `jupyterlab` and `classic`, which
|
||||||
2. [nteract](https://nteract.io/)
|
translates to a `Spawner.default_url` config of `/lab` and `/tree`.
|
||||||
|
|
||||||
Both these interfaces are also shipped with TLJH by default. You can try
|
Both these interfaces are also shipped with TLJH by default. You can try them
|
||||||
them temporarily, or set them to be the default interface whenever you
|
temporarily, or set them to be the default interface whenever you login.
|
||||||
login.
|
|
||||||
|
|
||||||
## Trying an alternate interface temporarily
|
## Trying an alternate interface temporarily
|
||||||
|
|
||||||
When you log in & start your server, by default the URL in your browser
|
When you log in and start your server, by default the URL in your browser will
|
||||||
will be something like `/user/<username>/tree`. The `/tree` is what
|
be something like `/user/<username>/lab`. The `/lab` is what tells the jupyter
|
||||||
tells the notebook server to give you the classic notebook interface.
|
server to give you the JupyterLab user interface.
|
||||||
|
|
||||||
- **For the JupyterLab interface**: change `/tree` to `/lab`.
|
As an example, you can update the URL to not end with `/lab`, but instead end
|
||||||
- **For the nteract interface**: change `/tree` to `/nteract`
|
with `/tree` to temporarily switch to the classic interface.
|
||||||
|
|
||||||
You can play around with them and see what fits your use cases best.
|
## Changing the default user interface using TLJH config
|
||||||
|
|
||||||
## Changing the default user interface
|
You can change the default url, and therefore the interface users get when they
|
||||||
|
log in by modifying TLJH config as an admin user.
|
||||||
|
|
||||||
You can change the default interface users get when they log in by
|
1. To launch the classic notebook interface when users log in, run the
|
||||||
modifying `config.yaml` as an admin user.
|
following in the admin console:
|
||||||
|
|
||||||
1. To launch **JupyterLab** when users log in, run the following in an
|
```bash
|
||||||
admin console:
|
sudo tljh-config set user_environment.default_app classic
|
||||||
|
```
|
||||||
|
|
||||||
|
1. To launch JupyterLab when users log in, run the following in an admin
|
||||||
|
console:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo tljh-config set user_environment.default_app jupyterlab
|
sudo tljh-config set user_environment.default_app jupyterlab
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Alternatively, to launch **nteract** when users log in, run the
|
1. Apply the changes by restarting JupyterHub. This should not disrupt
|
||||||
following in the admin console:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo tljh-config set user_environment.default_app nteract
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Apply the changes by restarting JupyterHub. This should not disrupt
|
|
||||||
current users.
|
current users.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
121
docs/howto/user-env/override-lab-settings.md
Normal file
121
docs/howto/user-env/override-lab-settings.md
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
(topic-override-lab-settings)=
|
||||||
|
|
||||||
|
# Setting New Default JupyterLab Settings
|
||||||
|
|
||||||
|
If you or other users of your hub tend to use JupyterLab as your default notebook app,
|
||||||
|
then you may want to override some of the default settings for the users of your hub.
|
||||||
|
You can do this by creating a file `/opt/tljh/user/share/jupyter/lab/settings/overrides.json`
|
||||||
|
with the necessary settings.
|
||||||
|
|
||||||
|
This how-to guide will go through the necessary steps to set new defaults
|
||||||
|
for all users of your `TLJH` by example: setting the default theme to **JupyterLab Dark**.
|
||||||
|
|
||||||
|
## Step 1: Change your Personal Settings
|
||||||
|
|
||||||
|
The easiest way to set new default settings for all users starts with
|
||||||
|
configuring your own settings preferences to what you would like everyone else to have.
|
||||||
|
|
||||||
|
1. Make sure you are in the [JupyterLab notebook interface](#howto/user-env/notebook-interfaces),
|
||||||
|
which will look something like `http(s)://<YOUR-HUB-IP>/user/<YOUR_USERNAME/lab`.
|
||||||
|
|
||||||
|
1. Go to **Settings** in the menu bar and select **Theme -> JupyterLab Dark**.
|
||||||
|
|
||||||
|
## Step 2: Determine your Personal Settings Configuration
|
||||||
|
|
||||||
|
To set **JupyterLab Dark** as the default theme for all users, we will need to create
|
||||||
|
a `json` formatted file with the setting override. Now that you have changed your
|
||||||
|
personal setting, you can use the **JSON Settings Editor** to get the relevant
|
||||||
|
setting snippet to add to the `overrides.json` file later.
|
||||||
|
|
||||||
|
1. Go to **Settings -> Advanced Settings Editor** then select **JSON Settings Editor** on the right.
|
||||||
|
|
||||||
|
1. Scroll down and select **Theme**. You should see the `json` formatted configuration:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
// Theme
|
||||||
|
// @jupyterlab/apputils-extension:themes
|
||||||
|
// Theme manager settings.
|
||||||
|
// *************************************
|
||||||
|
|
||||||
|
// Theme CSS Overrides
|
||||||
|
// Override theme CSS variables by setting key-value pairs here
|
||||||
|
"overrides": {
|
||||||
|
"code-font-family": null,
|
||||||
|
"code-font-size": null,
|
||||||
|
"content-font-family": null,
|
||||||
|
"content-font-size1": null,
|
||||||
|
"ui-font-family": null,
|
||||||
|
"ui-font-size1": null
|
||||||
|
},
|
||||||
|
|
||||||
|
// Selected Theme
|
||||||
|
// Application-level visual styling theme
|
||||||
|
"theme": "JupyterLab Dark",
|
||||||
|
|
||||||
|
// Scrollbar Theming
|
||||||
|
// Enable/disable styling of the application scrollbars
|
||||||
|
"theme-scrollbars": false
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Determine the setting that you want to change. In this example it's the `theme`
|
||||||
|
setting of `@jupyterlab/apputils-extension:theme` as can be seen above.
|
||||||
|
|
||||||
|
1. Build your `json` snippet. In this case, our snippet should look like this:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"@jupyterlab/apputils-extension:themes": {
|
||||||
|
"theme": "JupyterLab Dark"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
We only want to change the **Selected Theme**, so we don't need to include
|
||||||
|
the other theme-related settings for CSS and the scrollbar.
|
||||||
|
|
||||||
|
:::{note}
|
||||||
|
To apply overrides for more than one setting, separate each setting by commas. For example,
|
||||||
|
if you _also_ wanted to change the interval at which the notebook autosaves your content, you can use
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"@jupyterlab/apputils-extension:themes": {
|
||||||
|
"theme": "JupyterLab Dark"
|
||||||
|
},
|
||||||
|
|
||||||
|
"@jupyterlab/docmanager-extension:plugin": {
|
||||||
|
"autosaveInterval": 30
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Step 3: Apply the Overrides to the Hub
|
||||||
|
|
||||||
|
Once you have your setting snippet created, you can add it to the `overrides.json` file
|
||||||
|
so that it gets applied to all users.
|
||||||
|
|
||||||
|
1. First, create the settings directory if it doesn't already exist:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo mkdir -p /opt/tljh/user/share/jupyter/lab/settings
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Use `nano` to create and add content to the `overrides.json` file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo nano /opt/tljh/user/share/jupyter/lab/settings/overrides.json
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Copy and paste your snippet into the file and save.
|
||||||
|
|
||||||
|
1. Reload your configuration:
|
||||||
|
```bash
|
||||||
|
sudo tljh-config reload
|
||||||
|
```
|
||||||
|
|
||||||
|
The new default settings should now be set for all users in your `TLJH` using the
|
||||||
|
JupyterLab notebook interface.
|
||||||
@@ -1,24 +1,10 @@
|
|||||||
|
(changelog)=
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## 1.0
|
## 1.0
|
||||||
|
|
||||||
### 1.0.0b1 - 2023-07-07
|
### 1.0.0 - 2023-08-11
|
||||||
|
|
||||||
````{warning}
|
|
||||||
This is a beta release.
|
|
||||||
|
|
||||||
To upgrade to it, after having read the breaking changes below, you can do the
|
|
||||||
following from a terminal on a machine TLJH is installed.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
# This should NOT be run from a JupyterHub started user server, but should
|
|
||||||
# run from a standalone terminal session in the machine where TLJH has been
|
|
||||||
# installed.
|
|
||||||
curl -L https://tljh.jupyter.org/bootstrap.py \
|
|
||||||
| sudo python3 - \
|
|
||||||
--version=1.0.0b1
|
|
||||||
```
|
|
||||||
````
|
|
||||||
|
|
||||||
This release bundles with the latest available software from the JupyterHub
|
This release bundles with the latest available software from the JupyterHub
|
||||||
ecosystem.
|
ecosystem.
|
||||||
@@ -27,9 +13,11 @@ The TLJH project now has tests to verify upgrades of installations between
|
|||||||
releases and procedures with automation to make releases. Going onwards, TLJH
|
releases and procedures with automation to make releases. Going onwards, TLJH
|
||||||
installations of version 0.2.0 and later are meant to be easy to upgrade.
|
installations of version 0.2.0 and later are meant to be easy to upgrade.
|
||||||
|
|
||||||
|
For instructions on how to make an upgrade, see [](howto-admin-upgrade-tljh).
|
||||||
|
|
||||||
#### Breaking changes
|
#### Breaking changes
|
||||||
|
|
||||||
- JupyterHub 1.\* has been upgraded to >=4.0.1,<5
|
- JupyterHub 1.\* has been upgraded to >=4.0.2,<5
|
||||||
- This upgrade requires user servers to be restarted if they were running
|
- This upgrade requires user servers to be restarted if they were running
|
||||||
during the upgrade.
|
during the upgrade.
|
||||||
- Refer to the [JupyterHub changelog] for details where you pay attention to
|
- Refer to the [JupyterHub changelog] for details where you pay attention to
|
||||||
@@ -44,6 +32,9 @@ installations of version 0.2.0 and later are meant to be easy to upgrade.
|
|||||||
- The configured JupyterHub Spawner class `jupyterhub-systemdspawner` has been
|
- The configured JupyterHub Spawner class `jupyterhub-systemdspawner` has been
|
||||||
upgraded to a new major version, but no breaking change are expected to be
|
upgraded to a new major version, but no breaking change are expected to be
|
||||||
noticed for users of this distribution.
|
noticed for users of this distribution.
|
||||||
|
- User servers now launch into `/lab` by default, to revert this a JupyterHub
|
||||||
|
admin user can do `sudo tljh-config set user_environment.default_app classic`
|
||||||
|
or set the JupyterHub config `c.Spawner.default_url` directly.
|
||||||
|
|
||||||
[jupyterhub changelog]: https://jupyterhub.readthedocs.io/en/stable/changelog.html
|
[jupyterhub changelog]: https://jupyterhub.readthedocs.io/en/stable/changelog.html
|
||||||
|
|
||||||
@@ -62,15 +53,15 @@ user environment. The hub environment's dependencies are on the other hand
|
|||||||
always upgraded to the latest version within the specified version range defined
|
always upgraded to the latest version within the specified version range defined
|
||||||
in [tljh/requirements-hub-env.txt] and seen below.
|
in [tljh/requirements-hub-env.txt] and seen below.
|
||||||
|
|
||||||
[tljh/requirements-user-env-extras.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/1.0.0b1/tljh/requirements-user-env-extras.txt
|
[tljh/requirements-user-env-extras.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/1.0.0/tljh/requirements-user-env-extras.txt
|
||||||
[tljh/requirements-hub-env.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/1.0.0b1/tljh/requirements-hub-env.txt
|
[tljh/requirements-hub-env.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/1.0.0/tljh/requirements-hub-env.txt
|
||||||
|
|
||||||
The changes in the respective environments between TLJH version 0.2.0 and
|
The changes in the respective environments between TLJH version 0.2.0 and 1.0.0
|
||||||
1.0.0b1 are summarized below.
|
are summarized below.
|
||||||
|
|
||||||
| Dependency changes in the _hub environment_ | Version in 0.2.0 | Version in 1.0.0b1 | Changelog link | Note |
|
| Dependency changes in the _hub environment_ | Version in 0.2.0 | Version in 1.0.0 | Changelog link | Note |
|
||||||
| ------------------------------------------------------------------------------ | ---------------- | ------------------ | ---------------------------------------------------------------------------------------- | ---------------------------------------------------- |
|
| ------------------------------------------------------------------------------ | ---------------- | ---------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------- |
|
||||||
| [jupyterhub](https://github.com/jupyterhub/jupyterhub) | 1.\* | >=4.0.1,<5 | [Changelog](https://jupyterhub.readthedocs.io/en/stable/reference/changelog.html) | Running in the `jupyterhub` systemd service |
|
| [jupyterhub](https://github.com/jupyterhub/jupyterhub) | 1.\* | >=4.0.2,<5 | [Changelog](https://jupyterhub.readthedocs.io/en/stable/reference/changelog.html) | Running in the `jupyterhub` systemd service |
|
||||||
| [traefik](https://github.com/traefik/traefik) | 1.7.33 | 2.10.1 | [Changelog](https://github.com/traefik/traefik/blob/master/CHANGELOG.md) | Running in the `traefik` systemd service |
|
| [traefik](https://github.com/traefik/traefik) | 1.7.33 | 2.10.1 | [Changelog](https://github.com/traefik/traefik/blob/master/CHANGELOG.md) | Running in the `traefik` systemd service |
|
||||||
| [traefik-proxy](https://github.com/jupyterhub/traefik-proxy) | 0.3.\* | >=1.1.0,<2 | [Changelog](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/changelog.html) | Run by jupyterhub, controls `traefik` |
|
| [traefik-proxy](https://github.com/jupyterhub/traefik-proxy) | 0.3.\* | >=1.1.0,<2 | [Changelog](https://jupyterhub-traefik-proxy.readthedocs.io/en/latest/changelog.html) | Run by jupyterhub, controls `traefik` |
|
||||||
| [systemdspawner](https://github.com/jupyterhub/systemdspawner) | 0.16.\* | >=1.0.1,<2 | [Changelog](https://github.com/jupyterhub/systemdspawner/blob/master/CHANGELOG.md) | Run by jupyterhub, controls user servers via systemd |
|
| [systemdspawner](https://github.com/jupyterhub/systemdspawner) | 0.16.\* | >=1.0.1,<2 | [Changelog](https://github.com/jupyterhub/systemdspawner/blob/master/CHANGELOG.md) | Run by jupyterhub, controls user servers via systemd |
|
||||||
@@ -78,13 +69,13 @@ The changes in the respective environments between TLJH version 0.2.0 and
|
|||||||
| [firstuseauthenticator](https://github.com/jupyterhub/firstuseauthenticator) | 1.\* | >=1.0.0,<2 | [Changelog](https://oauthenticator.readthedocs.io/en/latest/reference/changelog.html) | An optional way to authenticate users |
|
| [firstuseauthenticator](https://github.com/jupyterhub/firstuseauthenticator) | 1.\* | >=1.0.0,<2 | [Changelog](https://oauthenticator.readthedocs.io/en/latest/reference/changelog.html) | An optional way to authenticate users |
|
||||||
| [tmpauthenticator](https://github.com/jupyterhub/tmpauthenticator) | 0.6.\* | >=1.0.0,<2 | [Changelog](https://github.com/jupyterhub/tmpauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users |
|
| [tmpauthenticator](https://github.com/jupyterhub/tmpauthenticator) | 0.6.\* | >=1.0.0,<2 | [Changelog](https://github.com/jupyterhub/tmpauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users |
|
||||||
| [nativeauthenticator](https://github.com/jupyterhub/nativeauthenticator) | 1.\* | >=1.2.0,<2 | [Changelog](https://github.com/jupyterhub/nativeauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users |
|
| [nativeauthenticator](https://github.com/jupyterhub/nativeauthenticator) | 1.\* | >=1.2.0,<2 | [Changelog](https://github.com/jupyterhub/nativeauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users |
|
||||||
| [oauthenticator](https://github.com/jupyterhub/oauthenticator) | 14.\* | >=16.0.2,<17 | [Changelog](https://oauthenticator.readthedocs.io/en/latest/reference/changelog.html) | An optional way to authenticate users |
|
| [oauthenticator](https://github.com/jupyterhub/oauthenticator) | 14.\* | >=16.0.4,<17 | [Changelog](https://oauthenticator.readthedocs.io/en/latest/reference/changelog.html) | An optional way to authenticate users |
|
||||||
| [ldapauthenticator](https://github.com/jupyterhub/ldapauthenticator) | 1.\* | >=1.3.2,<2 | [Changelog](https://github.com/jupyterhub/ldapauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users |
|
| [ldapauthenticator](https://github.com/jupyterhub/ldapauthenticator) | 1.\* | >=1.3.2,<2 | [Changelog](https://github.com/jupyterhub/ldapauthenticator/blob/HEAD/CHANGELOG.md) | An optional way to authenticate users |
|
||||||
| [pip](https://github.com/pypa/pip) | 21.3.\* | >=23.1.2 | [Changelog](https://pip.pypa.io/en/stable/news/) | - |
|
| [pip](https://github.com/pypa/pip) | 21.3.\* | >=23.1.2 | [Changelog](https://pip.pypa.io/en/stable/news/) | - |
|
||||||
|
|
||||||
| Dependency changes in the _user environment_ | Version in 0.2.0 | Version in 1.0.0 | Changelog link | Note |
|
| Dependency changes in the _user environment_ | Version in 0.2.0 | Version in 1.0.0 | Changelog link | Note |
|
||||||
| -------------------------------------------------------- | ---------------- | ---------------- | --------------------------------------------------------------------------------- | ------------------------ |
|
| -------------------------------------------------------- | ---------------- | ---------------- | --------------------------------------------------------------------------------- | ------------------------ |
|
||||||
| [jupyterhub](https://github.com/jupyterhub/jupyterhub) | 1.\* | >=4.0.1,<5 | [Changelog](https://jupyterhub.readthedocs.io/en/stable/reference/changelog.html) | Always upgraded. |
|
| [jupyterhub](https://github.com/jupyterhub/jupyterhub) | 1.\* | >=4.0.2,<5 | [Changelog](https://jupyterhub.readthedocs.io/en/stable/reference/changelog.html) | Always upgraded. |
|
||||||
| [pip](https://github.com/pypa/pip) | \* | >=23.1.2 | [Changelog](https://pip.pypa.io/en/stable/news/) | Only upgraded if needed. |
|
| [pip](https://github.com/pypa/pip) | \* | >=23.1.2 | [Changelog](https://pip.pypa.io/en/stable/news/) | Only upgraded if needed. |
|
||||||
| [conda](https://docs.conda.io/projects/conda/en/stable/) | 0.16.0 | >=0.16.0 | [Changelog](https://docs.conda.io/projects/conda/en/stable/release-notes.html) | Only upgraded if needed. |
|
| [conda](https://docs.conda.io/projects/conda/en/stable/) | 0.16.0 | >=0.16.0 | [Changelog](https://docs.conda.io/projects/conda/en/stable/release-notes.html) | Only upgraded if needed. |
|
||||||
| [mamba](https://mamba.readthedocs.io/en/latest/) | 4.10.3 | >=4.10.0 | [Changelog](https://github.com/mamba-org/mamba/blob/main/CHANGELOG.md) | Only upgraded if needed. |
|
| [mamba](https://mamba.readthedocs.io/en/latest/) | 4.10.3 | >=4.10.0 | [Changelog](https://github.com/mamba-org/mamba/blob/main/CHANGELOG.md) | Only upgraded if needed. |
|
||||||
@@ -101,6 +92,8 @@ The changes in the respective environments between TLJH version 0.2.0 and
|
|||||||
|
|
||||||
#### Maintenance and upkeep improvements
|
#### Maintenance and upkeep improvements
|
||||||
|
|
||||||
|
- Update Notebook, JupyterLab, Jupyter Resource Usage [#928](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/928) ([@jtpio](https://github.com/jtpio), [@consideRatio](https://github.com/consideRatio))
|
||||||
|
- Launch into `/lab` by default by changing TLJH config's default value [#775](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/775) ([@raybellwaves](https://github.com/raybellwaves), [@consideRatio](https://github.com/consideRatio), [@GeorgianaElena](https://github.com/GeorgianaElena), [@minrk](https://github.com/minrk), [@manics](https://github.com/manics))
|
||||||
- breaking: update oauthenticator from 15.1.0 to >=16.0.2,<17, make tljh auth docs link out [#924](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/924) ([@consideRatio](https://github.com/consideRatio), [@manics](https://github.com/manics), [@minrk](https://github.com/minrk))
|
- breaking: update oauthenticator from 15.1.0 to >=16.0.2,<17, make tljh auth docs link out [#924](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/924) ([@consideRatio](https://github.com/consideRatio), [@manics](https://github.com/manics), [@minrk](https://github.com/minrk))
|
||||||
- test refactor: add comment about python/conda/mamba [#921](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/921) ([@consideRatio](https://github.com/consideRatio))
|
- test refactor: add comment about python/conda/mamba [#921](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/921) ([@consideRatio](https://github.com/consideRatio))
|
||||||
- --force-reinstall old conda to ensure it's working before we try to install conda packages [#920](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/920) ([@minrk](https://github.com/minrk), [@consideRatio](https://github.com/consideRatio))
|
- --force-reinstall old conda to ensure it's working before we try to install conda packages [#920](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/920) ([@minrk](https://github.com/minrk), [@consideRatio](https://github.com/consideRatio))
|
||||||
@@ -129,6 +122,8 @@ The changes in the respective environments between TLJH version 0.2.0 and
|
|||||||
|
|
||||||
#### Documentation improvements
|
#### Documentation improvements
|
||||||
|
|
||||||
|
- docs: add docs about environments and upgrades [#932](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/932) ([@consideRatio](https://github.com/consideRatio), [@minrk](https://github.com/minrk))
|
||||||
|
- Add `JupyterLab` setting overrides docs [#922](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/922) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio))
|
||||||
- Quote `pwd` to prevent error if dir has spaces [#917](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/917) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio))
|
- Quote `pwd` to prevent error if dir has spaces [#917](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/917) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio))
|
||||||
- Google Cloud troubleshooting and configuration updates [#906](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/906) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio))
|
- Google Cloud troubleshooting and configuration updates [#906](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/906) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio))
|
||||||
- Add user env doc files [#902](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/902) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio))
|
- Add user env doc files [#902](https://github.com/jupyterhub/the-littlest-jupyterhub/pull/902) ([@jrdnbradford](https://github.com/jrdnbradford), [@consideRatio](https://github.com/consideRatio))
|
||||||
@@ -148,9 +143,9 @@ The changes in the respective environments between TLJH version 0.2.0 and
|
|||||||
The following people contributed discussions, new ideas, code and documentation contributions, and review.
|
The following people contributed discussions, new ideas, code and documentation contributions, and review.
|
||||||
See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/#how-does-this-tool-define-contributions-in-the-reports).
|
See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/#how-does-this-tool-define-contributions-in-the-reports).
|
||||||
|
|
||||||
([GitHub contributors page for this release](https://github.com/jupyterhub/the-littlest-jupyterhub/graphs/contributors?from=2023-02-27&to=2023-06-09&type=c))
|
([GitHub contributors page for this release](https://github.com/jupyterhub/the-littlest-jupyterhub/graphs/contributors?from=2023-02-27&to=2023-08-11&type=c))
|
||||||
|
|
||||||
@adonm ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aadonm+updated%3A2023-02-27..2023-06-09&type=Issues)) | @audiodude ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aaudiodude+updated%3A2023-02-27..2023-06-09&type=Issues)) | @consideRatio ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AconsideRatio+updated%3A2023-02-27..2023-06-09&type=Issues)) | @eingemaischt ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aeingemaischt+updated%3A2023-02-27..2023-06-09&type=Issues)) | @GeorgianaElena ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AGeorgianaElena+updated%3A2023-02-27..2023-06-09&type=Issues)) | @Hannnsen ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AHannnsen+updated%3A2023-02-27..2023-06-09&type=Issues)) | @jawiv ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajawiv+updated%3A2023-02-27..2023-06-09&type=Issues)) | @jochym ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajochym+updated%3A2023-02-27..2023-06-09&type=Issues)) | @jrdnbradford ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajrdnbradford+updated%3A2023-02-27..2023-06-09&type=Issues)) | @manics ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Amanics+updated%3A2023-02-27..2023-06-09&type=Issues)) | @minrk ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aminrk+updated%3A2023-02-27..2023-06-09&type=Issues)) | @MridulS ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AMridulS+updated%3A2023-02-27..2023-06-09&type=Issues)) | @nsurleraux-railnova ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ansurleraux-railnova+updated%3A2023-02-27..2023-06-09&type=Issues)) | @Rom1deTroyes ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3ARom1deTroyes+updated%3A2023-02-27..2023-06-09&type=Issues)) | @wjcapehart ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Awjcapehart+updated%3A2023-02-27..2023-06-09&type=Issues)) | @yuvipanda ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ayuvipanda+updated%3A2023-02-27..2023-06-09&type=Issues))
|
@adonm ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aadonm+updated%3A2023-02-27..2023-08-11&type=Issues)) | @audiodude ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aaudiodude+updated%3A2023-02-27..2023-08-11&type=Issues)) | @choldgraf ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Acholdgraf+updated%3A2023-02-27..2023-08-11&type=Issues)) | @consideRatio ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AconsideRatio+updated%3A2023-02-27..2023-08-11&type=Issues)) | @eingemaischt ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aeingemaischt+updated%3A2023-02-27..2023-08-11&type=Issues)) | @GeorgianaElena ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AGeorgianaElena+updated%3A2023-02-27..2023-08-11&type=Issues)) | @Hannnsen ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AHannnsen+updated%3A2023-02-27..2023-08-11&type=Issues)) | @jawiv ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajawiv+updated%3A2023-02-27..2023-08-11&type=Issues)) | @jochym ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajochym+updated%3A2023-02-27..2023-08-11&type=Issues)) | @jrdnbradford ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajrdnbradford+updated%3A2023-02-27..2023-08-11&type=Issues)) | @jtpio ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ajtpio+updated%3A2023-02-27..2023-08-11&type=Issues)) | @kevmk04 ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Akevmk04+updated%3A2023-02-27..2023-08-11&type=Issues)) | @manics ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Amanics+updated%3A2023-02-27..2023-08-11&type=Issues)) | @minrk ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Aminrk+updated%3A2023-02-27..2023-08-11&type=Issues)) | @MridulS ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3AMridulS+updated%3A2023-02-27..2023-08-11&type=Issues)) | @nsurleraux-railnova ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ansurleraux-railnova+updated%3A2023-02-27..2023-08-11&type=Issues)) | @raybellwaves ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Araybellwaves+updated%3A2023-02-27..2023-08-11&type=Issues)) | @Rom1deTroyes ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3ARom1deTroyes+updated%3A2023-02-27..2023-08-11&type=Issues)) | @wjcapehart ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Awjcapehart+updated%3A2023-02-27..2023-08-11&type=Issues)) | @yuvipanda ([activity](https://github.com/search?q=repo%3Ajupyterhub%2Fthe-littlest-jupyterhub+involves%3Ayuvipanda+updated%3A2023-02-27..2023-08-11&type=Issues))
|
||||||
|
|
||||||
## 0.2.0
|
## 0.2.0
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,11 @@ Topic guides provide in-depth explanations of specific topics.
|
|||||||
|
|
||||||
whentouse
|
whentouse
|
||||||
requirements
|
requirements
|
||||||
|
three-environments
|
||||||
security
|
security
|
||||||
customizing-installer
|
customizing-installer
|
||||||
installer-actions
|
installer-actions
|
||||||
|
installer-upgrade-actions
|
||||||
tljh-config
|
tljh-config
|
||||||
authenticator-configuration
|
authenticator-configuration
|
||||||
escape-hatch
|
escape-hatch
|
||||||
|
|||||||
30
docs/topic/installer-upgrade-actions.md
Normal file
30
docs/topic/installer-upgrade-actions.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
(topic-installer-upgrade-actions)=
|
||||||
|
|
||||||
|
# What is done during an upgrade of TLJH?
|
||||||
|
|
||||||
|
Once TLJH has been installed, it should be possible to upgrade the installation.
|
||||||
|
This documentation is meant to capture the changes made during an upgrade.
|
||||||
|
|
||||||
|
```{versionchanged} 1.0.0
|
||||||
|
Ensuring upgrades work has only been done since 1.0.0 upgrading from version
|
||||||
|
0.2.0.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Changes to the system environment
|
||||||
|
|
||||||
|
The [system environment](system-environment) is not meant to be influenced
|
||||||
|
unless explicitly mentioned in the changelog, typically only during major
|
||||||
|
version upgrades.
|
||||||
|
|
||||||
|
## Changes to the hub environment
|
||||||
|
|
||||||
|
The [hub environment](hub-environment) gets several packages upgraded based on
|
||||||
|
version ranges specified in [tljh/requirements-hub-env.txt].
|
||||||
|
|
||||||
|
## Changes to the user environment
|
||||||
|
|
||||||
|
The [user environment](user-environment) gets is `jupyterhub` package upgraded,
|
||||||
|
but no other packages gets upgraded unless explicitly mentioned in the
|
||||||
|
changelog, typically only during major version upgrades.
|
||||||
|
|
||||||
|
[tljh/requirements-hub-env.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/HEAD/tljh/requirements-hub-env.txt
|
||||||
76
docs/topic/three-environments.md
Normal file
76
docs/topic/three-environments.md
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
(topic-three-environments)=
|
||||||
|
|
||||||
|
# The system, hub, and user environments
|
||||||
|
|
||||||
|
TLJH's documentation mentions the _system environment_, the _hub environment_,
|
||||||
|
and the _user environment_. This section will introduce what is meant with that
|
||||||
|
and clarify the distinctions between the environments.
|
||||||
|
|
||||||
|
(system-environment)=
|
||||||
|
|
||||||
|
## The system environment
|
||||||
|
|
||||||
|
When this documentation mentions the _system environment_, it refers to the
|
||||||
|
Linux environment with its installed `apt` packages, users in `/etc/passwd`,
|
||||||
|
etc.
|
||||||
|
|
||||||
|
A part of the system environment is a Python environment setup via the `apt`
|
||||||
|
package `python` installed by default in Linux distributions supported by TLJH.
|
||||||
|
To be specific, we can refer to this as the _system's Python environment_.
|
||||||
|
|
||||||
|
If you would do `sudo python3 -m pip install <something>` you would end up
|
||||||
|
installing something in the system's Python environment, and that would not be
|
||||||
|
available in the hub environment or the user environment.
|
||||||
|
|
||||||
|
The system's Python environment is only used by TLJH to run the `bootstrap.py`
|
||||||
|
script downloaded as part of installing or upgrading TLJH. This script is also
|
||||||
|
responsible for setting up the hub environment.
|
||||||
|
|
||||||
|
(hub-environment)=
|
||||||
|
|
||||||
|
## The hub environment
|
||||||
|
|
||||||
|
The _hub environment_ is a [virtual Python environment] setup in `/opt/tljh/hub`
|
||||||
|
by the `bootstrap.py` script using the system's Python environment during TLJH
|
||||||
|
installation.
|
||||||
|
|
||||||
|
The hub environment has Python packages installed in it related to running
|
||||||
|
JupyterHub itself such as an JupyterHub authenticator package, but it doesn't
|
||||||
|
include packages to start user servers like JupyterLab.
|
||||||
|
|
||||||
|
When TLJH is installed/upgraded, the packages listed in
|
||||||
|
[tljh/requirements-hub-env.txt] are installed/upgraded in this environment.
|
||||||
|
|
||||||
|
If you would do `sudo /opt/tljh/hub/bin/python3 -m pip install <something>` you
|
||||||
|
would end up installing something in the hub environment, and that would not be
|
||||||
|
available in the system's Python environment or the user environment.
|
||||||
|
|
||||||
|
[virtual Python environment]: https://docs.python.org/3/library/venv.html
|
||||||
|
|
||||||
|
[tljh/requirements-hub-env.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/HEAD/tljh/requirements-hub-env.txt
|
||||||
|
|
||||||
|
(user-environment)=
|
||||||
|
|
||||||
|
## The user environment
|
||||||
|
|
||||||
|
The _user environment_ is a Python environment setup in `/opt/tljh/user` by the
|
||||||
|
TLJH installer during TLJH installation. The user environment is not a virtual
|
||||||
|
environment because an entirely separate installation of Python has been made
|
||||||
|
for it.
|
||||||
|
|
||||||
|
The user environment has packages installed in it related to running individual
|
||||||
|
jupyter servers, such as `jupyterlab`.
|
||||||
|
|
||||||
|
When TLJH is _installed_, the packages listed in
|
||||||
|
[tljh/requirements-user-env.txt] are installed in this environment. When TLJH is
|
||||||
|
_upgraded_ though, as little as possible is done to this environment. Typically
|
||||||
|
only `jupyterhub` is upgraded to match the version in the hub environment. If
|
||||||
|
upgrading to a new major version of TLJH, then something small may be done
|
||||||
|
besides this, and then it should be described the changelog.
|
||||||
|
|
||||||
|
If you would do `sudo /opt/tljh/user/bin/python3 -m pip install <something>`, or
|
||||||
|
from a user server's terminal do `sudo -E pip install <something>` you would end
|
||||||
|
up installing something in the user environment, and that would not be available
|
||||||
|
in the system's Python environment or the hub environment.
|
||||||
|
|
||||||
|
[tljh/requirements-user-env-extras.txt]: https://github.com/jupyterhub/the-littlest-jupyterhub/blob/HEAD/tljh/requirements-user-env-extras.txt
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
(troubleshooting)=
|
||||||
|
|
||||||
# Troubleshooting
|
# Troubleshooting
|
||||||
|
|
||||||
In time, all systems have issues that need to be debugged. Troubleshooting
|
In time, all systems have issues that need to be debugged. Troubleshooting
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
@@ -7,13 +8,13 @@ def test_serverextensions():
|
|||||||
"""
|
"""
|
||||||
# jupyter-serverextension writes to stdout and stderr weirdly
|
# jupyter-serverextension writes to stdout and stderr weirdly
|
||||||
proc = subprocess.run(
|
proc = subprocess.run(
|
||||||
["/opt/tljh/user/bin/jupyter-serverextension", "list", "--sys-prefix"],
|
["/opt/tljh/user/bin/jupyter-server", "extension", "list", "--sys-prefix"],
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
)
|
)
|
||||||
|
|
||||||
extensions = [
|
extensions = [
|
||||||
"jupyterlab 3.",
|
"jupyterlab",
|
||||||
"nbgitpuller 1.",
|
"nbgitpuller",
|
||||||
"jupyter_resource_usage",
|
"jupyter_resource_usage",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -21,27 +22,26 @@ def test_serverextensions():
|
|||||||
assert e in proc.stderr.decode()
|
assert e in proc.stderr.decode()
|
||||||
|
|
||||||
|
|
||||||
def test_nbextensions():
|
def test_labextensions():
|
||||||
"""
|
"""
|
||||||
Validate nbextensions we want are installed & enabled
|
Validate JupyterLab extensions we want are installed & enabled
|
||||||
"""
|
"""
|
||||||
# jupyter-nbextension writes to stdout and stderr weirdly
|
# jupyter-labextension writes to stdout and stderr weirdly
|
||||||
proc = subprocess.run(
|
proc = subprocess.run(
|
||||||
["/opt/tljh/user/bin/jupyter-nbextension", "list", "--sys-prefix"],
|
["/opt/tljh/user/bin/jupyter-labextension", "list"],
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
)
|
)
|
||||||
|
|
||||||
extensions = [
|
extensions = [
|
||||||
"jupyter_resource_usage/main",
|
"@jupyter-server/resource-usage",
|
||||||
# This is what ipywidgets nbextension is called
|
# This is what ipywidgets lab extension is called
|
||||||
"jupyter-js-widgets/extension",
|
"@jupyter-widgets/jupyterlab-manager",
|
||||||
]
|
]
|
||||||
|
|
||||||
for e in extensions:
|
for e in extensions:
|
||||||
assert f"{e} \x1b[32m enabled \x1b[0m" in proc.stdout.decode()
|
# jupyter labextension lists outputs to stderr
|
||||||
|
out = proc.stderr.decode()
|
||||||
# Ensure we have 'OK' messages in our stdout, to make sure everything is importable
|
enabled_ok_pattern = re.compile(rf"{e}.*enabled.*OK")
|
||||||
assert proc.stderr.decode() == " - Validating: \x1b[32mOK\x1b[0m\n" * len(
|
matches = enabled_ok_pattern.search(out)
|
||||||
extensions
|
assert matches is not None
|
||||||
)
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ omit = [
|
|||||||
github_url = "https://github.com/jupyterhub/the-littlest-jupyterhub"
|
github_url = "https://github.com/jupyterhub/the-littlest-jupyterhub"
|
||||||
|
|
||||||
[tool.tbump.version]
|
[tool.tbump.version]
|
||||||
current = "1.0.0b1"
|
current = "1.0.0"
|
||||||
regex = '''
|
regex = '''
|
||||||
(?P<major>\d+)
|
(?P<major>\d+)
|
||||||
\.
|
\.
|
||||||
|
|||||||
2
setup.py
2
setup.py
@@ -2,7 +2,7 @@ from setuptools import find_packages, setup
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="the-littlest-jupyterhub",
|
name="the-littlest-jupyterhub",
|
||||||
version="1.0.0b1",
|
version="1.0.0",
|
||||||
description="A small JupyterHub distribution",
|
description="A small JupyterHub distribution",
|
||||||
url="https://github.com/jupyterhub/the-littlest-jupyterhub",
|
url="https://github.com/jupyterhub/the-littlest-jupyterhub",
|
||||||
author="Jupyter Development Team",
|
author="Jupyter Development Team",
|
||||||
|
|||||||
@@ -58,18 +58,17 @@ def test_app_default():
|
|||||||
Test default application with no config overrides.
|
Test default application with no config overrides.
|
||||||
"""
|
"""
|
||||||
c = apply_mock_config({})
|
c = apply_mock_config({})
|
||||||
# default_url is not set, so JupyterHub will pick default.
|
|
||||||
assert "default_url" not in c.Spawner
|
|
||||||
|
|
||||||
|
|
||||||
def test_app_jupyterlab():
|
|
||||||
"""
|
|
||||||
Test setting JupyterLab as default application
|
|
||||||
"""
|
|
||||||
c = apply_mock_config({"user_environment": {"default_app": "jupyterlab"}})
|
|
||||||
assert c.Spawner.default_url == "/lab"
|
assert c.Spawner.default_url == "/lab"
|
||||||
|
|
||||||
|
|
||||||
|
def test_app_classic():
|
||||||
|
"""
|
||||||
|
Test setting classic as default application
|
||||||
|
"""
|
||||||
|
c = apply_mock_config({"user_environment": {"default_app": "classic"}})
|
||||||
|
assert c.Spawner.default_url == "/tree"
|
||||||
|
|
||||||
|
|
||||||
def test_auth_default():
|
def test_auth_default():
|
||||||
"""
|
"""
|
||||||
Test default authentication settings with no overrides
|
Test default authentication settings with no overrides
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ default = {
|
|||||||
"password": "",
|
"password": "",
|
||||||
},
|
},
|
||||||
"user_environment": {
|
"user_environment": {
|
||||||
"default_app": "classic",
|
"default_app": "jupyterlab",
|
||||||
},
|
},
|
||||||
"services": {
|
"services": {
|
||||||
"cull": {
|
"cull": {
|
||||||
@@ -231,6 +231,8 @@ def update_user_environment(c, config):
|
|||||||
# Set default application users are launched into
|
# Set default application users are launched into
|
||||||
if user_env["default_app"] == "jupyterlab":
|
if user_env["default_app"] == "jupyterlab":
|
||||||
c.Spawner.default_url = "/lab"
|
c.Spawner.default_url = "/lab"
|
||||||
|
elif user_env["default_app"] == "classic":
|
||||||
|
c.Spawner.default_url = "/tree"
|
||||||
|
|
||||||
|
|
||||||
def update_user_account_config(c, config):
|
def update_user_account_config(c, config):
|
||||||
|
|||||||
@@ -8,13 +8,13 @@
|
|||||||
# If a dependency is bumped to a new major version, we should make a major
|
# If a dependency is bumped to a new major version, we should make a major
|
||||||
# version release of tljh.
|
# version release of tljh.
|
||||||
#
|
#
|
||||||
jupyterhub>=4.0.1,<5
|
jupyterhub>=4.0.2,<5
|
||||||
jupyterhub-systemdspawner>=1.0.1,<2
|
jupyterhub-systemdspawner>=1.0.1,<2
|
||||||
jupyterhub-firstuseauthenticator>=1.0.0,<2
|
jupyterhub-firstuseauthenticator>=1.0.0,<2
|
||||||
jupyterhub-nativeauthenticator>=1.2.0,<2
|
jupyterhub-nativeauthenticator>=1.2.0,<2
|
||||||
jupyterhub-ldapauthenticator>=1.3.2,<2
|
jupyterhub-ldapauthenticator>=1.3.2,<2
|
||||||
jupyterhub-tmpauthenticator>=1.0.0,<2
|
jupyterhub-tmpauthenticator>=1.0.0,<2
|
||||||
oauthenticator>=16.0.2,<17
|
oauthenticator>=16.0.4,<17
|
||||||
jupyterhub-idle-culler>=1.2.1,<2
|
jupyterhub-idle-culler>=1.2.1,<2
|
||||||
|
|
||||||
# pycurl is installed to improve reliability and performance for when JupyterHub
|
# pycurl is installed to improve reliability and performance for when JupyterHub
|
||||||
|
|||||||
@@ -8,11 +8,11 @@
|
|||||||
# the requirements-txt-fixer pre-commit hook that sorted them and made
|
# the requirements-txt-fixer pre-commit hook that sorted them and made
|
||||||
# our integration tests fail.
|
# our integration tests fail.
|
||||||
#
|
#
|
||||||
notebook==6.*
|
notebook==7.*
|
||||||
jupyterlab==3.*
|
jupyterlab==4.*
|
||||||
# nbgitpuller for easily pulling in Git repositories
|
# nbgitpuller for easily pulling in Git repositories
|
||||||
nbgitpuller==1.*
|
nbgitpuller==1.*
|
||||||
# jupyter-resource-usage to show people how much RAM they are using
|
# jupyter-resource-usage to show people how much RAM they are using
|
||||||
jupyter-resource-usage==0.7.*
|
jupyter-resource-usage==1.*
|
||||||
# Most people consider ipywidgets to be part of the core notebook experience
|
# Most people consider ipywidgets to be part of the core notebook experience
|
||||||
ipywidgets==8.*
|
ipywidgets==8.*
|
||||||
|
|||||||
Reference in New Issue
Block a user