# WordPress Service

URL: /docs/services/wordpress

Source: https://github.com/easypanel-io/monorepo/blob/main/apps/website/content/docs/services/wordpress.mdx

Deploy and manage WordPress, its runtime, and common site operations.



The WordPress service provides a managed WordPress runtime with NGINX, PHP, Git,
a browser IDE, domains, scripts, resource limits, and common WP-CLI operations.
It can manage WordPress core, users, roles, options, themes, plugins, media, the
database, caches, and site migrations from the Easypanel interface.

## Requirements [#requirements]

A WordPress service uses MySQL or MariaDB. You can select an existing database
service from the same project or choose **Create new database**. When you create
a new database, Easypanel adds a MariaDB service named
`<wordpress-service>-db` with generated credentials.

Keep the database private unless an external database client requires remote
access.

## Create a WordPress service [#create-a-wordpress-service]

1. Open a project and select **New Service**.
2. Select **WordPress** and enter a service name.
3. Choose the initial WordPress version. Use `latest`, `nightly`, or a specific
   version such as `6.6.2`.
4. Select an existing MySQL or MariaDB service, or select **Create new
   database**.
5. Create the service. Easypanel initializes the files, builds the WordPress
   image, deploys it, and configures the database connection.
6. Optionally clone site files from the **Git** section.
7. Open the generated service domain, or add a domain when the project does not
   have automatic service domains, then complete the WordPress installation in
   the browser.

Git content is cloned into the service's code directory when you configure it.

<Callout type="warn">
  An existing database may already contain data. Back it up before connecting it
  to a new WordPress service or importing another site.
</Callout>

## Overview [#overview]

The overview shows the service state and provides start, stop, restart, rebuild,
and delete actions. Rebuild the WordPress image after changing PHP or NGINX
runtime settings.

Stopping a service removes its running deployment but keeps its configuration.
Restarting enables and redeploys it.

## Git [#git]

Use Git to clone themes, plugins, or a complete site repository into the
WordPress code directory. Configure the repository URL and branch during
initialization or clone them later.

For a private repository, add the service's SSH key as a read-only deploy key.
The Git settings also configure the author name and email used by Git commands
inside the service.

Avoid committing generated uploads, caches, secrets, or environment-specific
`wp-config.php` values.

## Domains [#domains]

Add a domain to make the site public. A domain can configure:

* the hostname and path;
* HTTP or HTTPS;
* an internal HTTP or HTTPS connection;
* the target service port;
* a certificate resolver;
* wildcard routing and Traefik middlewares.

WordPress URLs stored in the database must agree with the primary public
domain. When moving to a different hostname, use **Search Replace** to update
old URLs after previewing the changes.

## Scripts [#scripts]

Scripts execute shell content inside the WordPress container. They can run
manually, on a cron schedule, or through a webhook token. Typical uses include
WP-CLI maintenance, cache warming, and scheduled imports.

Treat webhook tokens as secrets, and make scheduled scripts safe to run more
than once.

## Redirects [#redirects]

Redirect rules use a regular expression and replacement URL. Rules can be
enabled or disabled and can send temporary or permanent redirects.

Test temporary redirects before making them permanent. A redirect loop can
prevent access to both the public site and WordPress administration.

## Basic Auth [#basic-auth]

Basic Auth adds a proxy-level username and password prompt in front of every
attached domain. Use it for staging sites or private previews. It is separate
from WordPress users and does not replace WordPress roles and permissions.

## Resources [#resources]

CPU and memory reservations describe the service's expected baseline. Limits
protect the rest of the server from unexpected usage.

Allow enough memory for PHP, WordPress updates, plugin operations, imports,
thumbnail regeneration, and traffic spikes. A low memory limit can terminate
these operations before they finish.

## IDE [#ide]

The optional browser IDE opens the WordPress files, using `/code` as its default
folder. Access is protected by a generated token. Rotate the token after
disclosure and disable the IDE when it is not needed.

## Update [#update]

The Update section updates WordPress core and applies any required database
upgrade.

Before updating:

1. Export the database and site files.
2. Review theme and plugin compatibility.
3. Enable maintenance mode when the update may affect visitors.
4. Apply the core update.
5. Verify the public site, administration area, and scheduled jobs.

Do not interrupt a core update or its database migration.

## PHP [#php]

The PHP section controls:

* the PHP version;
* maximum upload size and execution time;
* OPcache;
* custom `php.ini` content;
* optional ionCube and SQL Server extensions.

Save the configuration, rebuild the WordPress image, and verify the service
after changing the PHP version or extensions. Confirm that every active plugin
and theme supports the selected PHP version.

## NGINX [#nginx]

The NGINX section controls the document root and server configuration. The
default document root is `/code`.

