> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stackshift.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy a native Ghost site

> Create a fresh Ghost publication on StackShift Managed infrastructure or a connected node, follow provisioning, and complete owner setup securely in Ghost.

<Warning>
  **Live with caveats.** This area is real and usable, but the docs intentionally call out operational or UX limits that still matter.
</Warning>

## Goal

Provision a production-ready fresh Ghost installation without a repository, template, Dockerfile, or external database.

## Prerequisites

* An Ignite or higher plan for StackShift Managed placement, or a connected node with 1 GB available
* DNS already pointing to StackShift if you want to attach a custom domain during creation

## Workflow

<Steps>
  <Step>
    Open Projects, choose Create project, then choose Ghost Site under Core Resources.
  </Step>

  <Step>
    Enter the publication name, optionally enter a custom domain, and select a tested Ghost runtime.
  </Step>

  <Step>
    Choose StackShift Managed or select an eligible connected node.
  </Step>

  <Step>
    Review the runtime, domain, placement, managed mail, and owner-setup handoff.
  </Step>

  <Step>
    Choose Create Ghost Site and wait while the project operation moves to completed.
  </Step>

  <Step>
    Open Ghost Admin and finish the owner form at `/ghost/`.
  </Step>
</Steps>

## Creation fields

* Publication name is required and becomes the StackShift project name.
* Tested runtime is required; the wizard defaults to the catalog’s default release.
* Custom domain is optional. When omitted, StackShift generates a domain from the project slug or subdomain.
* StackShift Managed is available to Ignite, Pro, and Enterprise accounts.
* Connected node requires a specific eligible node in the current creation UI.
* Transactional mail is enabled by default in the dashboard flow.

## Provisioning sequence

The lifecycle worker leases each operation before processing it. Failed infrastructure work is retried up to five attempts, and the persisted step and last error survive an API restart. Creation returns HTTP 202 because the project exists before all runtime resources are ready.

```text Durable lifecycle steps theme={null}
queued
provisioning_database
creating_mail_credential
creating_native_stack
deploying_native_stack
provision_completed
```

## Follow operation status

* `pending` means the operation is queued.
* `in_progress` means a worker owns the operation and is executing the reported step.
* `waiting_reconcile` means StackShift has requested node-side runtime work and is waiting for the runtime state to converge.
* `completed` means the lifecycle operation finished.
* `failed` includes `last_error` and whether the operation is retryable.

```bash Poll the operation returned by create theme={null}
curl -H "Authorization: Bearer $STACKSHIFT_TOKEN" \
  "https://api.stackshift.cloud/api/v1/ghost/projects/$PROJECT_ID/operations/$OPERATION_ID"
```

## Complete Ghost owner setup

Choose Open Ghost Admin after the site is running. The URL ends in `/ghost/` and opens Ghost’s own owner-creation screen. Create the owner there; do not enter the password into StackShift environment variables, support tickets, or project settings.

## After creation

* Use Restart if Ghost is running but needs a clean process restart.
* Create a recovery point before theme, integration, or content changes that could be difficult to reverse.
* Attach a verified custom domain before publishing widely.
* Verify a StackShift Mail sender domain if you want a branded transactional sender.
* Connect Mailgun only if you plan to send Ghost newsletters.

## Expected result

<Check>
  The Ghost overview reports a running runtime and MySQL database, the public URL loads, and the Ghost owner account exists only inside Ghost.
</Check>

## Common failures

<Warning>
  * A custom domain is supplied before its DNS is ready.
  * The selected node is unhealthy, draining, missing memory telemetry, or below the 1 GB floor.
  * MySQL does not reach running state within the provisioning window.
  * An image cannot be pulled or does not match the catalog digest.
</Warning>

## Related guides

<CardGroup cols={2}>
  <Card title="Native Ghost hosting overview" href="/ghost/native-ghost-overview">
    How StackShift runs Ghost as a first-class native runtime with a pinned official image, managed MySQL 8, persistent content, plan-aware isolation, integrated mail, and durable lifecycle operations.
  </Card>

  <Card title="Ghost Admin and custom domains" href="/ghost/admin-and-custom-domains">
    Complete owner setup in Ghost, understand the generated URLs, attach a custom domain, and keep Ghost’s canonical URL aligned with StackShift routing.
  </Card>

  <Card title="Ghost transactional mail and newsletters" href="/ghost/transactional-mail-and-newsletters">
    Use StackShift Mail for Ghost transactional messages, select a verified sender, and optionally connect Mailgun for Ghost bulk newsletters without exposing provider secrets.
  </Card>

  <Card title="Ghost troubleshooting and limitations" href="/ghost/troubleshooting-and-limitations">
    Diagnose native Ghost provisioning, database, image, routing, mail, recovery, staging, and upgrade failures using persisted operation state and clear resource boundaries.
  </Card>
</CardGroup>
