Skip to main content

PyPI CI License

A Tutor plugin that puts a “down for maintenance” page in front of an Open edX platform, on demand, without needing to know every domain your other Tutor plugins have registered with Caddy.

Installation

pip install git+https://github.com/Abstract-Tech/tutor-contrib-maintenance

How it works

The plugin ships a small Caddy-based static-site image (its own Caddyfile, maintenance.html, and style.css) that runs alongside the platform as a maintenance service.

tutor maintenance on and tutor maintenance off don’t patch the main apps/caddy/Caddyfile at all. Instead they hot-swap the running Caddy config through its admin API (http://127.0.0.1:2019, on by default inside the caddy container):

  • on replaces Caddy’s routes with a single catch-all reverse_proxy to the maintenance container, keeping whatever listen addresses are already configured. Because it has no host or path matcher, it blankets every domain Caddy serves – LMS, CMS, and any host added by any other plugin – with no need to know their names, and takes effect instantly with no restart.

  • off re-adapts apps/caddy/Caddyfile on disk and reloads that. The file on disk is always the source of truth, so there’s no separate state to keep in sync.

This only applies in tutor local (production-like) mode, since that’s where Caddy fronts the platform. tutor dev mode has no Caddy – each service is published on its own host port – so tutor maintenance on/off doesn’t apply there; the maintenance container is still started (see below) so you can preview the page directly.

Usage

tutor plugins enable maintenance
tutor images build maintenance
tutor images push maintenance
tutor local launch

Toggle maintenance mode:

tutor maintenance on

# ... perform maintenance ...

tutor maintenance off

Preview the maintenance page directly in tutor dev mode at http://localhost:8090 (published by the plugin’s dev docker-compose patch, chosen to avoid clashing with the other ports Tutor’s core and bundled plugins use in dev mode).

Configuration

Setting

Default

Description

MAINTENANCE_DOCKER_IMAGE

ghcr.io/abstract-tech/tutor-maintenance:{version}

Image tag built/pulled/pushed by tutor images.

MAINTENANCE_PAGE_TITLE

Down for maintenance

<title> of the maintenance page.

MAINTENANCE_PAGE_HEADING

We'll be right back

On-page <h1>.

MAINTENANCE_PAGE_DESCRIPTION

This site is currently undergoing scheduled maintenance...

<meta name="description"> and body text.

MAINTENANCE_FAVICON_URL

assets/favicon.ico

Favicon URL, relative to the page. Override with any URL to skip rebuilding the image.

MAINTENANCE_BACKGROUND_URL

background.jpg

Background image URL, relative to assets/style.css. Same override behavior as the favicon.

tutor config save --set MAINTENANCE_PAGE_TITLE="We'll be back soon"
tutor images build maintenance
tutor local stop maintenance && tutor local start -d maintenance

The maintenance page’s templates live at tutormaintenance/templates/maintenance/build/maintenance/maintenance.html, and its stylesheet, favicon, and background image under assets/. After editing them (or any MAINTENANCE_PAGE_* setting), you must re-render, rebuild, and recreate the container for the change to take effect – a plain tutor local restart maintenance reuses the already-running container’s old image and won’t pick up the rebuild.

Development

git clone https://github.com/Abstract-Tech/tutor-contrib-maintenance
# Create a virtual environment and activate it
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
pip install -e ".[dev]"

License

This software is licensed under the terms of the AGPLv3.

Download files

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

Source Distribution

tutor_contrib_maintenance-1.0.1.tar.gz (191.6 kB view details)

Uploaded Source

Built Distribution

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

tutor_contrib_maintenance-1.0.1-py3-none-any.whl (193.0 kB view details)

Uploaded Python 3

File details

Details for the file tutor_contrib_maintenance-1.0.1.tar.gz.

File metadata

File hashes

Hashes for tutor_contrib_maintenance-1.0.1.tar.gz
Algorithm Hash digest
SHA256 d1e65253ff2448d3651cf35cf2c7c0ea81fbbcda703b12c330376d1ddd5b2419
MD5 4889fd83b2e6632cbe04ff8c6a0b38a6
BLAKE2b-256 3707749e95597068b68fe28f9017085da7a1c525b28479177c83453294231128

See more details on using hashes here.

Provenance

The following attestation bundles were made for tutor_contrib_maintenance-1.0.1.tar.gz:

Publisher: publish-pypi.yml on Abstract-Tech/tutor-contrib-maintenance

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

File details

Details for the file tutor_contrib_maintenance-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for tutor_contrib_maintenance-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1a043e4cddbf29d61dca9db104aa76bf1502a331019003a668268a6d300a31b9
MD5 05b8f60384bfd96e4ab439617c9d08d8
BLAKE2b-256 4184ce03c7b5ab6656b2ceb1e14b0e2cfef41fb65e974db60a950a7710e55802

See more details on using hashes here.

Provenance

The following attestation bundles were made for tutor_contrib_maintenance-1.0.1-py3-none-any.whl:

Publisher: publish-pypi.yml on Abstract-Tech/tutor-contrib-maintenance

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

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 files

1.0.0

2 files

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