The configuration supports the `{{ document_root }}` and `{{ fpm_socket }}`
placeholders used by the generated WordPress runtime. An invalid configuration
can prevent the service from starting, so keep a copy of the last working
version.

## Environment [#environment]

Environment variables use `.env` syntax and are available to the WordPress
container:

```dotenv
WP_ENV=production
CUSTOM_API_KEY=change-me
```

Restart or redeploy after changing environment values. Store secrets in
Easypanel instead of committing them to Git.

## WP Config [#wp-config]

WP Config edits the raw `wp-config.php` file. Use it for WordPress constants and
configuration that cannot be expressed through environment variables.

<Callout type="warn">
  Saving invalid PHP or removing Easypanel's database configuration can make the
  site unavailable. Export the current file before editing it.
</Callout>

## Users [#users]

The Users section lists WordPress accounts and their roles. You can create,
update, or delete users and set a new password while editing an account.

Use unique administrator accounts, grant the least-privileged suitable role,
and remove accounts that no longer require access.

## Roles [#roles]

Roles lists the roles defined by WordPress and installed plugins. You can create
custom roles and delete roles that are no longer needed.

Check whether users depend on a role before deleting it. Role capabilities may
also be managed by plugins and can change when a plugin is disabled.

## Options [#options]

Options exposes names and raw values from the WordPress options table. You can
create, edit, or delete an option.

<Callout type="warn">
  WordPress core and plugins may store serialized or structured values in the
  options table. Editing them as plain text can corrupt configuration. Back up
  the database and change only options whose format you understand.
</Callout>

## Themes [#themes]

Themes lists installed themes, versions, activation status, and available
updates. You can search the WordPress theme directory, install and activate a
theme, or activate an existing theme.

Test theme updates on a staging copy when the site contains template overrides
or custom code.

## Plugins [#plugins]

Plugins lists installed plugins, versions, activation status, and available
updates. You can search the WordPress plugin directory, install and activate a
plugin, or activate and deactivate installed plugins.

Update plugins in small groups and verify the site between changes. Deactivating
security, caching, or migration plugins can immediately change site behavior.

## Maintenance [#maintenance]

Maintenance toggles WordPress maintenance mode. Enable it during operations that
must not serve partially migrated or inconsistent content, then disable it after
verifying the site.

Maintenance mode is independent from stopping the Easypanel service: the
container continues running while WordPress displays its maintenance response.

## Media [#media]

**Regenerate Media** rebuilds image thumbnails for the complete media library.
It can take a long time on large sites and can consume significant CPU and
storage I/O.

Run it during a low-traffic window and leave enough free disk space for
generated files.

## Database [#database]

**Optimize Database** runs WordPress database table optimization. Back up the
database first and schedule the operation outside peak traffic for large sites.

Use the database service's **Backups** section for recurring backups. The
WordPress **Import Export** section provides on-demand transfer of a site. See
[Database Backups](/docs/backups/database) for scheduling and restore guidance,
and protect persistent uploads separately with a
[Volume Backup](/docs/backups/volumes).

## Cache [#cache]

The Cache section can flush the WordPress object cache and delete all transient
entries. Both actions can temporarily increase database and application load as
the site rebuilds cached data.

Use cache flushing after configuration or deployment changes, not as a routine
fix for unrelated errors.

## Profiling [#profiling]

Profiling reports timing and cache metrics for three WordPress execution stages:

* **Bootstrap**
* **Main Query**
* **Template**

Use it to identify whether slow requests are dominated by WordPress startup,
database queries, or theme rendering. Repeat measurements before and after a
change instead of relying on a single request.

## Search Replace [#search-replace]

Search Replace updates matching content throughout the WordPress database. It
is commonly used when changing a domain or URL scheme.

Always run **Dry Run** first. Review the preview, export the database, then run
the replacement only when the search and replacement values are correct.

<Callout type="warn">
  Search and replace affects every matching database value and cannot be undone
  from Easypanel. Restoring a backup may be the only recovery from an incorrect
  replacement.
</Callout>

## Import Export [#import-export]

Import Export supports four operations:

* download a database export;
* upload a database import;
* download the WordPress files;
* upload a files archive.

Use both the database and files exports for a complete site transfer. Keep the
two exports from the same point in time so uploads, plugin versions, and
database records remain consistent.

Imports overwrite site state. Enable maintenance mode, create a fresh backup,
verify upload size and free disk space, and keep the browser open until the
operation completes.

## Service deletion [#service-deletion]

<Callout type="warn">
  Destroying a WordPress service permanently removes its files, generated image,
  and domains. Export the database and site files, then verify the downloads
  before confirming deletion. Delete the database service separately only when
  no other service uses it.
</Callout>
