---
title: "Hospedar WordPress na VPS: Nginx, PHP 8.3 e MariaDB"
description: "Instale WordPress na VPS Ubuntu com Nginx, PHP FPM 8.3, MariaDB, HTTPS com Certbot, permissões certas, OPcache, cache de página e Redis opcional."
url: "https://streethosting.com.br/guias/vps/hospedar-wordpress-vps-nginx"
category: "vps"
slug: "hospedar-wordpress-vps-nginx"
datePublished: "2026-09-28"
dateModified: "2026-09-28"
author: "Equipe StreetHosting"
difficulty: "intermediario"
language: "pt-BR"
keywords:
  - "hospedar wordpress vps"
  - "wordpress nginx ubuntu"
  - "instalar wordpress vps"
  - "wordpress php fpm 8.3"
  - "wordpress mariadb vps"
---

# WordPress do zero na VPS com Nginx, PHP FPM e MariaDB

Instalar WordPress na mão, sem painel, dá controle total sobre desempenho e segurança. O caminho é curto: Nginx, PHP FPM e MariaDB no Ubuntu 24.04, banco dedicado, HTTPS e duas camadas de cache.

> **Resposta rápida**
>
> Para **hospedar WordPress na VPS**, instale Nginx, PHP FPM 8.3 com as extensões que o WordPress pede e MariaDB, crie um banco e um usuário exclusivos, baixe o WordPress, preencha a configuração com as credenciais e salts novos, aponte um server block do Nginx para a pasta e emita o HTTPS com Certbot. Depois ative OPcache e cache de página; Redis como object cache é opcional.

## A pilha que você vai montar

Tudo aqui roda em Ubuntu 24.04 LTS, que traz PHP 8.3 e MariaDB 10.11 nos repositórios oficiais. As duas versões estão dentro do que o WordPress recomenda hoje: PHP 8.3 ou superior e MariaDB 10.11 ou superior. No Ubuntu 22.04, o PHP padrão é o 8.1 e o MariaDB é o 10.6, ambos abaixo da recomendação; prefira instalar em uma VPS nova com 24.04.

| Componente | Versão no Ubuntu 24.04 | Papel |
| --- | --- | --- |
| Nginx | 1.24 | Recebe as conexões, serve arquivos estáticos e repassa o PHP |
| PHP FPM | 8.3 | Executa o WordPress em processos que ficam em memória |
| MariaDB | 10.11 | Guarda posts, usuários, pedidos e configurações |
| Certbot | Plugin do Nginx | Emite e renova o certificado Let's Encrypt |
| Redis (opcional) | 7.x | Object cache para consultas repetidas ao banco |

