Upstream docs: https://ghost.org/docs/
Everything not listed in this document should behave the same as upstream Ghost. If a feature, setting, or behavior is not mentioned here, the upstream documentation is accurate and fully applicable.
Ghost is a professional publishing platform for creating blogs, newsletters, and membership sites. It provides a modern editor, subscription management, and flexible content APIs.
- Image and Container Runtime
- Volume and Data Layout
- Installation and First-Run Flow
- Configuration Management
- Network Access and Interfaces
- Actions (StartOS UI)
- Dependencies
- Backups and Restore
- Health Checks
- Limitations and Differences
- What Is Unchanged from Upstream
- Contributing
- Quick Reference for AI Consumers
| Property | Value |
|---|---|
| Ghost Image | ghost (upstream, alpine variant) |
| MySQL Image | mysql (upstream) |
| Architectures | x86_64, aarch64 |
| Runtime | Two containers (Ghost + MySQL) |
StartOS runs Ghost with a co-located MySQL database. Both containers are managed automatically; users do not interact with MySQL directly.
| Volume | Mount Point | Purpose |
|---|---|---|
content |
/var/lib/ghost/content |
Themes, images, uploads, and content |
config |
— | Reserved for configuration |
mysql |
/var/lib/mysql |
MySQL database storage |
startos |
— | StartOS-managed state (store.json) |
StartOS-specific files:
store.json— contains primary URL, database password, tinfoil mode, and SMTP settings
| Step | Upstream | StartOS |
|---|---|---|
| Database setup | Manual MySQL/SQLite configuration | Automatic MySQL provisioning |
| Initial URL | Set in config file | Auto-selected on first install; changeable via "Set Primary URL" action |
| Owner account | Create via /ghost/#/setup/ |
Same as upstream |
Key differences:
- Database is automatically configured — no manual setup required
- On first install, a
.localURL is automatically selected as the primary URL - If the selected primary URL is later removed, a critical task prompts the user to select a new one
- First-time MySQL initialization can take several minutes on slower hardware
- Visit
/ghost/path to create your owner account (same as upstream)
| Variable | Upstream Default | StartOS Value |
|---|---|---|
NODE_ENV |
development |
production |
database__client |
mysql |
mysql (fixed) |
database__connection__host |
Configurable | localhost (fixed) |
database__connection__password |
Configurable | Auto-generated |
database__connection__database |
Configurable | ghost (fixed) |
privacy__useTinfoil |
false |
true on fresh install; configurable via action |
privacy__useUpdateCheck |
true |
false (forced) |
security__staffDeviceVerification |
true |
false (forced) |
referrerPolicy |
origin-when-crossorigin |
no-referrer (forced) |
url |
Configurable | Selected via action |
| Feature | Upstream Support | StartOS |
|---|---|---|
| External database | Supported | Not available |
| Storage adapters | S3, Cloudinary, Azure, etc. | Local only |
| Cache adapters | Redis, etc. | In-memory only |
| Custom content paths | Configurable | Fixed |
| Image optimization | Configurable | Default settings |
| Logging configuration | Configurable | stdout (default) |
| Interface | Port | Protocol | Purpose |
|---|---|---|---|
| Primary UI | 2368 | HTTP | Ghost publishing platform |
| Admin UI | 2368 | HTTP | Available at /ghost/ path |
Access methods (StartOS 0.4.0):
- LAN IP with unique port
<hostname>.localwith unique port- Tor
.onionaddress - Custom domains (if configured)
| Property | Value |
|---|---|
| ID | set-primary-url |
| Name | Set Primary Url |
| Visibility | Enabled |
| Availability | Any status |
| Purpose | Select which URL Ghost uses for links and invites |
How it works: Presents a dropdown of all available URLs for your Ghost instance (LAN, Tor, custom domains). Ghost uses this URL when generating links in emails, RSS feeds, and the admin panel.
| Property | Value |
|---|---|
| ID | manage-smtp |
| Name | Configure SMTP |
| Visibility | Enabled |
| Availability | Any status |
| Purpose | Enable email sending for invites and notifications |
Options:
- Disabled — No email sending
- System SMTP — Use StartOS system SMTP server (if configured)
- Custom — Enter your own SMTP credentials
| Property | Value |
|---|---|
| ID | reset-password |
| Name | Reset Owner Password |
| Visibility | Enabled |
| Availability | Only running |
| Purpose | Generate a new password for the site owner account |
How it works: Generates a random 22-character password, hashes it with bcrypt using the Ghost container, and updates the owner's record in MySQL. The account status is also reset to active in case it was locked. Other staff accounts are not affected. The new password is displayed as a masked, copyable value.
| Property | Value |
|---|---|
| ID | set-tinfoil |
| Name | Enable Tinfoil Mode / Disable Tinfoil Mode |
| Visibility | Enabled |
| Availability | Any status |
| Purpose | Toggle privacy protection mode |
What Tinfoil Mode disables:
- Gravatar (profile images)
- Update checks (already disabled on StartOS)
- RPC pinging
- Structured data
- Third-party integrations
Warning: Enabling Tinfoil Mode may prevent certain parts of the Ghost UI from rendering properly.
None. Ghost runs with its own co-located MySQL database.
Database: Uses mysqldump/mysql for MySQL instead of raw volume rsync. The dump is written directly to the backup target.
Volumes backed up via rsync:
contentvolume — themes, images, uploadsconfigvolume — configuration datastartosvolume — StartOS state
NOT included in backup:
mysqlvolume — Not rsynced directly; database is captured viamysqldump
Restore behavior:
- All content, settings, and accounts are restored
- Database is rebuilt from dump via
mysqlimport
| Check | Display Name | Method |
|---|---|---|
| MySQL daemon | Ghost Database | SELECT 1 via TCP to 127.0.0.1 |
| Ghost daemon | Ghost Server | MySQL query for db_hash in settings table |
| Admin Portal | Admin Portal | Shows which URL to use for admin login |
| Member/Subscriber Login | Member/Subscriber Login | Reports whether SMTP is configured |
Admin Portal: Always displays success with the primary URL where admin login will work. Ghost enforces origin checks, so login only succeeds at the configured primary URL. Use the "Set Primary URL" action to change it.
Member/Subscriber Login: Shows success when SMTP is configured, or disabled with guidance to configure SMTP. Ghost uses magic-link (email-based) authentication for members, so SMTP is required for member/subscriber logins via the Portal.
Startup sequence:
mysqldaemon — starts MySQL via Docker entrypoint (handles first-time initialization)ghostdaemon — starts Ghost (waits for MySQL to be ready)admin-portalandmembershealth checks — run after Ghost is ready
Messages:
- MySQL loading (fresh install): "Initializing fresh database. This can take a while..."
- MySQL loading (restart): "Initializing database..."
- MySQL success: "The database is ready"
- Ghost loading: "Initializing fresh schema. This can take a while..."
- Ghost success: "Ghost is ready"
- Ghost error: "Ghost encountered an error"
- No ActivityPub integration — Ghost's federation features are not available on StartOS
- No external database — cannot connect to remote MySQL servers
- Local storage only — S3, Cloudinary, and other storage adapters not available
- In-memory cache only — Redis and other cache adapters not available
- Update checks disabled —
privacy__useUpdateCheckforced tofalse - Staff device verification disabled —
security__staffDeviceVerificationforced tofalsefor compatibility - Strict referrer policy —
referrerPolicyset tono-referrerfor privacy - URL via action — primary URL selected through StartOS action instead of config file
- Single-origin admin login — Ghost enforces that admin login requests come from the configured primary URL; other URLs will fail with an origin mismatch error
- Member login requires SMTP — Ghost uses magic-link (email) authentication for members/subscribers; without SMTP configured, they cannot log in
- Full Ghost publishing experience (posts, pages, tags)
- Modern content editor
- Membership and subscription management
- Newsletter functionality (requires SMTP configuration)
- Theme system and customization
- Content API and Admin API
- SEO features
- Social integrations
- Import/export functionality
- Multi-author support
- Role-based permissions
- All admin panel features at
/ghost/
See CONTRIBUTING.md for build instructions and development workflow.
package_id: ghost
image: ghost (alpine), mysql
architectures: [x86_64, aarch64]
volumes:
content: /var/lib/ghost/content
config: (reserved)
mysql: /var/lib/mysql
startos: (StartOS state)
ports:
ui: 2368
dependencies: none
startos_managed_env_vars:
- NODE_ENV
- url
- database__client
- database__connection__host
- database__connection__password
- database__connection__database
- privacy__useTinfoil
- privacy__useUpdateCheck
- security__staffDeviceVerification
- referrerPolicy
- mail__transport
- mail__options__host
- mail__options__port
- mail__options__auth__user
- mail__options__auth__pass
- mail__options__secure
- mail__from
actions:
- set-primary-url
- manage-smtp
- set-tinfoil
- reset-password