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

# Ghost

> Self-hosted publishing platform for blogs and newsletters. Install, create your owner account, publish, and wire up email.

[Ghost](https://ghost.org) is an open-source publishing platform for blogs, newsletters, and membership sites. You write and manage everything from the Ghost admin panel; the public site is served at your `*.suji.fr` address.

This page covers running Ghost on Suji end-to-end. Ghost is maintained upstream; Suji provides the [marketplace packaging](https://github.com/suji-hq/suji-templates/tree/main/ghost).

***

## Before you install

Nothing to prepare. You'll create your admin (owner) account in the browser on first run. If you later want to send newsletters or member emails, you'll add an email provider — see [Email & newsletters](#email--newsletters).

<Note>
  Ghost has no generated password and no credentials file — the **first person to open the admin URL creates the owner account.** Set yours up immediately after install (see below).
</Note>

***

## Install

Dashboard → **Apps** → **Ghost** → **Install**:

| Field     | Required | Notes                                                                                                                        |
| --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------- |
| VM        | yes      | Pick a VM with free capacity, or create one.                                                                                 |
| Subdomain | no       | Suggestion is `ghost`. Your site is served at `https://<subdomain>.suji.fr`, which Ghost automatically uses as its Site URL. |

Ghost is lightweight (it needs only \~512 MB), so **Small** is plenty. See [Recommended size](#recommended-size).

Click **Deploy**. The install reaches `running` in \~1 minute. Your site is then live at `https://ghost-<random>.suji.fr`, served over HTTPS through the tunnel.

***

## First connection — create your owner account

1. Open the admin panel at **`https://ghost-<random>.suji.fr/ghost`** (the `/ghost` path).
2. Ghost shows a **Create your account** screen on first run.
3. Enter your site title, name, email, and a password. This is the **owner** account.
4. You land in the Ghost admin.

<Warning>
  The admin URL is public the moment the install is `running`. Until you complete setup, **anyone who reaches `/ghost` can claim the owner account.** Do it right after deploy.
</Warning>

On later visits, `/ghost` shows a normal sign-in. The public site lives at the root (`/`).

***

## Writing & publishing

Inside the Ghost admin:

* **Posts / Pages** — write in the editor, then **Publish**.
* **Design / Branding** — set your theme, colors, logo; upload custom themes under **Settings → Design**.
* **Members** — enable signups/subscriptions under **Settings → Membership** (email setup required to actually send to members — see below).

The public site updates instantly as you publish.

***

## Email & newsletters

The install ships with **no email provider configured**, so member signup confirmations, password resets, staff invites, and newsletters **won't send** until you add one.

* **Transactional email** (invites, password resets) uses SMTP. Note the underlying network **blocks outbound SMTP on ports 25 and 465** — use port **587** (STARTTLS) or an HTTP-based provider.
* **Bulk newsletters** require **Mailgun** specifically (Ghost only supports Mailgun for bulk sending), which uses Mailgun's HTTP API — unaffected by the SMTP port block.

To enable email, add the `mail__*` / Mailgun env vars to the install yourself — through **Edit Install → environment variables**, or the compose-edit escape hatch — then redeploy.

***

## Custom domain

Ghost bakes its **Site URL** (your `https://<subdomain>.suji.fr`, wired automatically from the install's subdomain) into post links, images, and RSS. Custom domains aren't supported directly — the Site URL always follows the assigned subdomain.

***

## Day-to-day management

| Want to…                          | Where                                                |
| --------------------------------- | ---------------------------------------------------- |
| Write / publish posts             | Ghost admin (`https://ghost-<random>.suji.fr/ghost`) |
| Change theme / branding           | Admin → Settings → Design                            |
| Manage members / subscriptions    | Admin → Settings → Membership                        |
| View container logs               | Dashboard → Logs (pick Ghost)                        |
| Open a shell inside the container | Dashboard → Terminal (pick Ghost)                    |
| Browse content / DB on disk       | Dashboard → Files (pick the Ghost volume)            |
| Restart the app                   | Install detail page → Restart                        |
| Upgrade to a newer version        | Install detail page → Upgrade (when available)       |
| Remove the install + its data     | Install detail page → Uninstall                      |

***

## Troubleshooting

<AccordionGroup>
  <Accordion title="The site loads but styling/links are broken">
    Usually a **Site URL mismatch** — Ghost is rendering links for a different address than the one you're visiting. The Site URL follows the install's subdomain automatically; if you changed the subdomain, redeploy so Ghost picks up the new address.
  </Accordion>

  <Accordion title="I can't reach the admin / forgot the owner password">
    The admin is at the **`/ghost`** path, not the site root. The "Forgot?" link needs email configured (see Email & newsletters) — so set email up **before** you need a reset. Without email, recovering a locked-out owner means resetting it directly in Ghost's database via the **Terminal**.
  </Accordion>

  <Accordion title="Member emails / newsletters aren't sending">
    Expected until you configure an email provider. Transactional email needs SMTP on port 587 (25/465 are blocked upstream); bulk newsletters need Mailgun. See Email & newsletters.
  </Accordion>

  <Accordion title="Bad gateway (Cloudflare 502)">
    Ghost isn't reachable through the tunnel yet — usually still starting (wait \~30 s, especially after an upgrade). If it persists, the Logs tab shows why the container isn't up.
  </Accordion>
</AccordionGroup>

***

## Where things live

| What                             | Inside container                       | Named volume    |
| -------------------------------- | -------------------------------------- | --------------- |
| SQLite database (posts, members) | `/var/lib/ghost/content/data/ghost.db` | `ghost-content` |
| Uploaded images                  | `/var/lib/ghost/content/images`        | `ghost-content` |
| Themes                           | `/var/lib/ghost/content/themes`        | `ghost-content` |

Ghost runs on SQLite — there's no separate database container. Everything lives in the one `ghost-content` volume.

<Warning>
  Uninstalling deletes the volume by default — that's your whole site (posts, members, images, theme). Choose **keep data** during uninstall if you want to preserve it.
</Warning>

***

## Recommended size

* **Small is plenty.** Ghost needs only \~512 MB and the compose caps it at 1 GB.
* Disk is the thing to watch on an image-heavy site — uploads accumulate in the content volume. Size storage accordingly.
* If you run other apps on the same VM, remember the VM's total CPU/memory is shared.

***

## Reporting issues

| Class                                                         | Where                                                                             |
| ------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| Ghost bug (editor, themes, membership, admin)                 | [TryGhost/Ghost issues](https://github.com/TryGhost/Ghost/issues)                 |
| Marketplace packaging bug (compose / manifest / install form) | [suji-hq/suji-templates issues](https://github.com/suji-hq/suji-templates/issues) |
| Suji platform bug (dashboard, billing, network)               | Support ticket from the dashboard                                                 |
