docs: verify against real WHP + capture real screenshots
Discovery against the demo account on whp01 surfaced several inaccuracies: - Cache is Valkey (Redis wire-compatible), not Redis or Memcached. No Memcached is offered as a separate service. - Site Monitoring is the sidebar label (not 'AI Monitor'). - 'Add a domain' has no Primary/Add-on distinction. - Sites form: 'Container Type' (not 'Site type'), Number of Containers (1-10 for horizontal scaling), CPU per Container (default 0.25), Memory per Container (default 256MB), SSL inline on the same form. - Backups: default retention 5 days / 10 backups; on-demand + scheduled; S3 backup targets are visible and configurable. - Email: per-domain settings live behind 'Setup Instructions' on the Email page; mail server hostname is on the Dashboard (per-server, e.g. mail01.cloud-hosting.io), not per-domain. Also reworked the screenshot pipeline: - New shots.config.ts targets the real index.php?page=... URLs - Added redactSensitive() step that runs before each screenshot to swap server names, IPs, mail hostnames, and demo-user-isms with neutral placeholders. This keeps docs portable across the fleet. - Hides .brand-full and .navbar-text (top-bar server identifier and Welcome greeting). - Captured 9 real WHP screenshots; removed stale placeholders.
This commit is contained in:
@@ -27,35 +27,41 @@ import Support from '~/content/partials/support-link.mdx';
|
||||
|
||||
<Steps>
|
||||
|
||||
1. From the sidebar, open **Domains → Add Domain**.
|
||||

|
||||
1. In the sidebar, click **Domains**.
|
||||

