Document Docker deployment and Meow expiration; bump to v1.1.0

This commit is contained in:
2026-08-22 21:50:34 +10:00
parent 6f2b5c9e2b
commit 9b57ba83ab
+78 -1
View File
@@ -25,13 +25,19 @@ A self-hosted digital notice board / signage system built on ASP.NET Core 8, des
- **Live Updates** — display polls for changes every 30 seconds - **Live Updates** — display polls for changes every 30 seconds
- **Full-Screen Display** — hidden cursor, clock overlay, progress bar - **Full-Screen Display** — hidden cursor, clock overlay, progress bar
- **Smooth Transitions** — fade or slide transitions - **Smooth Transitions** — fade or slide transitions
- **Meow Expiration** — give any slide an expiry date/time; it's automatically skipped on displays afterwards (and stays in the library, unedited, in case you need it again)
- **Docker Support** — run via `docker compose up` as an alternative to IIS, with volumes for the database and uploads
## Requirements ## Requirements
**IIS (Windows Server):**
- Windows Server 2019 or 2022 - Windows Server 2019 or 2022
- IIS with ASP.NET Core Hosting Bundle - IIS with ASP.NET Core Hosting Bundle
- .NET 8 SDK (for building) / .NET 8 Runtime (for hosting) - .NET 8 SDK (for building) / .NET 8 Runtime (for hosting)
**Docker (any host):**
- Docker Engine + Docker Compose — see [Docker Deployment](#docker-deployment) below
## Quick Start ## Quick Start
### 1. Install Prerequisites ### 1. Install Prerequisites
@@ -73,6 +79,62 @@ The SQLite database (`noticeboard.db`) is created automatically on first start w
| `http://server/frontofhouse` | Front of House display | | `http://server/frontofhouse` | Front of House display |
| `http://server/staffroom` | Staff Room display | | `http://server/staffroom` | Staff Room display |
## Docker Deployment
An alternative to IIS — runs anywhere Docker does (Linux, Windows with WSL2 backend, Synology/QNAP NAS, a Raspberry Pi, etc.).
### 1. Build and run
```bash
git clone https://gitea.hideawaygaming.com.au/jessikitty/ScratchingPost.git
cd ScratchingPost
docker compose up -d --build
```
That's it — the container listens on port **8080**, so open `http://server:8080`.
### 2. What the compose file sets up
`docker-compose.yml` builds the image from the included `Dockerfile` and wires up two bind-mounted folders next to the compose file so your data survives container rebuilds/updates:
| Host path | Container path | Purpose |
|-----------|-----------------|---------|
| `./data` | `/data` | `noticeboard.db` (SQLite) |
| `./uploads` | `/app/wwwroot/uploads` | Images uploaded via TinyMCE, plus uploaded ICS files |
Both folders are created automatically on first run.
### 3. Configuration
Same settings as IIS, just as environment variables in `docker-compose.yml` (nested keys use a double underscore):
```yaml
environment:
- DataDirectory=/data
- Admin__Username=admin
- Admin__Password=ScratchingPost2026!
- MaxUploadSizeMB=20
```
**Change the admin password before exposing this beyond your local network.**
### 4. Updating
```bash
git pull
docker compose up -d --build
```
The database and uploads persist across rebuilds since they live in the bind-mounted `./data` and `./uploads` folders, not inside the image. On startup the app checks the SQLite schema and adds any new columns it needs (e.g. the `ExpiresAt` column below) automatically — no manual migration step.
### 5. Reverse proxy / HTTPS
The container serves plain HTTP on 8080. For a public-facing deployment, put it behind a reverse proxy (Caddy, nginx, Traefik) that terminates HTTPS and forwards to `scratchingpost:8080`.
### Running IIS and Docker side by side
The IIS deployment and the Docker image are built from the same codebase and don't share a database or uploads folder by default — they're independent instances unless you point them at the same SQLite file and uploads directory yourself.
## Configuration ## Configuration
Edit `appsettings.json`: Edit `appsettings.json`:
@@ -92,6 +154,16 @@ Edit `appsettings.json`:
The display page polls for changes every 30 seconds, so updates appear on devices without restarting. The display page polls for changes every 30 seconds, so updates appear on devices without restarting.
## Meow Expiration
Any Meow can be given an **Expires** date/time in its editor (under **Scheduling**). Once that time passes:
- The Meow is automatically skipped by every Kitten it's assigned to — no manual removal needed
- It stays fully intact in **Meows** (with a red **Expired** badge) so it can be re-used or have its expiry pushed back later
- Nothing is deleted — expiry only affects playback, not the stored slide
Leave it blank for a Meow that should run indefinitely. This is checked using the server's local clock, so make sure the server's time zone is set correctly.
## Display Controls ## Display Controls
Keyboard shortcuts on display pages (useful during setup): Keyboard shortcuts on display pages (useful during setup):
@@ -107,7 +179,8 @@ Keyboard shortcuts on display pages (useful during setup):
- **Database**: SQLite (`noticeboard.db`) — created automatically, zero config - **Database**: SQLite (`noticeboard.db`) — created automatically, zero config
- **Uploads**: `wwwroot/uploads/` — images uploaded via TinyMCE or the file upload API - **Uploads**: `wwwroot/uploads/` — images uploaded via TinyMCE or the file upload API
- Both need write permissions for the IIS App Pool identity - On IIS, both need write permissions for the App Pool identity
- On Docker, both live in bind-mounted host folders (`./data`, `./uploads`) — see [Docker Deployment](#docker-deployment)
## TinyMCE Note ## TinyMCE Note
@@ -133,9 +206,13 @@ ScratchingPost/
│ └── uploads/ # User-uploaded images │ └── uploads/ # User-uploaded images
├── appsettings.json # Configuration ├── appsettings.json # Configuration
├── web.config # IIS configuration ├── web.config # IIS configuration
├── Dockerfile # Container build (alternative to IIS)
├── docker-compose.yml # Container run config (ports, volumes)
├── .dockerignore
└── NoticeBoard.csproj # Project file └── NoticeBoard.csproj # Project file
``` ```
## Version History ## Version History
- **v1.1.0** — Docker deployment (`Dockerfile` + `docker-compose.yml`, configurable data directory, volume-backed DB/uploads), Meow expiration (`ExpiresAt` field, automatic playback filtering, auto-migrating column for existing databases)
- **v1.0.0** — Initial release: WYSIWYG slides, embed, ICS calendar, device playlists, drag-and-drop ordering, live polling, IIS-ready deployment - **v1.0.0** — Initial release: WYSIWYG slides, embed, ICS calendar, device playlists, drag-and-drop ordering, live polling, IIS-ready deployment