Como Migrar WordPress para VPS

Guia completo para migrar seu WordPress de hospedagem compartilhada para VPS. Setup do servidor, migração e otimização.

Chega um momento na vida de todo site WordPress em que a hospedagem compartilhada não é mais suficiente. O site fica lento, o servidor cai nos horários de pico e o suporte da hospedagem responde que "tudo está normal".

Migrar para um VPS (Virtual Private Server) é o próximo passo natural. Você ganha controle total sobre o servidor, recursos dedicados e a possibilidade de otimizar tudo conforme a necessidade do seu site.

Neste guia, cobrimos todo o processo: desde os sinais de que é hora de migrar até a otimização pós-migração.

Leia também: VPS ou Hospedagem Compartilhada para WordPress? e Como Migrar WordPress de Hospedagem .


Quando Migrar para VPS?

Sinais de Que é Hora de Sair da Hospedagem Compartilhada

  1. TTFB alto (acima de 1 segundo) mesmo em páginas simples
  2. Site lento em horários de pico (manhã e noite)
  3. Erros 500 ou 503 frequentes sem causa aparente
  4. Limite de memória PHP atingido regularmente
  5. Tráfego acima de 50.000 visitas por mês
  6. WooCommerce com mais de 1.000 produtos
  7. Suporte da hospedagem não resolve os problemas
  8. Precisa de configurações customizadas (PHP, banco, servidor)

Quando NÃO Migrar

  • Site novo com pouco tráfego (menos de 10.000 visitas/mês)
  • Sem conhecimento técnico e sem orçamento para gerenciamento
  • A hospedagem compartilhada atende bem às necessidades

Escolhendo um VPS

Provedores Recomendados

Provedor Menor Plano Datacenter Brasil Destaque
DigitalOcean $4/mês Não (NYC mais próximo) Interface amigável
Vultr $5/mês São Paulo Boa performance
Hetzner €3,79/mês Não (Europa) Preço imbatível

Especificações Recomendadas

Para um site WordPress com tráfego médio:

Mínimo (até 50K visitas/mês):
- 2 vCPUs
- 4GB RAM
- 80GB SSD/NVMe
- Ubuntu 22.04 LTS

Recomendado (até 200K visitas/mês):
- 4 vCPUs
- 8GB RAM
- 160GB SSD/NVMe
- Ubuntu 22.04 LTS

Alto tráfego (500K+ visitas/mês):
- 6-8 vCPUs
- 16GB RAM
- 320GB SSD/NVMe
- Ubuntu 22.04 LTS

Dica: datacenter em São Paulo garante menor latência para visitantes brasileiros. Linode e Vultr oferecem essa opção.


Pré-Migração: Preparando o VPS

Passo 1: Acessar o VPS via SSH

Após criar o VPS, acesse-o pelo terminal:

ssh root@SEU_IP_DO_VPS

Passo 2: Atualizar o Sistema

apt update && apt upgrade -y

Passo 3: Criar Usuário Não-Root

adduser deploy
usermod -aG sudo deploy

Configure a autenticação por chave SSH:

# No seu computador local
ssh-copy-id deploy@SEU_IP_DO_VPS

Desabilite login por senha no SSH:

sudo nano /etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin no
sudo systemctl restart sshd

Passo 4: Configurar Firewall

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Passo 5: Instalar Nginx

sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

Passo 6: Instalar PHP-FPM

# Adicionar repositório do PHP
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

# Instalar PHP 8.2 com extensões necessárias
sudo apt install php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd \
    php8.2-mbstring php8.2-xml php8.2-zip php8.2-imagick \
    php8.2-intl php8.2-bcmath php8.2-soap php8.2-redis -y

Otimizar o PHP para WordPress:

sudo nano /etc/php/8.2/fpm/php.ini
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
max_input_vars = 3000
sudo systemctl restart php8.2-fpm

Passo 7: Instalar MariaDB

sudo apt install mariadb-server -y
sudo mysql_secure_installation

Responda às perguntas:

Switch to unix_socket authentication? No
Change root password? Yes (defina uma senha forte)
Remove anonymous users? Yes
Disallow root login remotely? Yes
Remove test database? Yes
Reload privilege tables? Yes

Criar banco de dados e usuário para o WordPress:

sudo mysql -u root -p

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

Passo 8: Configurar Nginx para WordPress

sudo nano /etc/nginx/sites-available/seusite.conf
server {
    listen 80;
    server_name seusite.com.br www.seusite.com.br;
    root /var/www/seusite;
    index index.php index.html;

    client_max_body_size 64M;

    # Segurança
    location ~ /\.ht {
        deny all;
    }

    location ~* (wp-config\.php|readme\.html|license\.txt) {
        deny all;
    }

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

    # PHP-FPM
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout 300;
    }

    # Cache de arquivos estáticos
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # Bloquear xmlrpc.php
    location = /xmlrpc.php {
        deny all;
        return 403;
    }
}

