Skip to main content

An example for Jupyter NORTH tool (Jupyter docker image).

Project description

NORTH Jupyter tool

nomad-north-jupyter is a NOMAD plugin and can be used along with other NOMAD plugins, in nomad-distro-dev, nomad-distro-template, and in NOMAD production instance. Adding it as a plugin will make the jupyter_north_tool available in the NORTH tools registry of the NOMAD Oasis environment.

The plugin contains the NORTH tool configuration and a Docker image for a Jupyter-based tool in the NOMAD NORTH (NOMAD Oasis Remote Tools Hub) environment. The nomad-north-jupyter image from this plugin provides the default base image for Dockerfile which is used as a basis to define custom Jupyter NORTH tools.

Quick start

The jupyter_north_tool, a NORTH tool instance provided by this plugin, offers a containerized JupyterLab environment for interactive analysis.

In the following sections, we will cover:

  1. Building and testing the Docker image locally
  2. Using nomad-north-jupyter as a base image for custom NORTH tools
  3. Adding the nomad-north-jupyter plugin to NOMAD
  4. Adding nomad-north-jupyter image in a NOMAD Oasis (not recommended)
  5. Documentation
  6. Main contributors

Building and testing

Build the Docker image locally:

docker build -f src/nomad_north_jupyter/north_tools/jupyter_north_tool/Dockerfile \
    -t ghcr.io/fairmat-nfdi/nomad-north-jupyter:latest .

Test the image:

docker run -p 8888:8888 ghcr.io/fairmat-nfdi/nomad-north-jupyter:latest

Access JupyterLab at http://localhost:8888.

Using nomad-north-jupyter as a base image for custom NORTH tools

This image is designed to be used as a base for custom NOMAD NORTH Jupyter tools. When extending this image in your plugin's Dockerfile created from cookiecutter-nomad-plugin, keep the following in mind:

Package management

Both uv and pip are available as package managers in the image. Both install and uninstall packages in the Conda environment, so you can use either one of them to manage your Python dependencies.

Example using uv:

RUN uv pip install numpy pandas scipy

Example using pip:

RUN pip install --no-cache-dir matplotlib seaborn

Port and user configuration

Like other Jupyter notebook images, port 8888 is exposed for JupyterLab access. The default user is ${NB_USER} (usually jovyan), and you should switch to this user when installing packages or copying files to ensure proper permissions.

Fixing permissions

After customizing the base image (e.g., installing additional packages or adding files), you may need to fix file permissions to avoid permission issues when running the container. Add the following lines at the end of your Dockerfile after all customizations:

COPY --chown=${NB_USER}:${NB_GID} . ${HOME}/${PLUGIN_NAME}
RUN fix-permissions "/home/${NB_USER}" \
    && fix-permissions "${CONDA_DIR}"

Adding the nomad-north-jupyter plugin to NOMAD

Currently, NOMAD has two distinct flavors (NOMAD Oasis and NOMAD development environment) that are relevant depending on your role as an user.

Adding the nomad-north-jupyter plugin in your NOMAD Oasis

The plugin nomad-north-jupyter is a default member of the plugin group in NOMAD Oasis. This facilitates NOMAD to autonomously discover and integrate the NORTHTool via NorthToolEntryPoint defined in the plugin. Later, the tool will be available in the NORTH tools registry of the NOMAD Oasis environment.

Adding nomad-north-jupyter plugin in your local NOMAD installation

We now recommend using the dedicated nomad-distro-dev to facilitate NOMAD plugin development. To add nomad-north-jupyter to your local development environment, add it as a dependency in pyproject.toml. NOMAD will automatically discover NORTHToolEntryPoint instances (e.g., north_tool_entry_point) defined in nomad-north-jupyter. To replace or modify the NORTH tool configuration (for instance, changing the image or image version), you can adjust the entry point configuration in your nomad.yaml file.

Publish note

In our Python package publishing workflow, before building the package, we update the image tag in the NORTHTool entry point to the latest release version of the image (e.g., v0.1.5), and then publish the package to PyPI.

However, the updated image tag in NORTHTool is not pushed back to the GitHub repository. Therefore, the image tag in the GitHub repository always remains set to main, even when you check out a specific release tag. For this reason, we recommend installing the plugin from PyPI, where the entry point always contains the correct image tag corresponding to the release.

