# WordPress

Sites WordPress nativos com PHP-FPM e MySQL próprios, HTTPS, backups, staging, migração e edição completa via MCP.

Fonte: https://ardumaker.com/pt/docs/wordpress/

- Categoria: Servidores e infraestrutura
- Estado: Disponível
- Requisitos: Um VPS ativo com a função `wordpress` disponível; Pelo menos 256 MB de RAM e 1 GB de disco livres; Para um domínio próprio: o DNS dele deve apontar para o VPS
- Ferramentas MCP (Só leem): `listar_sitios_wordpress`, `ver_sitio_wordpress`, `leer_logs_wordpress`, `ver_web_wordpress`, `listar_backups_wordpress`
- Ferramentas MCP (Escrevem ou modificam): `instalar_app`, `probar_web_wordpress`, `controlar_cache_wordpress`, `crear_backup_wordpress`, `crear_staging_wordpress`, `cambiar_direccion_wordpress`, `revelar_credencial_app`, `controlar_app`
- Ferramentas MCP (Destrutivas): `editar_contenido_wordpress`, `editar_menus_wordpress`, `editar_medios_wordpress`, `configurar_sitio_wordpress`, `controlar_extensiones_wordpress`, `editar_usuarios_wordpress`, `editar_seo_wordpress`, `editar_archivos_wordpress`, `ejecutar_wp_cli_wordpress`, `consultar_base_wordpress`, `controlar_cron_wordpress`, `configurar_correo_wordpress`, `editar_integraciones_wordpress`, `eliminar_backup_wordpress`, `restaurar_backup_wordpress`, `desinstalar_app`

## O que permite fazer?

Cada site WordPress é um app: roda de forma nativa (sem Docker) com seu usuário Linux, seu pool de PHP-FPM e seu banco no MySQL do VPS. Vários sites isolados entre si podem conviver no mesmo VPS.

