Your site. Your tools. A managed stack underneath.
Know what runs your site and how to get the best from it.
example.com runs on its own virtual machine. You get WordPress, SSH, SFTP,
WP-CLI and database access. We manage the web, database, caching, certificate, backup and monitoring layers.
About this guideThis page describes the current Woop! Host setup. Use Reinstall software stack in
your hosting panel to add the current
stack features to an older site. The reinstall takes a protected backup and keeps your site content. See the
recent changes.
Choose the way you work
Your hosting panel, then four ways into the site
The panel shows the platform around WordPress. Use the four site tools for publishing, files, commands and engineering work.
Your site control panel
See and manage the whole site from one page.
Open status, access, troubleshooting and lifecycle controls for example.com.
A fast path in. Clear boundaries all the way down.
A normal page request moves through specialist layers. Each layer has one job and only the access it needs.
VisitorBrowser
HTTPS request
→
Secure edgeNGINX + TLS
Encryption and static files
→
Page cacheVarnish
Fast anonymous visits
→
ApplicationPHP-FPM
Runs WordPress + microcache
→
SiteWordPress
Themes, plugins and content
→
DataMariaDB + Redis
Durable data and object cache
Fast
Cache without stale admin work
Varnish serves anonymous visits quickly. Logged-in sessions, carts and wp-admin bypass page caching. WordPress purges cached pages when content changes.
Isolated
One customer, one machine
Your site does not share a filesystem, database or traffic budget with another customer's WordPress installation.
Contained
Access stops at your site
Your shell is powerful inside the site and deliberately cannot manage the operating system, services or another account.
Managed
The infrastructure is our job
We maintain PHP, the database, caching, certificates, monitoring, backups and system security updates.
Part one
Work with your site
Your website is ready to use. These are tools, not setup steps you have missed.
SSH access and WP-CLI
A real shell, already pointed at your WordPress installation.
ssh wpuser@example.com
You see your site and your own files. The shell is jailed, so you cannot see or change the web server, database service,
caches, certificates or anyone else's processes.
Your site is still yours, including the right to break it. You can edit, overwrite and delete files you own.
Backups and the Resident Engineer give you practical ways back if a change goes wrong.
WP-CLI runs as the owner of the files. It can install themes and plugins without granting web code write access to PHP.
SFTP — secure file transfer
Use SFTP over port 22. Do not select FTP or FTPS in your client.
ProtocolSFTP / SSH File Transfer
Port22
Usernamewpuser
Website/var/www/wordpress
You start in your home directory. Files arrive owned by you. Some clients, archives and rsync commands can
give uploaded files the wrong group. If WordPress then says a theme or plugin is missing, use the
permissions repair.
Database access
Use Adminer for quick browser work, or tunnel a desktop client over SSH.
Browser
Adminer
example.com/db
Useful for a quick look, export or migration import.
Desktop client
SSH tunnel
ssh -N -L 3307:localhost:3306 wpuser@example.com
Connect the client to 127.0.0.1:3307. Database credentials are in wp-config.php.
The database is not open to the internet. From your site shell, run mysql to connect over the local socket.
The Resident Engineer
Claude Code and Codex are WordPress specialists that already know this stack and can inspect, back up, change and verify your site.
Start a persistent customer session directly from your computer:
ssh -t wpuser@example.com claude
ssh -t wpuser@example.com codex
If you are already connected over SSH, run claude or codex. Both clients run as wpuser,
so their operating boundary is the same as yours.
Describe the outcome in ordinary language, or invoke a bundled skill for a particular playbook.
In Claude Code, use /wphost-backup. In Codex, use $wphost-backup.
Run /skills in Claude Code to see the complete current list.
Understand and diagnose
wphost-site-report · wphost-troubleshoot
Inventory the site and pending updates, or work methodically through errors, outages and plugin conflicts.
Change safely
wphost-backup · wphost-safe-update
Create a protected restore point, then update one component at a time and check the site after each change.
Review site health
wphost-performance-audit · wphost-security-audit
Find database, media and caching bottlenecks, or produce a read-only integrity and security report.
Move a site
wphost-migrate-export · wphost-migrate-import
Build and verify a migration bundle, transfer it safely, import it, repair permissions and check the result.
Build and edit
wphost-child-theme · wphost-content-ops
Keep theme customizations update-safe, or make reviewed bulk content and URL changes with a dry run first.
Verify and recover
wphost-visual-check · wphost-exploit-recovery
Check responsive rendering in managed Chromium, or investigate a suspected compromise before cleanup.
Sign in with your own supported Claude, ChatGPT or API account. Your persistent login and local session history stay in your
server home directory. Relevant file content and command output go to your selected model provider. Do not steer either client
at credentials, customer records or secrets.
Guest sign-in. Claude asks whether you have a Claude setup token or an Anthropic API key.
Codex starts ChatGPT device login. Open the displayed URL on your own computer and enter the one-time code.
Create a Claude setup token on your own trusted computer with claude setup-token. Do not create it from the
client's persistent Claude login.
To use an API key, ask the remote command to read it without echo:
Use --prompt-token instead for a Claude setup token or Codex access token. Do not put the credential in the SSH
command. A variable before ssh remains local and does not normally reach the guest command.
Codex may warn that it cannot create PATH aliases in its temporary directory. The warning is expected because the managed
codex command is already available. Run claude-guest --help or codex-guest --help for all options.
It is an engineer, not an oracle. Read proposed destructive actions before approving deletion, user changes
or publishing. The platform guidance asks it to back up before risky work and verify the site afterwards.
Moving an existing site in
Bring files, import the database, replace the old URL, then verify the result.
1
Move the files
Use SFTP, rsync or SSH from the old host.
2
Import the database
Use Adminer, mysql or WP-CLI.
3
Update URLs safely
Run wp search-replace with --dry-run first.
4
Check permissions and behavior
Repair ownership, then test public pages and wp-admin.
For a Woop!-to-Woop! move, the two Resident Engineers can coordinate the transfer after you approve it. The destination
creates restricted, expiring SSH trust. The source builds a manifest and bundle. The destination then pulls, verifies,
imports and checks the site. Private keys never move between the sites.
Woop! Host also specialises in migrations from exploited sites. The security and exploit-recovery skills inspect the imported
copy, replace compromised software and verify the site before it goes live on the current stack.
Part two
Care and maintenance
The routine server work is automated. These sections show where you still make the decisions.
Backups and restores
Protected daily history plus self-service backup, comparison, staging, export and guarded live restore.
DailyAutomatic backup cadence
~30 daysNormal history
10 daysMinimum history for large backups
Read-onlySite access to managed backups
Extra backups run before a stack reinstall, before risky Resident Engineer work, and whenever you or we request one.
Managed history lives outside the website folder, where WordPress cannot alter or delete it.
The helper is installed at /usr/local/bin/wphost-backups.sh and is also available by its short name. Start by
listing recent runs. Each successful run has a stable run ID:
wphost-backups.sh info
wphost-backups.sh list --limit 10
Staging is the default. The live site is unchanged and the restored content lands under ~/restores.
Keep or download a copy
Export files and database
wphost-backups.sh export --run RUN-ID
The portable archive lands under ~/backups/wphost/exports and uses your disk space.
Restore the live site
Use the run ID from list throughout the review and restore. Preview a full files-and-database restore first:
wphost-backups.sh restore --run RUN-ID --live --exact --dry-run
# After you review the dry run:
wphost-backups.sh restore --run RUN-ID --live --exact --yes
Use --merge to keep files created after the backup, or --exact to make the selected file scope match
history. Instead of a run ID, --at-or-before 7D selects by time and --with-reason "label" selects the
newest exact reason match. A bare date means midnight at the start of that date.
Automatic updates
The Auto-updates switch beside each plugin and theme controls whether the daily pass updates that item.
01
Back up files and database
A restore point exists before anything changes.
02
Update WordPress core
Core is brought up to the current release.
03
Update opted-in plugins and themes
Only items with WordPress auto-update enabled are included.
04
Repair file permissions
The stack checks ownership after the update work.
Plugins and themes present when a site is built normally start with auto-update enabled. A plugin installed later follows
WordPress's default, which is off. Check the Plugins screen after adding one.
Scheduled posts, WooCommerce jobs and plugin cron run from the server every five minutes. They do not depend on a visitor
arriving at the right moment.
Email from your site
Mail attempts are traceable without recording message bodies.
For each attempt and its result, the stack records the time, hostname, recipients, the first 200 characters of the subject,
headers, attachment count and the PHP call chain that led to the send. Message bodies are never recorded.
The log is outside the website and survives a site's software stack reinstall. It identifies the plugin and function behind
unexpected mail. Disable all tracing with WPHOST_MAIL_TRACE, or only the call chain with
WPHOST_MAIL_TRACE_BACKTRACE.
To route mail through your own provider, add all five constants to wp-config.php:
A partial configuration is ignored. Port 465 uses implicit TLS; other ports use STARTTLS. A provider with correctly
configured SPF, DKIM and DMARC gives mail the best chance of arriving.
Example: Gmail
Gmail is practical for low-volume site mail. Google prefers OAuth, which this built-in configuration does not support.
To use these constants, turn on 2-Step Verification and create a separate
Google app password.
Do not put your normal Google Account password in wp-config.php.
Use your complete Gmail or Google Workspace email address. The authenticated address becomes both the From
address and bounce address. Some managed Workspace, security-key-only and Advanced Protection accounts do not offer app passwords.
Software installed with your site
A small visible plugin plus must-use components connect WordPress to the managed platform.
Component
What it does
Your control
Woop! Host default settings
Suppresses routine successful-update email and provides SMTP configuration.
Visible in Plugins. You can deactivate it.
Filesystem access notice
Replaces an unusable FTP path with guidance and the correct panel link.
A must-use plugin, readable in wp-content/mu-plugins.
Mail tracing
Records delivery metadata and the originating code path, never the message body.
A must-use plugin with tracing controls in wp-config.php.
Cache integrations
Coordinates WordPress object and page caches, including cache purges after changes.
Must-use plugins load automatically and do not appear in the normal Plugins list. They do not collect visitor data or send
site data elsewhere. You can inspect their files over SSH or SFTP.
Woop! Host
We handle the platform.
The virtual machine, PHP, database, web server, caches, certificates, backups, monitoring and system updates.
You
You shape the website.
Your content, themes, plugins, users and the choices you make in wp-admin.
The hosting panel exposes platform status and recent logs. The Resident Engineer can investigate the WordPress side in plain English.
Part three
When something works differently
Each answer stands alone because these links often reach customers in the middle of a problem.
“This site needs web code write access first”
You tried to install or update code in wp-admin while the stronger read-only-code posture was active.
This site needs web code write access first
New sites begin with web code write access while you build them. WordPress can install themes and plugins normally.
If you later choose the stronger posture, PHP can run your code but cannot rewrite plugin or theme files.
This blocks a common persistence path: vulnerable plugin code can be exploited, but the PHP process cannot leave a new
executable backdoor in the code directories. The trade-off is that browser installs need a temporary grant.
A
Grant temporary access in your hosting panel. Return to wp-admin and install normally.
B
Install with WP-CLI. It runs as the file owner and needs no grant.
C
Upload over SFTP. Then activate the theme or plugin in wp-admin.
D
Ask the Resident Engineer. Describe what you want installed and ask it to verify the result.
Web code write access
Writable during setup, optionally read-only later, and temporarily writable whenever you need it.
During normal setup, PHP-FPM can write the WordPress installer directories and update wp-config.php when
WordPress or a plugin needs to change configuration. Your SSH and SFTP account can always write the files it owns.
After you choose the stronger read-only posture, grant bounded access from
your hosting panel.
An hour is usually plenty.
Temporary web code write access is granted until (date and time).
You can install themes and plugins normally until then, and plugins may update wp-config.php when needed.
It switches off by itself — you do not need to do anything. While it is on, your site is missing one of its protections,
and any file that appears in your themes or plugins folders is recorded, so it is worth finishing and not leaving it open.
Temporarily writable
Themes and plugins
Download and rollback work folders
wp-config.php for PHP-FPM
Still protected
WordPress core
wp-content itself and drop-ins
wp-config.php from direct NGINX access
You cannot grant access from SSH because changing the runtime's permissions is a privileged platform action. You do not
need the grant for command-line installs:
If the files are visible over SSH or SFTP, the problem is usually their group rather than missing content.
PHP and NGINX read your files through the shared wp-site group. Some uploads, archive tools and
rsync commands replace that group. WordPress can no longer read the component even though the files remain.
The hourly repair normally corrects this. To repair it immediately, run the copy installed inside your site shell:
/usr/local/bin/wphost-fix-webroot-perms
The shorter wphost-fix-webroot-perms form works too because the directory is on your command path. The command
is safe to run at any time.
Who owns and serves your files
Four accounts divide ownership, PHP execution, static-file serving and platform administration.
Account
Role
File access
wpuser
You: SSH, SFTP, WP-CLI and the Resident Engineer.
Owns the site and can change its files.
wp-php
Runs WordPress PHP on each request.
Runs code and writes runtime data. It can write installer paths while web code write access is granted.
www-data
NGINX serving images, CSS and JavaScript.
Reads public assets. Explicitly cannot read wp-config.php.
root
Woop! Host platform administration.
Not involved in serving your site.
Your files are owned by wpuser and grouped as wp-site. The group gives PHP and NGINX only the
access required to serve the site:
Runtime-data directories under wp-content add group write access. Media, caches, translations and plugin data
continue to work while executable code can remain read-only to PHP.