Antes de começar, confira três coisas: o domínio já [aponta para o IP da VPS pelo DNS](https://streethosting.com.br/guias/vps/apontar-dominio-vps-registro-dns), você entra por SSH com um usuário sudo, e o firewall UFW libera SSH. Se a ideia é trazer um site que já existe, a instalação é a mesma e a cópia dos dados segue o guia de [migrar WordPress para VPS](https://streethosting.com.br/guias/vps/migrar-site-wordpress-para-vps).

## Nginx, PHP FPM 8.3 e extensões

Um comando instala a pilha inteira com as extensões que o WordPress exige ou recomenda:

```
sudo apt update
sudo apt install -y nginx mariadb-server php8.3-fpm php8.3-mysql \
  php8.3-curl php8.3-xml php8.3-mbstring php8.3-intl php8.3-zip \
  php8.3-gd php8.3-opcache php-imagick
sudo ufw allow 'Nginx Full'
```

- **mysql:** fornece o mysqli, a única extensão sem a qual o WordPress nem abre.
- **curl, xml, mbstring, intl e zip:** chamadas a APIs e atualizações, leitura de XML e feeds, textos com acento, formatação regional e instalação de plugins por arquivo compactado.
- **gd e imagick:** geram as miniaturas das imagens enviadas. O Imagick preserva melhor a qualidade e lida com mais formatos.
- **opcache:** guarda o PHP já compilado em memória. É o ganho de desempenho mais barato da lista.

Extensões como exif, fileinfo e openssl já vêm no pacote comum do PHP. Em seguida, crie um arquivo com os limites que o WordPress costuma precisar para upload de mídia e plugins maiores:

```
# /etc/php/8.3/fpm/conf.d/99-wordpress.ini
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
```

Aplique com `sudo systemctl reload php8.3-fpm`. Arquivos próprios em `conf.d` sobrevivem às atualizações do pacote, ao contrário de edições no `php.ini` original.

## Banco de dados no MariaDB

Rode `sudo mariadb-secure-installation` e aceite remover usuários anônimos, o banco de teste e o login remoto do root. Depois crie o banco e um usuário que só enxerga esse banco:

```
sudo mariadb

CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_usuario'@'localhost' IDENTIFIED BY 'SENHA_FORTE_AQUI';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wp_usuario'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```

Gere a senha com `openssl rand -base64 24`. O usuário só existe para conexões locais, então a porta 3306 continua fechada no firewall: WordPress e banco conversam pelo socket da própria máquina. Mais detalhes de segurança do banco estão em [instalar MariaDB ou MySQL na VPS Ubuntu](https://streethosting.com.br/guias/vps/instalar-mariadb-mysql-vps-ubuntu).

> **Dica**
>
> O buffer pool padrão do MariaDB é de 128 MB. Se o banco passa disso, aumente em um arquivo próprio, como `/etc/mysql/mariadb.conf.d/99-wordpress.cnf`, com a seção `[mysqld]` e a linha `innodb_buffer_pool_size = 512M`, e reinicie o serviço. Consultas servidas da memória não tocam o disco.

## Arquivos, configuração e salts

Baixe a versão atual direto do wordpress.org e copie para a pasta do site:

```
cd /tmp
curl -LO https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
sudo mkdir -p /var/www/seu-dominio.com.br
sudo cp -a wordpress/. /var/www/seu-dominio.com.br/
cd /var/www/seu-dominio.com.br
sudo cp wp-config-sample.php wp-config.php
sudo nano wp-config.php
```

No `wp-config.php`, preencha os dados do banco e acrescente duas proteções antes da linha que diz para parar de editar:

```
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wp_usuario' );
define( 'DB_PASSWORD', 'SENHA_FORTE_AQUI' );
define( 'DB_HOST', 'localhost' );

define( 'DISALLOW_FILE_EDIT', true );
define( 'WP_POST_REVISIONS', 20 );
```

O primeiro bloqueia o editor de código de temas e plugins dentro do painel, que é o primeiro lugar que um invasor com senha de administrador usa para instalar uma porta dos fundos. O segundo limita as revisões guardadas por post, o que segura o crescimento do banco.

Agora os salts. São as chaves que assinam os cookies de login, e o arquivo de exemplo vem com o texto `put your unique phrase here` nas oito linhas de `AUTH_KEY` a `NONCE_SALT`. Gere um conjunto único com `curl -s https://api.wordpress.org/secret-key/1.1/salt/` e substitua as oito linhas pelo resultado. Trocar os salts no futuro derruba todas as sessões abertas, o que é exatamente o que você quer depois de suspeitar de um vazamento de senha.

## Server block e permissões

O PHP FPM roda como `www-data`, e o jeito mais simples de o WordPress conseguir atualizar a si mesmo e aos plugins é esse usuário ser o dono dos arquivos, com o arquivo de configuração fechado para o resto:

```
sudo chown -R www-data:www-data /var/www/seu-dominio.com.br
sudo find /var/www/seu-dominio.com.br -type d -exec chmod 755 {} +
sudo find /var/www/seu-dominio.com.br -type f -exec chmod 644 {} +
sudo chmod 640 /var/www/seu-dominio.com.br/wp-config.php
```

O custo desse modelo é que um plugin vulnerável consegue alterar arquivos do site. Para vários sites na mesma VPS, dê a cada um seu usuário e seu pool do PHP FPM, como mostra o guia de [vários sites na mesma VPS com Nginx](https://streethosting.com.br/guias/vps/nginx-varios-sites-mesma-vps), assim uma invasão não passa de um site para o outro. Crie o server block em `/etc/nginx/sites-available/seu-dominio.com.br`:

```
server {
    listen 80;
    server_name seu-dominio.com.br www.seu-dominio.com.br;
    root /var/www/seu-dominio.com.br;
    index index.php;

    client_max_body_size 64M;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    location = /xmlrpc.php {
        deny all;
    }

    location ~ /\.(?!well-known) {
        deny all;
    }

    location ~* \.(css|js|jpg|jpeg|png|gif|webp|avif|svg|ico|woff2)$ {
        expires 30d;
        access_log off;
    }
}
```

O `try_files` faz os links permanentes funcionarem sem .htaccess, os blocos de negação escondem arquivos ocultos e o xmlrpc.php, e o último bloco deixa o navegador guardar imagens, CSS e JavaScript por 30 dias. Ative e teste antes de recarregar:

```
sudo ln -s /etc/nginx/sites-available/seu-dominio.com.br /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
```

## HTTPS com Certbot e instalação

Emita o certificado antes de abrir o instalador. Assim o WordPress grava o endereço do site com https desde o primeiro minuto e você não precisa corrigir URLs no banco depois.

```
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d seu-dominio.com.br -d www.seu-dominio.com.br
sudo certbot renew --dry-run
```

O Certbot acrescenta o bloco da porta 443 ao server block e configura o redirecionamento de HTTP para HTTPS; se ele perguntar, escolha redirecionar. A renovação fica a cargo de um timer do systemd. Os detalhes de renovação, vários domínios e cabeçalhos de segurança estão em [certificado SSL com Let's Encrypt e Nginx](https://streethosting.com.br/guias/vps/certificado-ssl-vps-lets-encrypt-nginx).

Abra `https://seu-dominio.com.br` no navegador e conclua o instalador: idioma, título do site, usuário administrador e senha.

- [ ] Usuário administrador com nome próprio, nunca admin
- [ ] Senha longa gerada pelo próprio instalador ou por um gerenciador
- [ ] Email do administrador que alguém realmente lê
- [ ] Links permanentes com nome do post, em Configurações
- [ ] Atualizações automáticas de plugins ligadas para os plugins confiáveis

## OPcache, cache de página e Redis

### OPcache e processos do PHP

Acrescente ao mesmo `99-wordpress.ini` os ajustes do OPcache e recarregue o PHP FPM:

```
opcache.enable = 1
opcache.memory_consumption = 192
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 60
```

Com revalidação a cada 60 segundos, uma atualização de plugin pode levar até um minuto para aparecer; recarregue o PHP FPM se precisar na hora. O pool padrão vem com `pm.max_children = 5`, baixo para qualquer site com movimento. Descubra quanto cada processo ocupa:

```
ps -o rss= -C php-fpm8.3 | awk '{s+=$1; n++} END {print s/n/1024 " MB por processo"}'
```

Divida a RAM que sobra para o PHP, depois de descontar sistema e banco, por esse valor, e use o resultado como teto do `pm.max_children` em `/etc/php/8.3/fpm/pool.d/www.conf`. O número de vCPU limita quantos processos trabalham de fato ao mesmo tempo; o teto de RAM impede que um pico leve a VPS para o swap.

### Cache de página no Nginx

Com o FastCGI cache, o Nginx guarda o HTML gerado e entrega a próxima visita sem chamar o PHP nem o banco. Crie a zona de cache:

```
# /etc/nginx/conf.d/wordpress-cache.conf
fastcgi_cache_path /var/cache/nginx/wordpress levels=1:2 keys_zone=WORDPRESS:64m inactive=60m max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
```

O Certbot transformou o server block original no bloco da porta 443. Nele, antes dos blocos location, defina quando não usar cache, e troque o bloco do PHP por esta versão com cache ligado:

```
set $sem_cache 0;
if ($request_method = POST) { set $sem_cache 1; }
if ($query_string != "") { set $sem_cache 1; }
if ($request_uri ~* "/wp-admin/|/wp-login.php|/carrinho/|/finalizar-compra/|/minha-conta/") { set $sem_cache 1; }
if ($http_cookie ~* "wordpress_logged_in|wp-postpass|comment_author|woocommerce_items_in_cart") { set $sem_cache 1; }

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_cache WORDPRESS;
    fastcgi_cache_valid 200 301 302 10m;
    fastcgi_cache_bypass $sem_cache;
    fastcgi_no_cache $sem_cache;
    add_header X-Cache $upstream_cache_status;
}
```

Teste com `curl -sI https://seu-dominio.com.br | grep -i x-cache` duas vezes: a primeira resposta vem como MISS e a segunda como HIT. Usuários logados, carrinho e checkout nunca entram no cache; ajuste os caminhos da loja se o seu WooCommerce usa outros endereços.

> **Atenção**
>
> Esse cache não é limpo sozinho quando você publica ou edita um post: a página antiga pode aparecer por até 10 minutos. Aceite essa janela, reduza a validade ou instale um plugin de purge compatível com FastCGI cache. Quem não quer mexer no Nginx pode usar um plugin de cache que gera HTML estático, com ganho parecido.

### Redis como object cache (opcional)

O object cache guarda resultados de consultas ao banco entre requisições. Ele não acelera páginas que já saem do cache de página, mas faz diferença em tudo que é dinâmico: painel, usuários logados, loja. Instale com `sudo apt install -y redis-server php-redis`, recarregue o PHP FPM, instale o plugin Redis Object Cache e ative em Configurações. A configuração de senha, memória máxima e política de descarte está em [instalar Redis na VPS Ubuntu](https://streethosting.com.br/guias/vps/configurar-redis-vps-ubuntu).

## Qual VPS usar

Essa pilha completa, com Nginx, PHP FPM, MariaDB e Redis, fica confortável a partir de 4 GB de RAM. Um blog pequeno com cache roda em 2 GB, com poucos processos PHP e swap como rede de segurança. Na linha [VPS Xeon](https://streethosting.com.br/vps/xeon), os degraus que mais aparecem para WordPress são:

- **3 vCPU, 4 GB e 40 GB NVMe por R$ 40,00:** blog ativo ou site institucional com cache de página.
- **6 vCPU, 8 GB e 80 GB NVMe por R$ 74,00:** loja WooCommerce pequena ou alguns sites na mesma VPS.
- **9 vCPU, 16 GB e 160 GB NVMe por R$ 142,00:** loja com catálogo grande, muitos usuários logados ou banco que já passa de alguns gigabytes.

A Xeon entrega mais vCPU por real, o que combina com o PHP FPM, que atende várias páginas em paralelo, e vem com AntiDDoS Enterprise, NVMe e latência média de 20 ms no Brasil a partir de São Paulo. Quando o gargalo é o tempo de resposta das páginas que não podem ser cacheadas, como checkout e painel, a VPS Ryzen 9 9950X com clock de até 5,7 GHz responde mais rápido; o plano de 4 vCPU e 8 GB DDR5 sai por R$ 114,00. A conta completa de visitas por plano, com as duas linhas, está em [como escolher VPS para WordPress](https://streethosting.com.br/guias/vps/escolher-vps-para-wordpress).

## Perguntas frequentes

### Preciso de um painel de hospedagem para rodar WordPress na VPS?

Não. Nginx, PHP FPM e MariaDB instalados pelo terminal bastam, e sobra mais memória para o site. Um painel ajuda quem administra dezenas de sites de clientes, mas acrescenta consumo de recursos e, em muitos casos, custo de licença.

### Qual versão do PHP usar com WordPress?

O WordPress recomenda PHP 8.3 ou superior, que é a versão padrão do Ubuntu 24.04. Antes de trocar a versão de um site que já existe, teste tema e plugins em uma cópia, porque plugins antigos podem não ser compatíveis.

### Nginx ou Apache para WordPress?

Os dois funcionam. O Nginx com PHP FPM consome menos memória por conexão e serve arquivos estáticos com mais eficiência, por isso virou padrão em VPS. A diferença prática é que o Nginx ignora o .htaccess: regras de plugins de segurança e de redirecionamento precisam ir para o server block.

### Como deixar o WordPress mais rápido na VPS?

Ative o OPcache, use cache de página no Nginx ou por plugin, ajuste o número de processos do PHP FPM à RAM disponível e mantenha o banco em NVMe. Redis como object cache ajuda sites com muitos usuários logados e lojas WooCommerce.

### É seguro bloquear o xmlrpc.php?

Para a maioria dos sites, sim, e isso corta uma porta comum de ataques de força bruta. O arquivo é usado pelo aplicativo móvel do WordPress, por publicação remota e por alguns plugins de integração. Se você usa algum desses, libere o arquivo e proteja o login com Fail2ban ou limite de requisições.

## Guias relacionados

- [VPS para WordPress: como escolher RAM, CPU e disco](https://streethosting.com.br/guias/vps/escolher-vps-para-wordpress.md)
- [Como instalar WordPress com Docker Compose na VPS](https://streethosting.com.br/guias/vps/instalar-wordpress-docker-vps.md)
- [Como migrar site WordPress para VPS sem perder visitas](https://streethosting.com.br/guias/vps/migrar-site-wordpress-para-vps.md)
- [Certificado SSL na VPS com Let's Encrypt e Nginx](https://streethosting.com.br/guias/vps/certificado-ssl-vps-lets-encrypt-nginx.md)
- [WordPress com alto tráfego em VPS no Brasil](https://streethosting.com.br/guias/vps/wordpress-alto-trafego-vps-brasil.md)

## Produtos citados

- https://streethosting.com.br/vps/xeon
- https://streethosting.com.br/vps
- https://streethosting.com.br/vps/ryzen

## Dados estruturados

```json
[
  {
    "@context": "https://schema.org",
    "@type": [
      "Article",
      "TechArticle"
    ],
    "headline": "WordPress do zero na VPS com Nginx, PHP FPM e MariaDB",
    "name": "Hospedar WordPress na VPS: Nginx, PHP 8.3 e MariaDB",
    "abstract": "Instalar WordPress na mão, sem painel, dá controle total sobre desempenho e segurança. O caminho é curto: Nginx, PHP FPM e MariaDB no Ubuntu 24.04, banco dedicado, HTTPS e duas camadas de cache.",
    "description": "Instale WordPress na VPS Ubuntu com Nginx, PHP FPM 8.3, MariaDB, HTTPS com Certbot, permissões certas, OPcache, cache de página e Redis opcional.",
    "datePublished": "2026-09-28",
    "dateModified": "2026-09-28",
    "author": {
      "@type": "Organization",
      "name": "Equipe StreetHosting"
    },
    "publisher": {
      "@type": "Organization",
      "name": "StreetHosting",
      "url": "https://streethosting.com.br"
    },
    "inLanguage": "pt-BR",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://streethosting.com.br/guias/vps/hospedar-wordpress-vps-nginx"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Preciso de um painel de hospedagem para rodar WordPress na VPS?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Não. Nginx, PHP FPM e MariaDB instalados pelo terminal bastam, e sobra mais memória para o site. Um painel ajuda quem administra dezenas de sites de clientes, mas acrescenta consumo de recursos e, em muitos casos, custo de licença."
        }
      },
      {
        "@type": "Question",
        "name": "Qual versão do PHP usar com WordPress?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "O WordPress recomenda PHP 8.3 ou superior, que é a versão padrão do Ubuntu 24.04. Antes de trocar a versão de um site que já existe, teste tema e plugins em uma cópia, porque plugins antigos podem não ser compatíveis."
        }
      },
      {
        "@type": "Question",
        "name": "Nginx ou Apache para WordPress?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Os dois funcionam. O Nginx com PHP FPM consome menos memória por conexão e serve arquivos estáticos com mais eficiência, por isso virou padrão em VPS. A diferença prática é que o Nginx ignora o .htaccess: regras de plugins de segurança e de redirecionamento precisam ir para o server block."
        }
      },
      {
        "@type": "Question",
        "name": "Como deixar o WordPress mais rápido na VPS?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Ative o OPcache, use cache de página no Nginx ou por plugin, ajuste o número de processos do PHP FPM à RAM disponível e mantenha o banco em NVMe. Redis como object cache ajuda sites com muitos usuários logados e lojas WooCommerce."
        }
      },
      {
        "@type": "Question",
        "name": "É seguro bloquear o xmlrpc.php?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Para a maioria dos sites, sim, e isso corta uma porta comum de ataques de força bruta. O arquivo é usado pelo aplicativo móvel do WordPress, por publicação remota e por alguns plugins de integração. Se você usa algum desses, libere o arquivo e proteja o login com Fail2ban ou limite de requisições."
        }
      }
    ]
  }
]
```