Ative o site:

sudo ln -s /etc/nginx/sites-available/seusite.conf /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

Passo 9: Instalar SSL com Let's Encrypt

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d seusite.com.br -d www.seusite.com.br

Verificar renovação automática:

sudo certbot renew --dry-run

Preparando o WordPress para Migração

Antes de migrar, faça estes preparativos no site atual:

1. Backup Completo

# Se tiver acesso SSH à hospedagem atual
# Backup dos arquivos
tar -czf wordpress-files.tar.gz -C /public_html .

# Backup do banco de dados
mysqldump -u usuario -p nome_do_banco > wordpress-db.sql

Se não tiver SSH, use o UpdraftPlus para criar um backup completo.

2. Listar Plugins e Temas

Anote todos os plugins ativos e a versão do WordPress. Isso ajuda na verificação pós-migração.

# Via WP-CLI (se disponível)
wp plugin list --status=active --format=table
wp theme list --status=active --format=table

3. Verificar Tamanho do Site

du -sh /public_html/
du -sh /public_html/wp-content/uploads/

Migração: Método 1 (rsync + mysqldump)

Este é o método mais confiável e rápido para sites grandes.

Passo 1: Transferir Arquivos

No seu VPS, execute:

# Criar diretório do site
sudo mkdir -p /var/www/seusite
sudo chown deploy:deploy /var/www/seusite

# Transferir via rsync (da hospedagem atual para o VPS)
rsync -avz --progress usuario@hospedagem_antiga:/public_html/ /var/www/seusite/

Se não tiver SSH na hospedagem antiga, faça download do backup e upload para o VPS:

# No seu computador local
scp wordpress-files.tar.gz deploy@SEU_IP_VPS:/var/www/seusite/

# No VPS
cd /var/www/seusite
tar -xzf wordpress-files.tar.gz
rm wordpress-files.tar.gz

Passo 2: Importar Banco de Dados

# Transferir o dump do banco
scp wordpress-db.sql deploy@SEU_IP_VPS:/tmp/

# No VPS, importar o banco
mysql -u wp_user -p wordpress_db < /tmp/wordpress-db.sql

Passo 3: Atualizar wp-config.php

sudo nano /var/www/seusite/wp-config.php

Atualize as credenciais do banco:

define('DB_NAME', 'wordpress_db');
define('DB_USER', 'wp_user');
define('DB_PASSWORD', 'SENHA_FORTE_AQUI');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8mb4');

Passo 4: Corrigir Permissões

sudo chown -R www-data:www-data /var/www/seusite
sudo find /var/www/seusite -type d -exec chmod 755 {} \;
sudo find /var/www/seusite -type f -exec chmod 644 {} \;
sudo chmod 600 /var/www/seusite/wp-config.php

Migração: Método 2 (All-in-One WP Migration com CLI)

Para sites menores (até 1-2GB), o All-in-One WP Migration pode ser mais simples.

No Site Antigo

  1. Instale o plugin All-in-One WP Migration
  2. Acesse All-in-One WP Migration > Export
  3. Escolha Export To File
  4. Faça download do arquivo .wpress

No VPS

  1. Instale o WordPress limpo:
cd /var/www/seusite
wp core download --allow-root
wp config create --dbname=wordpress_db --dbuser=wp_user --dbpass=SENHA_FORTE_AQUI --allow-root
wp core install --url=seusite.com.br --title="Meu Site" --admin_user=admin --admin_password=SENHA_ADMIN --admin_email=email@seusite.com.br --allow-root
  1. Instale o All-in-One WP Migration:
wp plugin install all-in-one-wp-migration --activate --allow-root
  1. Aumente o limite de upload no plugin (via CLI):
wp plugin install all-in-one-wp-migration-unlimited-extension --activate --allow-root
  1. Importe o arquivo .wpress via interface do WordPress ou via WP-CLI

Pós-Migração

1. Atualizar DNS

Aponte o domínio para o IP do VPS. No painel DNS do seu registrador:

Tipo    Nome                    Valor
A       seusite.com.br          IP_DO_VPS
A       www.seusite.com.br      IP_DO_VPS

A propagação pode levar até 48 horas. Use o comando dig para verificar:

dig seusite.com.br +short

2. Configurar SSL

Se ainda não configurou o SSL:

sudo certbot --nginx -d seusite.com.br -d www.seusite.com.br

3. Verificar E-mail

Se o site envia e-mails (formulários, WooCommerce), configure um serviço de envio:

