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
- TTFB alto (acima de 1 segundo) mesmo em páginas simples
- Site lento em horários de pico (manhã e noite)
- Erros 500 ou 503 frequentes sem causa aparente
- Limite de memória PHP atingido regularmente
- Tráfego acima de 50.000 visitas por mês
- WooCommerce com mais de 1.000 produtos
- Suporte da hospedagem não resolve os problemas
- 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
- Instale o plugin All-in-One WP Migration
- Acesse All-in-One WP Migration > Export
- Escolha Export To File
- Faça download do arquivo .wpress
No VPS
- 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
- Instale o All-in-One WP Migration:
wp plugin install all-in-one-wp-migration --activate --allow-root
- Aumente o limite de upload no plugin (via CLI):
wp plugin install all-in-one-wp-migration-unlimited-extension --activate --allow-root
- 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.