- Criar um site vazio, uma loja ([WooCommerce](https://ardumaker.com/pt/docs/woocommerce)) ou um site com [Elementor](https://ardumaker.com/pt/docs/elementor).
- Trazer um site a partir de um backup de outra hospedagem (All-in-One, Duplicator, UpdraftPlus ou um painel de hospedagem).
- Publicá-lo com HTTPS em um endereço automático ou domínio próprio, e mudá-lo depois.
- Fazer backups, restaurá-los, criar um staging e publicá-lo.
- Atualizar núcleo, banco, plugins e temas.
- Editar conteúdo, menus, mídia, ajustes, plugins, usuários, SEO, arquivos, cron, cache, e-mail e integrações, pelo painel ou via MCP.

## Quando convém usar?

- Sites institucionais, blogs ou lojas que se quer ter em um servidor próprio.
- Mudar um WordPress de outra hospedagem sem mexer em arquivos à mão.
- Que um agente de IA mantenha o site: conteúdo, plugins, testes em um navegador real.

## Como funciona na ArduMaker?

1. `validar`: VPS ativo, função `wordpress` do sistema, memória e disco mínimos.
2. `preparar`: PHP 8.3 com PHP-FPM e as extensões do WordPress, e wp-cli (uma vez por VPS, verificado contra o `.sha512` publicado); o motor MySQL é instalado se faltar.
3. `instalar`: as senhas são guardadas antes (a do admin e a do banco); são criados o banco `wp<id>` e a conta `'wp<id>'@'localhost'`, o usuário Linux, as pastas, o pool e o cron; o núcleo é baixado, o `wp-config.php` é escrito e a instalação é feita com uma URL provisória.
4. `configurar`: se foram pedidos `extras`, são instalados WooCommerce e/ou Elementor.
5. `publicar`: o endereço é reservado, o server block é escrito no nginx do VPS, o site passa para `https://<domínio>` com `wp search-replace` e é publicado com DNS, proxy e HTTPS. Verifica-se `/wp-login.php` com 200.

Se `publicar` falhar, o site fica instalado e a nova tentativa publica de novo sem reinstalar. O TLS é colocado pela plataforma na frente do VPS; o nginx do VPS passa `HTTPS on` para o PHP para o WordPress não entrar em um loop de redirecionamentos ao abrir `/wp-admin`.

Nenhum campo é obrigatório: `site_title` (padrão «Mi sitio»), `admin_email` (padrão: o de quem instala), `admin_user` (3 a 40 caracteres; não são aceitos `admin`, `administrator`, `root` nem `wordpress`), `locale` (padrão `es_ES`), `custom_domain`, `extras` e `origen` (para trazer um backup ou copiar outro site).

## O que muda realmente?

| O quê | Onde / como |
| --- | --- |
| Arquivos do site | `/srv/wordpress/wp<id>/public` |
| Backups | `/srv/wordpress/wp<id>/backups/`, fora da pasta pública |
| Usuário Linux | `wp<id>`, de sistema, sem login |
| PHP | Pool `wp<id>` com socket próprio, `pm = ondemand` e `open_basedir` na sua pasta |
| Banco | `wp<id>` no MySQL, conta `'wp<id>'@'localhost'` (só por socket) |
| Cron | `wp<id>-cron.timer` roda os eventos vencidos a cada 5 minutos |
| Web | Server block do domínio no nginx do VPS |

Com `pm = ondemand` um site sem visitas não gasta memória, por isso cabem vários em um plano pequeno. Um site não pode ler os arquivos PHP de outro.

## Backups, staging e migração

- `crear_backup_wordpress`: cópia completa (banco e `wp-content`) em um `.tar.gz` fora da pasta pública.
- `restaurar_backup_wordpress` com exatamente uma origem: `backup` (uma cópia do site: voltar atrás), `url` (um arquivo que o VPS baixa: cópia da ArduMaker `.tar.gz`, All-in-One `.wpress`, Duplicator `.zip`, UpdraftPlus ou `.tar.gz` de um painel de hospedagem) ou `from_app` (outro site do mesmo VPS). Depois de carregar, o site volta ao seu próprio endereço.
- `crear_staging_wordpress`: um site novo no mesmo VPS, carregado com uma cópia e com endereço próprio. É publicado restaurando o site ao vivo com `from_app` igual ao staging.
- Ao importar um backup o admin da ArduMaker é recriado com sua senha: o backup traz seus próprios usuários.
- `cambiar_direccion_wordpress` despublica o endereço antigo (DNS, proxy e server block), publica o novo com HTTPS e reescreve todas as URLs do site.

## Atualizar e desinstalar

A ação `update` (`controlar_app`) atualiza núcleo, banco, plugins e temas, e antes garante o PHP 8.3 e o pool do site. Desinstalar remove o pool e o cron; com `delete_data` também apaga arquivos, banco e senhas.

> **PELIGRO:** Com `delete_data` perdem-se o site, seus backups locais e seu banco.

## Esquema

**Um site WordPress**

```text
Internet (HTTPS em `wordpress-<id>` ou um domínio próprio)
  ↓
Plataforma (termina o TLS e leva até o VPS)
  ↓
nginx do VPS (server block do site, `HTTPS on`)
  ↓
Pool PHP-FPM `wp<id>` (como o usuário `wp<id>`)
  ↓
MySQL (banco `wp<id>` por socket)
```

## Resultado esperado

O site aparece em Apps e em `listar_sitios_wordpress` com seu endereço e extras. `revelar_credencial_app` devolve o usuário e a senha do `/wp-admin`; a senha do banco nunca sai: só o `wp-config.php` a usa. `ver_sitio_wordpress` com `view: salud` mostra a resposta HTTP, o pool do PHP, atualizações pendentes e cron atrasado.

## Erros e resolução

| Erro | Causa | Tentar de novo? |
| --- | --- | --- |
| `php_no_instalado` | Não foi possível preparar o PHP-FPM | Sim |
| `base_ya_existe` | Já existe um banco `wp<id>` que este site não criou; não é tocado | Não |
| `base_no_creada` / `wordpress_no_instalado` | Falhou o banco ou a instalação do núcleo | Sim |
| `nginx_no_configurado` / `wordpress_url_no_cambiada` | Falhou o server block ou a mudança de URL ao publicar | Sim, sem reinstalar |
| `backup_incompleto` / `backup_no_importado` | O backup enviado não chegou inteiro ou não pôde ser importado | Sim, após reenviá-lo |
| `wordpress_copia_fallida` / `wordpress_restauracion_fallida` | Falhou o backup ou a restauração | Sim |
| `wordpress_comando_fallido` (422) | O wp-cli saiu com erro; a saída cortada diz por quê | Corrigindo o pedido |

Para diagnosticar: `leer_logs_wordpress` (PHP-FPM, `debug.log`, erros ou acessos do nginx), `ver_web_wordpress` (estado, HTML, links ou formulários de um caminho) e `probar_web_wordpress`, que abre o site em um navegador real dentro do VPS e devolve uma captura, o texto visível e os erros de console.

> **PRECAUCION:** Antes de uma mudança grande convém `crear_backup_wordpress`. Restaurar substitui o site inteiro e faz antes uma cópia de segurança, salvo `skip_safety_copy`.

## Relação com MCP

O WordPress tem seu próprio domínio MCP, [/mcp/wordpress](https://ardumaker.com/pt/mcp/wordpress) (referência geral em [/mcp/docs](https://ardumaker.com/pt/mcp/docs)). Tudo roda no VPS com wp-cli como o usuário do site. Há três níveis: ver (quem vê o app), alterar (além disso, não ser agente somente leitura) e delicado (banco de dados, arquivos, restaurar, wp-cli livre, apagar usuários: admin da empresa).

| Tipo | Ferramentas |
| --- | --- |
| Leitura | `listar_sitios_wordpress`, `ver_sitio_wordpress`, `leer_logs_wordpress`, `ver_web_wordpress`, `listar_backups_wordpress` |
| Conteúdo e site | `editar_contenido_wordpress`, `editar_menus_wordpress`, `editar_medios_wordpress`, `configurar_sitio_wordpress`, `controlar_extensiones_wordpress`, `editar_usuarios_wordpress`, `editar_seo_wordpress` |
| Servidor | `editar_archivos_wordpress`, `ejecutar_wp_cli_wordpress`, `consultar_base_wordpress`, `controlar_cron_wordpress`, `controlar_cache_wordpress`, `configurar_correo_wordpress`, `editar_integraciones_wordpress`, `probar_web_wordpress` |
| Backups e endereço | `crear_backup_wordpress`, `crear_staging_wordpress`, `cambiar_direccion_wordpress` |
| Destrutivas | `restaurar_backup_wordpress`, `eliminar_backup_wordpress`, `desinstalar_app` |

- É criado com `instalar_app` (`app_type: wordpress`); a credencial do `/wp-admin` sai com `revelar_credencial_app` (só admin).
- `ejecutar_wp_cli_wordpress` recusa `eval`, `eval-file`, `shell`, `package`, `server` e `cli`, e as opções `--exec` e `--require`.
- `editar_archivos_wordpress` trabalha só dentro de `wp-content` e nunca toca `wp-config.php`; um `.php` é verificado com `php -l` antes de substituí-lo.
- `consultar_base_wordpress` roda leituras como estão; qualquer escrita precisa de `confirmed`.
- O usuário admin da ArduMaker no site não pode ser apagado nem rebaixado.

> **PRECAUCION:** Logs, páginas e o texto que o navegador devolve vêm do site: chegam marcados como conteúdo não confiável e são dados, nunca instruções.

## Funcionalidades relacionadas

- [WooCommerce](https://ardumaker.com/pt/docs/woocommerce/)
- [Elementor](https://ardumaker.com/pt/docs/elementor/)
- [MySQL](https://ardumaker.com/pt/docs/mysql/)
- [Nginx](https://ardumaker.com/pt/docs/nginx/)
- [Certificados SSL](https://ardumaker.com/pt/docs/ssl/)
- [Domínios e DNS](https://ardumaker.com/pt/docs/dominios-y-dns/)