|
||||
|
||||
2. Enter your domain (for example, `example.com`). Don't include `http://` or `www.` — just the bare domain.
|
||||
2. Under **Add New Domain** on the left, type your domain (for example, `example.com`). Don't include `http://` or `www.` — just the bare domain.
|
||||
|
||||
3. Choose the domain type:
|
||||
- **Primary** — your account's main domain. Pick this if it's your first.
|
||||
- **Add-on** — an extra domain alongside your primary.
|
||||
|
||||
4. Click **Add**. WHP confirms the domain and shows the nameserver values and an A record you can point at.
|
||||
3. Click **Add Domain**.
|
||||
|
||||
</Steps>
|
||||
|
||||
WHP creates the standard set of DNS records automatically for the new domain:
|
||||
|
||||
- **A record** for the apex domain → your server's IP
|
||||
- **CNAME** for `www` → the apex
|
||||
- **NS records** for the nameservers
|
||||
- **MX record** → the mail server
|
||||
- **TXT record** for SPF
|
||||
|
||||
You can review and tweak any of these from the **DNS Management** panel on the right side of the Domains page (select the domain from the dropdown).
|
||||
|
||||
## Point your DNS at us
|
||||
|
||||
There are two paths depending on where the domain is registered:
|
||||
|
||||
**Registered with us:** nothing to do. We set DNS automatically when the domain was created. Skip ahead to verify.
|
||||
**Registered with us.** Nothing to do — we set DNS automatically when the domain was added. Skip ahead to verify.
|
||||
|
||||
**Registered elsewhere:** at your registrar, do one of the following:
|
||||
**Registered elsewhere.** At your registrar, do one of the following:
|
||||
|
||||
- Set the **nameservers** to `ns1.anhonesthost.com` and `ns2.anhonesthost.com` (recommended — gives us full DNS control, easier to support), **or**
|
||||
- Keep your existing nameservers and add an **A record** pointing the domain to the IP address shown on the WHP confirmation screen.
|
||||
- Set the **nameservers** to the values shown on the Domains page (recommended — gives us full DNS control, easier to support), **or**
|
||||
- Keep your existing nameservers and add an **A record** pointing the domain to the IP shown on the **Dashboard** page under Server Information.
|
||||
|
||||
## Verify it worked
|
||||
|
||||
DNS changes can take up to 24 hours to propagate worldwide. To check status:
|
||||
DNS changes can take up to 24 hours to propagate worldwide. To check:
|
||||
|
||||
- Run `dig example.com +short` from a terminal — once you see our IP in the result, you're live.
|
||||
- Run `dig example.com +short` from a terminal — once you see our server's IP in the result, you're live.
|
||||
- Or use a web tool like [whatsmydns.net](https://www.whatsmydns.net/) to see propagation across many regions.
|
||||
|
||||
Once DNS resolves, visiting your domain in a browser will reach WHP — though you'll see a default placeholder until you create a site.
|
||||
@@ -64,9 +70,9 @@ Once DNS resolves, visiting your domain in a browser will reach WHP — though y
|
||||
|
||||
**"Pending DNS" for more than 24 hours.** Re-check the nameservers or A record at your registrar — typos and trailing dots cause silent failures. Clear your local DNS cache to rule out client-side caching.
|
||||
|
||||
**Domain returns a generic "site not found" page.** DNS works but you haven't created a site yet. [Create one](/whp/how-to/create-a-site/) and point it at this domain.
|
||||
**Domain returns a generic placeholder.** DNS works but you haven't created a site yet. [Create one](/whp/how-to/create-a-site/) and bind this domain to it.
|
||||
|
||||
**Wrong site loads.** Another site on your account is set as the default. In **Sites**, make sure the correct site is bound to this domain.
|
||||
**Wrong site loads.** Another site on your account is bound to this domain. Open **Sites** in the sidebar and make sure the correct site is bound to it.
|
||||
|
||||
## Related
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Backups
|
||||
description: Confirm WHP is backing up your site, restore individual files, and download archives.
|
||||
description: Run on-demand and scheduled backups of your sites and databases, and confirm they're succeeding.
|
||||
sidebar:
|
||||
order: 4
|
||||
---
|
||||
@@ -9,76 +9,79 @@ import { Steps, Aside } from '@astrojs/starlight/components';
|
||||
import SignIn from '~/content/partials/signing-in.mdx';
|
||||
import Support from '~/content/partials/support-link.mdx';
|
||||
|
||||
WHP runs **automatic daily backups** of your site files and databases. You don't have to set anything up for this to happen — but it's worth knowing how to confirm a backup ran, restore something, and download an archive when you need to.
|
||||
WHP keeps automatic backups of your sites and databases. The **Backup Management** page lets you trigger an on-demand backup, add a scheduled backup, manage where backups are sent, and review history.
|
||||
|
||||
## What's backed up by default
|
||||
## What's backed up
|
||||
|
||||
- **Site files** — everything under each domain folder.
|
||||
- **Databases** — all MySQL databases attached to your account.
|
||||
- **Email** — mailboxes and their contents (depending on your plan).
|
||||
- **Sites** — files for each site.
|
||||
- **Databases** — every MySQL and PostgreSQL database attached to your account.
|
||||
|
||||
Retention is shown on your plan page. The default tier keeps **7 daily backups**.
|
||||
Default retention on built-in backup targets is **5 days, up to 10 backups**.
|
||||
|
||||
## Sign in to WHP
|
||||
|
||||
<SignIn />
|
||||
|
||||
## Configure your backup schedule
|
||||
## Run an on-demand backup
|
||||
|
||||
<Steps>
|
||||
|
||||
1. From the sidebar, open **Backups → Settings**.
|
||||

|
||||
1. In the sidebar, click **Backups**.
|
||||

|
||||
|
||||
2. Confirm the **schedule** (default: daily, overnight). Adjust if your plan permits.
|
||||
2. Under **Create New Backup**, pick a **Backup Type** (Sites, Databases, or both) and a **Backup Target** from the dropdown.
|
||||
|
||||
3. (Optional) Enable **off-server backups** to a separate storage location — recommended for anything you can't afford to lose.
|
||||
3. Click **Start Backup**. The run appears in **Backup History** below; status updates live.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Verify a backup actually ran
|
||||
## Schedule a backup
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Open **Backups → History**.
|
||||

|
||||
1. Scroll down to **Scheduled Backups** and click **+ Add Schedule**.
|
||||
|
||||
2. Confirm the most recent entry is from **within the last 24 hours** and shows **Success**.
|
||||
2. Pick the cadence (daily, weekly, etc.), the type (sites / databases / both), and the target.
|
||||
|
||||
3. Click the entry to see what was included — files, databases, email — and the total size.
|
||||
3. Save. The schedule appears in the list and runs automatically.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Where backups are stored
|
||||
|
||||
The **Backup Targets** table shows the destinations available to your account. Built-in targets are S3-backed (for example, `WHP01 S3 Backups`) with retention and a maximum backup count. **Global** targets are managed by us; you can also add your own external target (for example, your own S3 bucket) with **+ Add Backup Target**.
|
||||
|
||||
## Verify backups are succeeding
|
||||
|
||||
<Steps>
|
||||
|
||||
1. Open **Backups**.
|
||||
|
||||
2. Look at the **Total Backups** and **Total Size** tiles at the top. If Total Backups stays at 0 over time, no backups are running — open a [support ticket](https://secure.anhonesthost.com/submitticket.php).
|
||||
|
||||
3. Check **Backup History** for recent entries. Each should show **Success** within minutes of its scheduled time.
|
||||
|
||||
</Steps>
|
||||
|
||||
<Aside type="tip">
|
||||
Add a calendar reminder to check this monthly. Backups that fail silently are the worst kind.
|
||||
Add a calendar reminder to check the history monthly. Backups that fail silently are the worst kind.
|
||||
</Aside>
|
||||
|
||||
## Test a restore (recommended quarterly)
|
||||
|
||||
The best time to discover your backup isn't working is *not* when you actually need it. Test surgically:
|
||||
|
||||
1. In **History**, click a recent backup → **Restore preview**.
|
||||
2. Pick a single file — your site's `index.php`, for example — and restore just that one file.
|
||||
3. Confirm it appears correctly. If yes, the restore pipeline works.
|
||||
Find the time to do this before you actually need it. Open a recent backup in **Backup History** → preview the contents → restore a single file (your site's `index.php` is a fine target) → confirm it appears. If the surgical restore works, the pipeline works.
|
||||
|
||||
Don't do a full restore unless you genuinely need to — it rewrites your live site.
|
||||
|
||||
## Download a backup
|
||||
|
||||
To grab a copy off-server:
|
||||
|
||||
1. From **History**, click a backup → **Download**.
|
||||
2. WHP packages it as `.tar.gz` and offers a one-time download link that's valid for 24 hours.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Backup failed.** Click the failed row to see the error. Common causes:
|
||||
|
||||
- Disk full or close to it — check **Overview → Resource usage** and consider a [resource upgrade](/whp/add-ons/resource-upgrades/).
|
||||
- A very large mailbox slowed the run — consider the [archival email add-on](/whp/add-ons/archival-email/) to relieve mailbox pressure.
|
||||
- Transient lock or maintenance window — let it retry overnight before opening a ticket.
|
||||
- Transient lock or maintenance window — let it retry on the next schedule before opening a ticket.
|
||||
|
||||
**Restore "succeeded" but my file isn't there.** Check the **path** shown on the backup's detail page — your restore landed where the backup says it would, which may not match your current site layout if you've moved files around.
|
||||
**"No targets available" when starting a backup.** Your account has no backup targets attached. Open a ticket; we'll get one wired up.
|
||||
|
||||
## Related
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Create a site
|
||||
description: Spin up a PHP, Node, or static HTML site on a domain you've added to WHP.
|
||||
description: Spin up a containerized site on a domain you've added to WHP.
|
||||
sidebar:
|
||||
order: 2
|
||||
---
|
||||
@@ -10,10 +10,12 @@ import SignIn from '~/content/partials/signing-in.mdx';
|
||||
import Hostnames from '~/content/partials/service-hostnames.mdx';
|
||||
import Support from '~/content/partials/support-link.mdx';
|
||||
|
||||
Every site on WHP runs in one or more containers. The Sites page lets you pick a container type (PHP, Node, static HTML, or one of the other options on the dropdown), bind one or more domains, and set how much CPU and RAM each container gets.
|
||||
|
||||
## Before you start
|
||||
|
||||
- A **domain already added** to your account ([Add a domain](/whp/how-to/add-a-domain/) covers that).
|
||||
- Decide what kind of site you're building: **PHP**, **Node**, or **static HTML**.
|
||||
- Decide what kind of site you're building. Common container types: **PHP** (WordPress, Laravel, most CMSes), **Node** (custom apps), **Static HTML** (prebuilt bundles from Astro, Hugo, Eleventy, etc.).
|
||||
- About 5 minutes.
|
||||
|
||||
## Sign in to WHP
|
||||
@@ -24,33 +26,33 @@ import Support from '~/content/partials/support-link.mdx';
|
||||
|
||||
<Steps>
|
||||
|
||||
1. From the sidebar, open **Sites → Add Site**.
|
||||

|
||||
1. In the sidebar, click **Sites**.
|
||||

|
||||
|
||||
2. Pick the **site type**:
|
||||
- **PHP** — best for WordPress, Joomla, Laravel, and most off-the-shelf CMSes.
|
||||
- **Node** — for custom apps you build and deploy (Express, Next.js in standalone mode, Fastify, etc.).
|
||||
- **Static HTML** — for prebuilt site bundles from tools like Astro, Hugo, Eleventy, or Jekyll. No runtime; just files.
|
||||
2. Fill in the **Create New Site** form on the right:
|
||||
- **Site Name** — a friendly label for you to recognise the site later.
|
||||
- **Primary Domain or Subdomain** — pick from the dropdown of domains you've already added.
|
||||
- **Container Type** — PHP, Node, static HTML, etc.
|
||||
- **Number of Containers** — `1` is the right answer for most sites. Bump this up (1–10) if you need to scale a busy site horizontally; WHP load-balances traffic across the replicas.
|
||||
- **Additional Domains/Subdomains (Optional)** — bind extra domains to the same site if you want them to serve the same content.
|
||||
- **CPU per Container (cores)** — defaults to `0.25`. Raise this only if you need to.
|
||||
- **Memory per Container (MB)** — defaults to `256`. Raise this if your app needs more RAM.
|
||||
|
||||
3. Pick the **domain**. The dropdown lists domains you've already added.
|
||||
3. Scroll down to **SSL/HAProxy Configuration**. Before you enable HTTPS, make sure your domain's DNS already points to our server's IP — SSL certificates can't be issued for domains that aren't pointed correctly. Then check **Enable HTTPS** to have us request a Let's Encrypt certificate.
|
||||
|
||||
4. (PHP only) Pick the **PHP version**.
|
||||
|
||||
5. (Node only) Pick the **Node version** and the **start command** (typically `npm run start`).
|
||||
|
||||
6. Click **Create site**. WHP provisions the container — usually under a minute. You'll see the new site in the **Sites** list when it's ready.
|
||||
4. Click **Create Site**. WHP provisions the container(s) — usually under a minute. The new site shows up in the **Manage Sites** list on the left of the page.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Where your files go
|
||||
|
||||
When you connect via SFTP, your account home shows one folder per domain. Inside each domain folder, the layout depends on the site type:
|
||||
When you connect via SFTP, your account home (`/docker/users/<your-user>/`) shows one folder per domain. Inside each domain folder, the layout depends on the container type:
|
||||
|
||||
| Site type | Layout | Docroot is... |
|
||||
| ------------ | ----------------------------------------------------- | ------------------------------------------------------ |
|
||||
| PHP | `public_html/`, `logs/`, `crontab` | `public_html/` |
|
||||
| Node | `app/`, `logs/` | Whatever your start command serves; we run it from `app/` |
|
||||
| Static HTML | files directly (e.g., `index.html`, `assets/`) | The domain folder itself |
|
||||
| Container type | Layout inside the domain folder | Docroot is... |
|
||||
| -------------- | ------------------------------------------ | -------------------------------------------------------- |
|
||||
| PHP | `public_html/`, `logs/`, `crontab` | `public_html/` |
|
||||
| Node | `app/`, `logs/` | Whatever your start command serves; we run it from `app/`|
|
||||
| Static HTML | files directly (e.g., `index.html`, `assets/`) | The domain folder itself |
|
||||
|
||||
Upload your files to the right place and the site picks them up immediately.
|
||||
|
||||
@@ -63,16 +65,18 @@ Upload your files to the right place and the site picks them up immediately.
|
||||
Open your domain in a browser. You should see your site, or the default "no content yet" placeholder if you haven't uploaded files. For Node sites, give it 15–30 seconds after creation for the process to start.
|
||||
|
||||
<Aside type="tip">
|
||||
Static HTML sites are the fastest path if your toolchain produces a bundle (Astro, Hugo, Eleventy, etc.) — you skip the runtime entirely.
|
||||
Static HTML is the fastest path if your toolchain produces a bundle (Astro, Hugo, Eleventy, etc.) — you skip the runtime entirely.
|
||||
</Aside>
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**You see a default "no content" page.** Upload your files via SFTP — for PHP into `public_html/`, for Node into `app/`, for static directly into the domain folder.
|
||||
|
||||
**Node site returns 502.** Check that your start command runs successfully locally, and that it binds to the port shown on the site's WHP detail page (we set it via an env var; see the site's environment in WHP).
|
||||
**Node site returns 502.** Check that your start command runs successfully locally, and that it binds to the port WHP exposes via env var to your container.
|
||||
|
||||
**PHP site shows a blank page or 500.** Check your site's error log (sidebar → Logs → pick the site). Common cause: a syntax error in `index.php` or a missing PHP extension — request extensions via a [support ticket](https://secure.anhonesthost.com/submitticket.php) if needed.
|
||||
**PHP site shows a blank page or 500.** Check **Sites → your site → Logs** (or the `logs/` folder in SFTP). Common cause: a syntax error in `index.php` or a missing PHP extension — open a [support ticket](https://secure.anhonesthost.com/submitticket.php) if you need a non-default extension enabled.
|
||||
|
||||
**SSL won't issue.** The "Important: ensure your domain is pointed to our server" warning means DNS hasn't propagated yet, or it's pointed somewhere else. Re-check with `dig` and retry.
|
||||
|
||||
## Related
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import Support from '~/content/partials/support-link.mdx';
|
||||
|
||||
## Before you start
|
||||
|
||||
- A **domain added** to your account.
|
||||
- A **domain added** to your account ([Add a domain](/whp/how-to/add-a-domain/) covers that).
|
||||
- Decide what local part you want — the bit before the `@`. For example, `jane` to get `jane@example.com`.
|
||||
- About 5 minutes.
|
||||
|
||||
@@ -23,62 +23,58 @@ import Support from '~/content/partials/support-link.mdx';
|
||||
|
||||
<Steps>
|
||||
|
||||
1. From the sidebar, open **Email → Email Accounts → Add Account**.
|
||||

|
||||
1. In the sidebar, click **Email**.
|
||||

|
||||
|
||||
2. Pick the **domain** for this mailbox.
|
||||
2. Scroll to **Email Accounts** and use the form to create a new account on one of your domains. You'll be asked for the domain, the local part, a password, and an optional mailbox size cap.
|
||||
|
||||
3. Enter the **local part** (the bit before `@`).
|
||||
3. Set a **strong password** — at least 12 characters with a mix of upper case, lower case, numbers, and symbols. Email accounts are common attack targets.
|
||||
|
||||
4. Set a **strong password** — at least 12 characters with a mix of upper case, lower case, numbers, and symbols. Email accounts are common attack targets.
|
||||
|
||||
5. Choose a **mailbox size cap**. The default is usually fine; you can raise it later or via an [email upgrade add-on](/whp/add-ons/email-upgrades/).
|
||||
|
||||
6. Click **Create**.
|
||||
4. Click **Create**. The new account appears in the **Email Accounts** list.
|
||||
|
||||
</Steps>
|
||||
|
||||
## Set up your email client
|
||||
|
||||
Mail server hostnames are per-domain. Find the exact incoming and outgoing hostnames for your domain on the **Dashboard** page in WHP — that page lists the IMAP, POP3, and SMTP host names along with the recommended ports and security settings.
|
||||
The exact IMAP, POP3, and SMTP hostnames are listed on the Email page — click **Setup Instructions → View Instructions** under **Mail Server Access** for a step-by-step that includes the right hostnames, ports, and security settings for your server.
|
||||
|
||||
The typical pattern is:
|
||||
The typical settings look like this; substitute the hostname shown in the Setup Instructions:
|
||||
|
||||
```text
|
||||
IMAP (incoming)
|
||||
Host: <see Dashboard>
|
||||
Host: <see Setup Instructions>
|
||||
Port: 993
|
||||
Security: SSL/TLS
|
||||
Username: full email address (e.g., jane@example.com)
|
||||
Password: the one you set above
|
||||
|
||||
SMTP (outgoing)
|
||||
Host: <see Dashboard>
|
||||
Host: <see Setup Instructions>
|
||||
Port: 587
|
||||
Security: STARTTLS
|
||||
Username: full email address
|
||||
Password: same as IMAP
|
||||
```
|
||||
|
||||
For per-client walkthroughs (Outlook, Apple Mail, etc.), see the Email clients section — coming soon.
|
||||
For per-client walkthroughs (Outlook, Apple Mail, Thunderbird, etc.), see the Email clients section — coming soon.
|
||||
|
||||
## Webmail
|
||||
|
||||
The webmail URL for your domain is also listed on the **Dashboard** page in WHP.
|
||||
Click **Webmail Access → Open Webmail** on the Email page to sign in to webmail in a new tab.
|
||||
|
||||
## Verify it worked
|
||||
|
||||
Send yourself a test message from another account (your personal Gmail, for example). It should arrive within a minute or two and be retrievable from both your client and webmail.
|
||||
|
||||
<Aside type="caution">
|
||||
**SPF and DKIM records matter.** Without them, your outgoing mail will get flagged or rejected by other providers. If your domain is registered with us, we add these records automatically. If it's registered elsewhere, copy the SPF and DKIM records shown on the email account page into your registrar's DNS.
|
||||
**SPF and DKIM records matter.** Without them, your outgoing mail will get flagged or rejected by other providers. We add an SPF record automatically when you add a domain. DKIM records are listed in the **DKIM Records** section near the bottom of the Email page — make sure they're present at your registrar if the domain isn't using our nameservers.
|
||||
</Aside>
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Webmail isn't reachable.** DNS for the mail subdomain may still be propagating — wait an hour and try again. The exact URL is on the Dashboard page in WHP.
|
||||
**Webmail isn't reachable.** DNS for the mail subdomain may still be propagating — wait an hour and try again.
|
||||
|
||||
**Outgoing mail is bouncing or going to spam.** Check the SPF and DKIM records at your registrar. The email account page in WHP shows the exact records you should have.
|
||||
**Outgoing mail is bouncing or going to spam.** Check the SPF and DKIM records. The DKIM Records panel on the Email page shows whether DKIM is configured for each of your domains.
|
||||
|
||||
**Client can connect on IMAP but not SMTP.** Some ISPs and corporate networks block outgoing port 587. Try sending from a different network to confirm; if the issue is your network, your ISP is the place to ask.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user