# Instalar plugin de SMTP no WordPress
wp plugin install wp-mail-smtp --activate

Configure com um serviço como SendGrid, Mailgun ou Amazon SES para garantir entregabilidade.

4. Testar Tudo

  • [ ] Site carrega corretamente
  • [ ] Login no wp-admin funciona
  • [ ] Imagens carregam (verificar URLs)
  • [ ] Formulários enviam e-mail
  • [ ] WooCommerce processa pedidos (se aplicável)
  • [ ] Certificado SSL ativo (cadeado verde)
  • [ ] Links internos funcionam
  • [ ] Redirecionamentos antigos funcionam

Otimização de Performance Pós-Migração

PHP OPcache

O OPcache armazena scripts PHP compilados em memória, eliminando a necessidade de recompilar a cada requisição.

sudo nano /etc/php/8.2/fpm/conf.d/10-opcache.ini
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.save_comments=1
opcache.enable_cli=0
sudo systemctl restart php8.2-fpm

FastCGI Cache no Nginx

O FastCGI cache armazena o output do PHP em disco, servindo páginas estáticas diretamente pelo Nginx.

Adicione ao nginx.conf (bloco http):

# Zona de cache
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WORDPRESS:100m inactive=60m max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

Atualize o server block:

server {
    # ... configurações anteriores ...

    set $skip_cache 0;

    # Não cachear admin, login, POST ou páginas com cookies de login
    if ($request_method = POST) {
        set $skip_cache 1;
    }
    if ($request_uri ~* "/wp-admin/|/wp-login.php|/xmlrpc.php") {
        set $skip_cache 1;
    }
    if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
        set $skip_cache 1;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        # Cache
        fastcgi_cache WORDPRESS;
        fastcgi_cache_valid 200 60m;
        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;
        add_header X-FastCGI-Cache $upstream_cache_status;
    }
}
sudo mkdir -p /var/cache/nginx
sudo nginx -t
sudo systemctl reload nginx

Configurar Swap

Swap evita que o servidor trave quando a RAM está cheia:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# Tornar permanente
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# Ajustar swappiness (usar swap apenas quando necessário)
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Monitoramento do VPS

htop: Visão em Tempo Real

sudo apt install htop -y
htop

O htop mostra em tempo real: uso de CPU, memória, swap e os processos que mais consomem recursos.

Netdata: Dashboard de Monitoramento

# Instalar Netdata
bash <(curl -Ss https://my-netdata.io/kickstart.sh)

O Netdata roda na porta 19999 e oferece dashboards detalhados de CPU, RAM, disco, rede e mais. Configure o Nginx como proxy reverso para acesso seguro:

server {
    listen 443 ssl;
    server_name monitor.seusite.com.br;

    # SSL configs...

    location / {
        proxy_pass http://127.0.0.1:19999;
        proxy_set_header Host $host;
    }
}

Comandos Essenciais de Monitoramento

# Espaço em disco
df -h

# Memória RAM
free -h

# Carga do sistema
uptime

# I/O de disco
iostat -x 1 5

# Processos PHP-FPM ativos
ps aux | grep php-fpm | wc -l

# Conexões MySQL ativas
mysqladmin -u root -p status

Leia também: Como Monitorar seu Servidor WordPress .


VPS Gerenciado vs DIY: Comparação

Aspecto VPS DIY VPS Gerenciado
Setup Você configura tudo Configurado pra você
Atualizações Você atualiza SO, PHP, banco Feito pelo provedor
Segurança Sua responsabilidade Monitorado pelo provedor
Backup Você configura Automatizado
Suporte Comunidade/fóruns Suporte dedicado
Tempo Horas/semana em manutenção Zero manutenção
Risco Alto (se errar, o site cai) Baixo (equipe especializada)

Para quem tem conhecimento técnico e tempo, o VPS DIY funciona. Para quem precisa focar no negócio, o VPS gerenciado é o caminho mais seguro.


A HOSTWP Faz a Migração Gratuita

Migrar para VPS é um processo técnico com muitas etapas. Um erro na configuração do Nginx, nas permissões de arquivo ou na importação do banco pode derrubar o site. Sem monitoramento adequado, problemas passam despercebidos até virarem emergências.

Na HOSTWP, a migração é gratuita para novos clientes. Configuramos o servidor, migramos o WordPress, otimizamos a performance, configuramos SSL, e-mail e monitoramento. Tudo isso sem você precisar tocar em uma linha de comando.

Quer sair da hospedagem compartilhada sem risco? A HOSTWP migra seu site gratuitamente e gerencia o VPS pra você.

Fale com a gente no WhatsApp e migre seu WordPress para um VPS otimizado.

Artigos relacionados