If you download a ZIP file of a specific release from GitHub, the image tag in the entry point will still be set to main, which is not correct. In that case, you can either manually update the image tag in the entry point to the correct release version (e.g., v0.1.5), or install the plugin directly from PyPI.

Reconfigure existing NORTH tool entry point

The image shipped with nomad-north-jupyter is a generic Jupyter container that may be too simplistic for your use case. In that case, you can change to a different image to use in the container. A NORTHTool entry point can be reconfigured via the nomad.yaml configuration file of your NOMAD Oasis instance (you can learn more about this reconfiguration and the merge strategy in the NOMAD docs). Hence, if you have the nomad-north-jupyter plugin installed, you can do so by adjusting the entry point configuration in your nomad.yaml file:

plugins:
  entry_points:
    options:
      nomad_north_jupyter.north_tools.jupyter_north_tool:north_tool_entry_point:
        north_tool:
          image: ghcr.io/fairmat-nfdi/nomad-north-jupyter:<another_tag>
          display_name: "renamed jupyter tool"

Adding nomad-north-jupyter image in a NOMAD Oasis (not recommended)

[!WARNING] We strongly recommend integrating nomad-north-jupyter into NOMAD as a plugin. The following approach is only recommended if you have an existing NOMAD Oasis instance that you do not want to rebuild, but still want to add the Jupyter image to the running NORTH service.

If you cannot use the plugin approach, you can add the nomad-north-jupyter image to your NORTH service by editing the nomad.yaml file in a nomad-distro-template instance. Define the corresponding NORTH tool in nomad.yaml as shown below (see the full NORTH tool configuration in the NOMAD documentation):

# Not a recommended way
north:
  jupyterhub_crypt_key: "978bfb2e13a8448a253c629d8dd84ffsd587f30e635b753153960930cad9d36d"
  tools:
    options:
      jupyter:
        image: ghcr.io/fairmat-nfdi/nomad-north-jupyter:latest
        description: "### **Jupyter Notebook**: The Classic Notebook Interface"
        file_extensions:
          - ipynb
        icon: jupyter_logo.svg
        image_pull_policy: Always
        maintainer:
          - email: fairmat@physik.hu-berlin.de
            name: NOMAD Authors
        mount_path: /home/jovyan
        path_prefix: lab/tree
        privileged: false
        short_description: ""
        with_path: true

Documentation

For comprehensive documentation on creating and managing NORTH tools, including detailed information on topics such as:

  • Entry point configuration and NORTHTool API
  • Docker image structure and best practices
  • Dependency management

See the NOMAD NORTH Tools documentation.

[!NOTE] This NOMAD plugin was generated with Cookiecutter along with @nomad's cookiecutter-nomad-plugin template.

Main contributors

Name E-mail
NOMAD Authors fairmat@physik.hu-berlin.de

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nomad_north_jupyter-0.2.2.tar.gz (109.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nomad_north_jupyter-0.2.2-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file nomad_north_jupyter-0.2.2.tar.gz.

File metadata

  • Download URL: nomad_north_jupyter-0.2.2.tar.gz
  • Upload date:
  • Size: 109.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for nomad_north_jupyter-0.2.2.tar.gz
Algorithm Hash digest
SHA256 bdbd93fa52c05a62fce2d2a293e87aab3a9fe69d84674ed3db4c2755ebb745f6
MD5 620fed720dbe1d65e8a71db498997470
BLAKE2b-256 d5ebab94fc8300682fa68c241048e0247472fc57c4f295df8a3e7c8914e8e66e

See more details on using hashes here.

Provenance

The following attestation bundles were made for nomad_north_jupyter-0.2.2.tar.gz:

Publisher: publish.yml on FAIRmat-NFDI/nomad-north-jupyter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nomad_north_jupyter-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for nomad_north_jupyter-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0436508238b78ed41a5855380dd658a4c786f2cea4b0c86cec03266ce2f11771
MD5 6245154f2087284696649673f96f4abe
BLAKE2b-256 3566429e3be8650a72b13b1e0285d8d57127024c77aeed454d5be5fc043d517a

See more details on using hashes here.

Provenance

The following attestation bundles were made for nomad_north_jupyter-0.2.2-py3-none-any.whl:

Publisher: publish.yml on FAIRmat-NFDI/nomad-north-jupyter

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page