Upstream docs: https://github.com/Start9Labs/start9-pages-startos
Start9 Pages is a Start9-developed service. This document describes its behavior on StartOS.
Start9 Pages is a purpose-built static website hosting service for StartOS. It integrates directly with File Browser and Nextcloud to serve static websites from files you've already uploaded. Each website gets its own network interface with Tor, LAN, and custom domain support.
- Image and Container Runtime
- Volume and Data Layout
- Installation and First-Run Flow
- Configuration Management
- Network Access and Interfaces
- Actions (StartOS UI)
- Backups and Restore
- Health Checks
- Dependencies
- Limitations and Differences
- What Is Unchanged from Upstream
- Contributing
- Quick Reference for AI Consumers
| Property | Value |
|---|---|
| Image | Custom Dockerfile (nginx with Brotli compression) |
| Architectures | x86_64, aarch64 |
| Entrypoint | nginx -g 'daemon off;' |
| Volume | Mount Point | Contents |
|---|---|---|
main |
/data |
Website configuration (store.json) |
Website files are not stored in this volume — they are read directly from File Browser's data volume or Nextcloud's nextcloud volume via dependency mounts.
On install:
- A critical setup task is created prompting the user to run the Manage Websites action if no websites are configured
No credentials are generated — the service is ready to use once at least one website is configured.
| StartOS-Managed | User-Managed |
|---|---|
| Nginx Brotli compression (level 5) | Website list (via Manage Websites action) |
| Nginx gzip compression (level 6, fallback) | Website names, sources, and folder paths |
| Static asset caching (30 days for CSS/JS/images/fonts) | |
| Security headers (X-Frame-Options, X-Content-Type-Options, Referrer-Policy, X-XSS-Protection) | |
| Default server returns 444 (silently closes unknown hosts) | |
| Auto-assigned ports (starting at 8000) |
Interfaces are dynamic — one per configured website:
| Interface | ID | Type | Port | Protocol | Description |
|---|---|---|---|---|---|
| (per website) | <port> |
ui | 8000+ (auto-assigned) | HTTP | Each website gets its own interface and port |
Ports are auto-assigned starting at 8000. Each website gets its own set of addresses (LAN, Tor, custom domains).
Add, edit, and remove static websites.
| Property | Value |
|---|---|
| Name | Manage Websites |
| Purpose | Add, edit, and remove hosted websites |
| Visibility | Enabled |
| Availability | Any (running or stopped) |
| Inputs | List of websites, each with: Name (text, required), Source (union: Filebrowser or Nextcloud), Folder Location (text, required), User (text, Nextcloud only, default: "admin"). Port is hidden/auto-assigned. |
| Outputs | Website list saved to store.json; service restarts to apply nginx configuration |
Websites are served if they contain index.html, index.htm, or index. Directory listing is enabled for folders without an index file.
- Backed up:
mainvolume (website configuration instore.json) - Not backed up: Website files (stored in File Browser or Nextcloud and backed up with those services)
- Restore behavior: Configuration is restored in place; service resumes serving previously configured websites
| Check | Daemon | Method | Success Condition |
|---|---|---|---|
| Hosting | primary | Port listening (80) | Port 80 responds |
The health check monitors nginx availability, not individual websites.
| Property | Value |
|---|---|
| Service | File Browser |
| Required/Optional | Optional — only required when any website uses the Filebrowser source |
| Health checks | None (kind: exists) |
| Mounted volumes | data volume mounted at /mnt/filebrowser (read-only) |
| Purpose | Provides static website files for hosting |
| Property | Value |
|---|---|
| Service | Nextcloud |
| Required/Optional | Optional — only required when any website uses the Nextcloud source |
| Health checks | None (kind: exists) |
| Mounted volumes | nextcloud volume mounted at /mnt/nextcloud (read-only) |
| Purpose | Provides static website files for hosting; files accessed at data/<user>/files/<path> |
You need at least one of File Browser or Nextcloud installed to host websites.
- Static sites only — no server-side processing (PHP, Node.js, etc.)
- Requires external file storage — must use File Browser or Nextcloud for website files
- No build process — sites must be pre-built (HTML/CSS/JS ready to serve)
- No per-site SSL certificates — TLS is terminated by StartOS at the network level
This is a Start9-developed service with no upstream equivalent. All features are documented above.
See CONTRIBUTING.md for build instructions and development workflow.
package_id: start9-pages
image: custom (nginx + brotli)
architectures: [x86_64, aarch64]
volumes:
main: /data
ports:
dynamic: 8000+ (one per website)
dependencies:
- filebrowser (optional, mounts data volume read-only)
- nextcloud (optional, mounts nextcloud volume read-only)
startos_managed_env_vars: []
actions:
- manage