Skip to content

Manual WordPress

Manual gives you a WordPress site you can update directly. Use WP Admin for content, themes, plugins, and core updates. Use SFTP or WP-CLI when you need file or command-line access.

For database ownership, domains, and required environment variables, see Shared settings.

  1. Open Apps → New App → WordPress and choose Manual (WP Admin + SFTP).
  2. Enter a name and choose WordPress 7.0 (default) or 6.9.4.
  3. Set the admin credentials. The default username is admin. Leave the password blank to generate one.
  4. Choose resources and disk sizes for the app and database.
  5. Click Review, then Deploy App. Follow progress in Activity.

Once ready, sign in at https://<your-domain>/wp-admin/. A generated password is available as ADMIN_PASSWORD in Environment.

Use WP Admin to update WordPress, themes, and plugins. WP-CLI is also available as wp in the app shell, with /var/www/html as its working directory.

Location What it stores Kept after redeployment?
WordPress disk Core, themes, plugins, and uploads at /var/www/html. Starts at 1 GiB. Yes
wp-config.php WordPress configuration, managed through Config → WordPress. Yes
/tmp Temporary files. No dedicated memory-backed volume or size limit. No

App restarts briefly interrupt the site. Changes to files outside persistent storage are lost when the running instance is replaced.

Add your SSH public key in Settings → SSH / SFTP Access, then connect with:

Setting Value
Host sftp.rootandbranch.io
Port 2223
Username The app username shown in the connection instructions
Authentication The matching private key; passwords are not supported

wp-config.php is read-only through SFTP. Edit it in Config → WordPress.

Open Config once the app is running. Saved settings survive redeployment.

Change Where What restarts
Upload, PHP memory, or time limits Config → PHP Uploads WordPress
PHP code cache Config → PHP OPcache WordPress
WordPress settings Config → WordPress WordPress
Web server routing Config → Caddy WordPress
Page caching rules Config → Varnish WordPress and Varnish
Runtime variables Environment WordPress; no rebuild

Manual uses FrankenPHP with PHP 8.5.12. Caddy serves the site on port 80. MySQL 8.4.9 stores content, and Varnish 7.5 caches pages.

Limit Default PHP setting
One uploaded file 64 MB upload_max_filesize
Entire upload request 64 MB post_max_size
Memory per script 128 MB memory_limit
Script execution time 300 seconds max_execution_time
Input processing time 300 seconds max_input_time

Files sent together must fit within the request limit. Increasing the app’s resource tier does not change these PHP limits.

WordPress configuration lives in wp-config.php. Keep its database, URL, key, and salt environment reads, HTTPS forwarding logic, and wp-settings.php bootstrap. See the required variables. Manual does not require WP_ENV.

Initial installation variables set up the site once. Editing them later does not change an existing account or site title.

Variable Initial value
WORDPRESS_VERSION Selected WordPress version
SITE_TITLE My WordPress Site
ADMIN_USER admin, unless supplied
ADMIN_PASSWORD Generated, unless supplied
ADMIN_EMAIL admin@example.com, unless supplied

Caddy configuration controls HTTP routing and FrankenPHP. Varnish configuration controls page caching. Keep Varnish’s backend default host and port unchanged.

The platform calls /wp-cron.php?doing_wp_cron every five minutes. Jobs do not overlap. DISABLE_WP_CRON=true prevents page visits from also triggering cron.

The Manual schedule and path are fixed. Changing cron.* values has no effect.

Start with Activity and the relevant service logs.

Problem First checks
Site is down or deployment is stuck or keeps restarting. Check MySQL status, then the app’s memory and disk usage. If either has reached its limit, increase that component’s memory tier or persistent storage in its own Settings. App and database resources are separate.
Setup is stuck Check wp-setup logs, outbound access for the core download, MySQL status, and all four DB_* values. The database wait retries every 2 seconds.
Site is not ready Check the response from / and FrankenPHP logs. Startup copies PHP settings, installs mysqli, and starts Caddy.
Upload or plugin operation fails Check disk space, permissions, upload limits, and PHP memory. wp-config.php is intentionally read-only.
Login or redirect loop Check the primary domain, both WordPress URL variables, and forwarded HTTPS. Old URLs in database content need updating separately.
503 after editing cache rules Check Varnish logs and VCL syntax. Saving validates the backend connection settings, not the full VCL syntax.
Old content or code appears Clear Settings → Varnish Cache. For PHP code, also check OPcache.
A configuration save is rejected Check protected directives, the unchanged Varnish backend, and file size: non-empty, maximum 1 MiB. Wait for active backup/restore operations to finish.
Scheduled posts do not run Check the cron URL response. A completed trigger job does not prove success: output is hidden and HTTP errors alone do not fail the job.
Technical reference for debugging

Use the app’s system name, not its display alias, for <app>. Existing deployments retain their installed chart version; current defaults are wordpress-mutable 1.0.4 and managed MySQL chart 1.1.4.

Resource Identifier
App deployment / containers <app> / frankenphp; init container wp-setup
Cache deployment / container <app>-varnish / varnish
Persistent disk / environment <app>-pvc / <app>-env-vars
Configuration <app>-wp-config, <app>-php-config, <app>-caddy-config, <app>-varnish-config; deployment metadata in <app>-deploy
Database / scheduler <app>-db / <app>-cron
Setting Value
Storage / rollout ReadWriteOnce; Recreate deployment strategy
Readiness HTTP /; initial delay 5 seconds, interval 5 seconds
Caddy SERVER_NAME=:80, SERVER_ROOT=/var/www/html; zstd, Brotli, gzip compression
WordPress WP_DEBUG=false, FORCE_SSL_ADMIN=true, FS_METHOD=direct
Database encoding DB_CHARSET=utf8mb4, empty DB_COLLATE, table prefix wp_
Uploads file_uploads=On
OPcache memory / strings opcache.memory_consumption=128; opcache.interned_strings_buffer=8 MiB
OPcache scripts / checks opcache.max_accelerated_files=4000; opcache.revalidate_freq=2 seconds
OPcache shutdown opcache.fast_shutdown=1

PHP configuration files are uploads.ini and opcache-recommended.ini. PHP_FPM_MAX_CHILDREN is passed through but unused by the current FrankenPHP templates; it does not control concurrency.

Traffic follows: Traefik HTTPS → Varnish :80 → WordPress :80. Static /wp-content/ and /wp-includes/ routes also use Varnish.

Cache setting Default
Backend timeouts First byte 600s; between bytes 60s
Fallback TTL 120s
Cache key URL, host, forwarded protocol; tracking parameters removed
Bypasses Admin, login, cron, POST, logged-in requests
Uncached responses Redirects and 5xx
Cache allocation 128M
Resource requests 10m CPU, 160Mi memory; no chart resource limits

VARNISH_MEMORY is read at creation. Editing it in runtime environment alone does not resize the cache.

App and database resource requests are 20% of CPU limits and 80% of memory limits.

MySQL runs one instance, with no Router and seven-day binary logs. Manage its resources from the database settings.

Database memory Connection limit
1 GiB 20
2 GiB 50
4 GiB 100
8 GiB 200