Skip to main content

NBS Pods

Containerized NBS (NIST Beamline Software) services for beamline simulation.

Container Images

This repository provides containerized NBS services that can be run in two modes:

Demo Mode (Pre-built Images)

Uses pre-built images from GitHub Container Registry (GHCR):

# Images are automatically built and pushed to:
# ghcr.io/xraygui/nbs-pods/bluesky:latest
# ghcr.io/xraygui/nbs-pods/nbs:latest  
# ghcr.io/xraygui/nbs-pods/nbs-gui:latest

Development Mode (Local Builds)

Build images locally for development:

# Build all images
podman-compose -f docker-compose.build.yml build

# Build specific image
podman-compose -f docker-compose.build.yml build nbs

# Rebuild with no caching
podman-compose -f docker-compose.build.yml build --no-cache nbs_gui

Image Dependencies

fedora → bluesky → nbs → nbs-gui

Usage

Demo Mode (Default)

# Start all services with pre-built images
./scripts/deploy.sh start

# Start specific services
./scripts/deploy.sh start gui queueserver

# Start demo services (bluesky-services, gui, queueserver, sim, viewer)
./scripts/deploy.sh demo

Development Mode

# Build images locally first
podman-compose -f docker-compose.build.yml build

# Start specific services in development mode
./scripts/deploy.sh start --dev gui

# Mix normal and development mode
./scripts/deploy.sh start queueserver --dev gui

Stopping Services

# Stop all services
./scripts/deploy.sh stop

# Stop specific services
./scripts/deploy.sh stop gui queueserver

Available Services

  • bluesky-services: Core infrastructure (Redis, MongoDB, Kafka, ZMQ proxies)
  • queueserver: RE Manager for experiment orchestration
  • gui: NBS GUI with display protocol detection (Wayland/X11)
  • sim: NBS simulation services
  • viewer: Additional viewing services (if configured)

Development Workflow

Docker Compose Override System

The deployment system uses Docker Compose's override mechanism to enable flexible configuration:

  1. Base Configuration: Each service has a main docker-compose.yml file with default settings
  2. Override Files: docker-compose.override.yml files (if present) are automatically composed with the main file
  3. Development Files: docker-compose.development.yml files are applied when using the --dev flag

Override Files (docker-compose.override.yml)

Override files allow local customization without modifying the base configuration:

  • Testing: Override environment variables, ports, or volumes for testing
  • Bug Fixes: Temporarily modify service parameters to work around issues
  • GUI Configuration: Especially useful for display protocol issues (Wayland/X11)
  • Local Paths: Mount local directories for configuration or data

Example override file:

services:
  qs-gui:
    volumes:
      - ${HOME}/local-config:/etc/bluesky
    environment:
      - DEBUG=true

Development Files (docker-compose.development.yml)

Development files are applied when using the --dev flag and typically:

  • Switch to Local Images: Use locally built images instead of GHCR images
  • Config Mounts: Mount configuration directories to test config changes
  • Code Mounts: Mount local source code directories for live development
  • Local Installs: Install packages from local paths with pip install -e
  • Debug Settings: Enable debugging, logging, or development-specific configurations

Example development file which only mounts local config directories

services:
  qs-gui:
    volumes:
      - ${NBS_PODS_DIR}/config/bluesky:/etc/bluesky
      - ${BEAMLINE_PODS_DIR}/config/ipython:/usr/local/share/ipython
      - ${NBS_PODS_DIR}/config/tiled:/etc/tiled

Example development file which installs local code

services:
  nbs-sim:
    volumes:
      - ${NBSDIR}:/usr/local/src/xraygui
      - ${BEAMLINE_PODS_DIR}/config/ipython:/usr/local/share/ipython
    command: >
      bash -c "
        pip3 install --no-deps --no-build-isolation -e /usr/local/src/xraygui/nbs-sim/src &&
        nbs-sim --startup-dir /usr/local/share/ipython/profile_default/startup --list-pvs
      "

File Resolution Order

The system resolves compose files in this order:

  1. Base service file (e.g., docker-compose.yml)
  2. Override file (docker-compose.override.yml) - if present
  3. Development file (docker-compose.development.yml) - if --dev flag used

Later files override earlier ones, allowing for flexible configuration management.

Configuration

Images include default configurations in /etc/bluesky and /etc/tiled/profiles which can be overridden with volume mounts in development mode.

Metadata

Release files for nbs-pods 0.2.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nbs-pods 0.2.7
File Size Uploaded Provenance Actions
nbs_pods-0.2.7.tar.gz 205.0 kB With provenance Details for nbs_pods-0.2.7.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for nbs-pods 0.2.7
File Interpreter ABI Platform Actions
nbs_pods-0.2.7-py3-none-any.whl Python 3 none any Details for nbs_pods-0.2.7-py3-none-any.whl

Total release size: 407.4 kB

Release files / nbs_pods-0.2.7.tar.gz

Download URL nbs_pods-0.2.7.tar.gz
Size 205.0 kB
Tags Source
SHA-256 checksum
How to use checksums
2a76a10677f847664e876bc7d6e9d527f3e20d991048fe8208d5988df2c6c4e8
BLAKE2b-256 checksum
How to use checksums
0ca4d74ff9e3ae02d75720f2a10d816ab9a6919f680c677cea322de48a83aa99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Release files / nbs_pods-0.2.7-py3-none-any.whl

Download URL nbs_pods-0.2.7-py3-none-any.whl
Size 202.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7c0aaae6947dd0983941a3ad22cc01258d4f3b69c2ab2fcf69059dbbda9b4c99
BLAKE2b-256 checksum
How to use checksums
8fe7621bd557711835b22102338b0a013ef20352a8de68b3bdd70d75f5939825
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

Security for nbs-pods 0.2.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for nbs_pods-0.2.7.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page