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.0.tar.gz (191.0 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.0-py3-none-any.whl (192.5 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for tutor_contrib_maintenance-1.0.0.tar.gz
Algorithm Hash digest
SHA256 601c87dd659ffd809cfc8c339ef4dbdcf47f3628e6e13b0c87700b5be5ea8ced
MD5 cffbc606078758091f3e2c186c3ebe3d
BLAKE2b-256 e2677c117b983d35f5f03308661aeaa3873e65c65dc7171447c736de542a0054

See more details on using hashes here.

Provenance

The following attestation bundles were made for tutor_contrib_maintenance-1.0.0.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.0-py3-none-any.whl.

File metadata

File hashes

Hashes for tutor_contrib_maintenance-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3382a8b83bb917f07a605915765eb3396a0d80484456290fe1e68d2d536c706c
MD5 4f07dd4b2c766e3a181cbaf3816471d9
BLAKE2b-256 01d4ab3c4104af57d99350d153162972bd7d13974d06dd3c27034cd2c197d0e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for tutor_contrib_maintenance-1.0.0-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

1.0.1

2 files

This release

1.0.0 This release

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