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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tutor_contrib_maintenance-1.0.1.tar.gz.
File metadata
- Download URL: tutor_contrib_maintenance-1.0.1.tar.gz
- Upload date:
- Size: 191.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1e65253ff2448d3651cf35cf2c7c0ea81fbbcda703b12c330376d1ddd5b2419
|
|
| MD5 |
4889fd83b2e6632cbe04ff8c6a0b38a6
|
|
| BLAKE2b-256 |
3707749e95597068b68fe28f9017085da7a1c525b28479177c83453294231128
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tutor_contrib_maintenance-1.0.1.tar.gz -
Subject digest:
d1e65253ff2448d3651cf35cf2c7c0ea81fbbcda703b12c330376d1ddd5b2419 - Sigstore transparency entry: 2767457028
- Sigstore integration time:
-
Permalink:
Abstract-Tech/tutor-contrib-maintenance@1655c203494ebe85d8f9bcf0db9b99da8810cc4a -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/Abstract-Tech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@1655c203494ebe85d8f9bcf0db9b99da8810cc4a -
Trigger Event:
push
-
Statement type:
File details
Details for the file tutor_contrib_maintenance-1.0.1-py3-none-any.whl.
File metadata
- Download URL: tutor_contrib_maintenance-1.0.1-py3-none-any.whl
- Upload date:
- Size: 193.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a043e4cddbf29d61dca9db104aa76bf1502a331019003a668268a6d300a31b9
|
|
| MD5 |
05b8f60384bfd96e4ab439617c9d08d8
|
|
| BLAKE2b-256 |
4184ce03c7b5ab6656b2ceb1e14b0e2cfef41fb65e974db60a950a7710e55802
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tutor_contrib_maintenance-1.0.1-py3-none-any.whl -
Subject digest:
1a043e4cddbf29d61dca9db104aa76bf1502a331019003a668268a6d300a31b9 - Sigstore transparency entry: 2767457415
- Sigstore integration time:
-
Permalink:
Abstract-Tech/tutor-contrib-maintenance@1655c203494ebe85d8f9bcf0db9b99da8810cc4a -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/Abstract-Tech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@1655c203494ebe85d8f9bcf0db9b99da8810cc4a -
Trigger Event:
push
-
Statement type: