Nesta página: [ocultar]
Dez minutos são honestos apenas se o seu VPS já estiver provisionado, o DNS do seu domínio já aponta para ele, e você pode copiar e colar de forma limpa. Perto dos quarenta se você estiver aprendendo. Boas notícias: a 2026 a instalação é mais curta que a 2018 version because Ubuntu 24.04 ships PHP 8.3 in its default repositories. No third-party PPAs, no compilation, no version juggling.
Resposta rápida: Spin up a fresh Ubuntu 24.04 VPS, instalar Nginx, MariaDB 10.11, PHP 8.3-FPM with one apt command per package, create a database, drop WordPress into /var/www/yoursite.com, point an Nginx server block at /run/php/php8.3-fpm.sock, and finish in the browser. SSL via Let’s Encrypt adds another five minutes. The full sequence below is roughly 30 comandos.
Última revisão: abril 2026. Commands verified on Ubuntu 24.04.2 LTS with WordPress 6.7.

Most LEMP-for-WordPress tutorials still floating around Google reference CentOS 7, que atingiu o fim da vida em junho 2024 e parou de receber patches de segurança. Alguns usam o soquete TCP estilo Apache para PHP-FPM quando ambos os serviços são executados na mesma caixa, que adiciona latência sem motivo. Este guia usa os padrões modernos: Ubuntu 24.04 LTS, Soquete Unix, e um layout de bloco de servidor que cai de forma limpa no cache FastCGI posteriormente.
The LEMP Stack on Ubuntu 24.04, Component by Component
LEMP é um acrônimo, não é um produto. Cada letra é um software separado que você instala e conecta.
L é Linux. Ubuntu 24.04 LTS é o caminho de menor resistência em 2026. É suportado até abril 2029, o repositório do pacote é atual, e a maioria dos provedores de VPS oferece isso como uma imagem de um clique. Debian 12 funciona também se você preferir; os comandos abaixo precisam apenas de pequenos ajustes.
E é Nginx (pronunciado “motor-x”, é de onde vem o E). Nginx é um servidor web orientado a eventos. Apache gera um processo ou thread por conexão, que funciona bem até picos de tráfego. Nginx lida com milhares de conexões simultâneas em um único trabalhador, é por isso que a maioria dos hosts WordPress modernos o adotam como padrão.
M é MariaDB ou MySQL. O WordPress não se importa com qual você usa, desde que a versão seja alta o suficiente. WordPress 6.7 necessidades MariaDB 10.6+ ou MySQL 8.0+. Ubuntu 24.04 navios MariaDB 10.11 LTS, que é suportado até 2028. Usaremos MariaDB o tempo todo.
P é PHP. WordPress 6.7 suporta PHP 8.1 através 8.4. Ubuntu 24.04 navios PHP 8.3 como padrão, a versão com suporte ativo até tarde 2026. PHP-FPM (Gerenciador de Processos FastCGI) é a peça que realmente executa seu código PHP; Nginx entrega solicitações a ele por meio de um soquete Unix.
Se você é novo em toda esta camada da pilha, nossa visão geral de Provedores de hospedagem NGINX cobre as diferenças entre Apache e Nginx com mais profundidade, além de quais hosts de orçamento permitem que você execute uma configuração real do Nginx versus. apenas renomeando o Apache.
Before You Run a Single Command
Você precisa de quatro coisas no lugar. Ignorar qualquer um deles transforma uma instalação de 10 minutos em uma sessão de depuração de 2 horas.
- Um novo Ubuntu 24.04 VPS. Mínimo 1 vCPU e 1 GB de RAM para um site de hobby, 2 GB se você executar o WooCommerce ou um construtor de páginas pesado. Qualquer coisa, desde um Hetzner CX22 de US$ 4/mês até um Hostinger KVM 2 vai fazer. Nosso Guia de hospedagem VPS WordPress compara as opções práticas.
- Acesso SSH como root ou usuário sudo. A maioria dos provedores envia por e-mail credenciais de root após o provisionamento. Se você comprou VPS gerenciado, veja nossa peça em gerenciado vs.. VPS não gerenciado antes de continuar; um plano gerenciado geralmente faz tudo isso para você.
- Um nome de domínio apontando para o IP do seu servidor. Adicione um registro A em seu registrador, então espere 5 para 15 minutos para o DNS se propagar. SSL não será emitido até que isso seja resolvido.
- Portas 22, 80, e 443 abrir. Se o seu provedor VPS oferece um firewall em nuvem (Hetzner, Vultr, DigitalOcean tudo faz), abra essas três portas lá também, não apenas na UFW.
Tenho esses quatro? Abra seu terminal, SSH em, e vamos começar.
Degrau 1: Update Ubuntu and Lock Down SSH
Sempre corrija antes de instalar qualquer coisa. A imagem padrão do Ubuntu geralmente está algumas semanas atrasada nas atualizações de segurança.
sudo apt update && sudo apt upgrade -ysudo apt install -y ufw fail2ban unattended-upgrades
UFW (Firewall descomplicado) é o wrapper do Ubuntu em torno do iptables. Habilite-o com a porta SSH aberta primeiro, caso contrário você vai se trancar.
sudo ufw allow OpenSSHsudo ufw enable
Se você estiver usando uma porta SSH não padrão, substituir OpenSSH com 2222/tcp ou o que você definir. Não reinicie ou feche seu terminal até confirmar que o SSH ainda funciona em uma segunda janela.
Degrau 2: Install Nginx and Open the Firewall
Nginx está no repositório padrão do Ubuntu. Um comando:
sudo apt install -y nginxsudo ufw allow 'Nginx Full'
Este Nginx Full perfil abre ambos 80 e 443. Visite o IP do seu servidor em um navegador e você verá o padrão Bem-vindo ao nginx! página. Se não carregar, verifique o firewall em nuvem do seu provedor VPS (uma camada diferente da UFW).
Certifique-se de que o Nginx esteja ativo agora e permaneça ativo após uma reinicialização:
sudo systemctl status nginxsudo systemctl enable nginx
Degrau 3: Install MariaDB and Secure It
MariaDB 10.11 LTS está no Ubuntu 24.04 repositórios. WordPress 6.7’s minimum is 10.6, so we’re well above the floor.
sudo apt install -y mariadb-serversudo mysql_secure_installation
The interactive mysql_secure_installation script asks a string of questions. The right answers for a fresh install:
- Enter current root password: just press Enter (there isn’t one yet).
- Switch to unix_socket authentication: E.
- Change root password: E, and pick a strong one.
- Remover usuários anônimos: E.
- Proibir login de root remotamente: E.
- Remove test database: E.
- Reload privilege tables: E.
Skipping any of those leaves real attack vectors open. The remote root login one matters most: if your MariaDB port ever gets exposed by accident, an open root login becomes someone else’s database in minutes.
Degrau 4: Instale PHP 8.3 e PHP-FPM
WordPress needs PHP plus a fistful of extensions. Install them in one shot:
sudo apt install -y php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-imagick php8.3-intl php8.3-bcmath php8.3-opcache
That bundle covers the WordPress core, image processing for the media library (imagem + gd), the i18n features for non-English sites (intl + mbstring), and OPcache for compiled-bytecode caching. Pular php8.3-imagick somente se você tiver certeza de que nunca fará upload de uma imagem.
Verificação de integridade PHP-FPM:
sudo systemctl status php8.3-fpm
Por padrão ele escuta /run/php/php8.3-fpm.sock. Esse é o caminho que o Nginx fará referência na etapa 7. Nenhuma alteração é necessária, a menos que você esteja executando várias versões do PHP lado a lado.
Degrau 5: Create the WordPress Database
WordPress precisa de seu próprio banco de dados e de um usuário dedicado. Não use a conta root MariaDB; um plugin comprometido não deve ser igual à raiz completa do banco de dados.
sudo mariadb
Agora você está no shell MariaDB. Execute estas linhas, substituindo strongpasswordhere com algo que um gerenciador de senhas gerou:
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'strongpasswordhere';GRANT ALL ON wordpress.* TO 'wpuser'@'localhost';FLUSH PRIVILEGES;EXIT;
o utf8mb4 conjunto de caracteres é importante. Suporte para emojis WordPress, caracteres completos do idioma asiático, e qualquer manipulação de texto moderna assume utf8mb4. Quanto mais velho utf8 charset no MySQL é uma armadilha de 3 bytes que quebra emoji silenciosamente.
Degrau 6: Baixar WordPress
Duas opções aqui. Escolha o que achar mais fácil.
Opção A: ondulação + alcatrão. O mais rápido, nenhum software extra:
cd /tmp && curl -O https://wordpress.org/latest.tar.gztar -xzf latest.tar.gzsudo mv wordpress /var/www/yoursite.comsudo chown -R www-data:www-data /var/www/yoursite.comsudo find /var/www/yoursite.com -type d -exec chmod 755 {} \;sudo find /var/www/yoursite.com -type f -exec chmod 644 {} \;
Opção B: WP-CLI. Um pouco mais de configuração, mas cada tarefa do WordPress fica mais rápida depois (theme installs, atualizações de plugins, salt rotations, database search-and-replace).
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.pharchmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wpsudo -u www-data wp core download --path=/var/www/yoursite.com
Por quê www-data? It’s what Nginx and PHP-FPM run as on Ubuntu by default. Files owned by that user, with directories at 755 and files at 644, is the standard secure pattern. Evitar 777, sempre, em qualquer lugar; it’s a classic shared-hosting habit that has no place on a VPS.
Degrau 7: Configure the Nginx Server Block
Create a new server-block file:
sudo nano /etc/nginx/sites-available/yoursite.com
Paste this in, substituindo yoursite.com with your real domain:
server {listen 80;server_name yoursite.com www.yoursite.com;root /var/www/yoursite.com;index index.php index.html;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 ~ /\.ht { deny all; }location = /xmlrpc.php { deny all; }}
Two pieces deserve attention. o try_files directive is what makes WordPress permalinks work; without it, anything other than the homepage returns a 404. o xmlrpc.php deny all line blocks a notorious brute-force attack vector that almost no WordPress site uses anymore (Jetpack and a few legacy mobile apps still need it; if you depend on either, comment that line out).
Enable the site, disable the default, and reload:
sudo ln -s /etc/nginx/sites-available/yoursite.com /etc/nginx/sites-enabled/sudo rm /etc/nginx/sites-enabled/defaultsudo nginx -tsudo systemctl reload nginx
o nginx -t step matters. It validates your config before reload, o que evita que você quebre o servidor em execução com um erro de digitação.
Degrau 8: Edit wp-config.php
O WordPress envia um arquivo de configuração de amostra que você copia e edita:
cd /var/www/yoursite.comsudo cp wp-config-sample.php wp-config.phpsudo nano wp-config.php
Encontre a seção do banco de dados perto do topo e preencha o que você definiu na Etapa 5:
define( 'DB_NAME', 'wordpress' );define( 'DB_USER', 'wpuser' );define( 'DB_PASSWORD', 'strongpasswordhere' );define( 'DB_HOST', 'localhost' );
Agora os sais. Visita https://api.wordpress.org/secret-key/1.1/salt/ em um navegador. A página retorna oito linhas geradas aleatoriamente (AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY, mais sais correspondentes). Substitua o bloco de espaço reservado em wp-config.php com o que a página gerou. Novos valores aleatórios a cada instalação, sem exceções.
Salve o arquivo. Se você usou WP-CLI na etapa 6, você pode pular totalmente a edição manual com sudo -u www-data wp config create --dbname=wordpress --dbuser=wpuser --dbpass=strongpasswordhere; ele extrai sais frescos automaticamente.
Degrau 9: Run the Browser Installer
Abra seu domínio em um navegador. WordPress detecta uma instalação não configurada e mostra o seletor de idioma. De lá:
- Escolha seu idioma. Clique em Continuar.
- Título do site, nome de usuário admin (não escolha “admin”; bots têm como alvo), senha forte, seu email.
- Marcação Desencoraje mecanismos de pesquisa se o site ainda não estiver pronto para tráfego.
- Clique em Instalar WordPress.
Você deveria ver um “Sucesso!” tela em 5 para 10 segundos. Conecte-se. Você está em uma instalação auto-hospedada do WordPress em sua própria pilha LEMP. Todo o processo voltado para o usuário a partir deste ponto é idêntico a qualquer outra instalação do WordPress.
Add HTTPS with Let’s Encrypt (Five More Minutes)
WordPress somente HTTP em 2026 está quebrado. Os navegadores alertam os visitantes, o formulário de login do WordPress vaza credenciais em texto simples, e o Google desclassifica o site. Certbot corrige todos os três gratuitamente.
sudo apt install -y certbot python3-certbot-nginxsudo certbot --nginx -d yoursite.com -d www.yoursite.com
Certbot reescreve seu bloco de servidor Nginx no lugar, adicionando o 443 ouvinte e os caminhos do certificado. Ele também oferece o redirecionamento de todo o tráfego HTTP para HTTPS; diga sim. As renovações são executadas automaticamente duas vezes por dia por meio de um timer do systemd. Você receberá um e-mail se algo falhar.
Confirme com:
sudo certbot renew --dry-run
Speed Tier: FastCGI Cache, OPcache, Redis
Uma instalação vanilla LEMP já é mais rápida que 90% de hospedagem compartilhada. Se você deseja os tempos de resposta dos quais os hosts gerenciados do WordPress se gabam (tempo abaixo de 100 ms até o primeiro byte), mais três camadas levam você até lá.
OPcache compila seus arquivos PHP em bytecode e mantém o resultado na memória. Já está instalado (nós adicionamos php8.3-opcache em passo 4). As configurações padrão funcionam bem; subindo opcache.memory_consumption para 256 no /etc/php/8.3/fpm/php.ini ajuda se você executar muitos plug-ins.
Cache Nginx FastCGI armazena toda a página HTML renderizada na memória do Nginx e atende solicitações repetidas sem nunca tocar em PHP ou MariaDB. Benchmarks independentes mostram tempos de resposta caindo de 200 para 500 ms em caches de plugins até aproximadamente 40 ms no cache FastCGI. A desvantagem é a complexidade da configuração e a necessidade de ignorar o cache para usuários logados, wp-admin, e quaisquer páginas de carrinho/checkout. Combine-o com o grátis Ajudante Nginx plugin do WordPress.org para que a limpeza do cache aconteça automaticamente quando você publica uma postagem.
Cache de objeto Redis lida com a camada de consulta do banco de dados. Repetir consultas (pesquisas de opções, transitórios, metadados do usuário) seja armazenado em cache na RAM em vez de acessar o MariaDB. Esta é a camada que mais importa para WooCommerce, BuddyPress, and any membership site where pages can’t be statically cached.
If managing all three feels like too much, nosso resumo de alojamento WordPress na nuvem options covers managed providers that ship these layers preconfigured.
Hardening Beyond the Defaults
Your install is now safer than most shared hosting, but it isn’t done. A short list of high-impact additions:
- Configure fail2ban for WordPress. You installed fail2ban back in Step 1. Add a jail that watches Nginx access logs for repeated 401s on
wp-login.phpand bans the offending IP for 24 horas. - Disable file editing in admin. Adicionar
define( 'DISALLOW_FILE_EDIT', true );parawp-config.php. This stops a compromised admin account from editing PHP files through the dashboard. - Move wp-config.php one level up. WordPress automatically looks one directory above the install root for
wp-config.php. Moving it to/var/www/em vez de/var/www/yoursite.com/puts the database credentials outside the document root entirely. - Limit the admin login surface. Altere o URL com um plugin como WPS Hide Login, ou restringir
wp-adminpara o IP do seu escritório via Nginx (allow x.x.x.x; deny all;dentro de umlocation /wp-adminquadra). - Autenticação de dois fatores para cada administrador. O plugin Wordfence ou Two-Factor funcionam. Ataques de força bruta tornam-se irrelevantes contra um código TOTP.
Automate Backups Before You Forget
Sua pilha LEMP é exatamente duas coisas no sentido de backup: a /var/www/yoursite.com diretório e o wordpress base de dados. Faça backup de ambos, em um cronograma, para algum lugar que não esteja neste servidor.
Caminho mais simples: o livre UpdraftPlus plugin apontado para S3, Google Drive, ou Backblaze B2. Defina a programação diariamente para o banco de dados e semanalmente para arquivos, reter 14 para 30 dias, feito.
Se você preferir permanecer nativo da linha de comando, um cron job de cinco linhas usando mysqldump + tar + rclone é aproximadamente equivalente e não usa plugin. De qualquer jeito, restaurar e testar o backup uma vez por trimestre; um backup não verificado é apenas otimismo.
Troubleshooting Common Errors
502 Bad Gateway
Nginx não consegue alcançar PHP-FPM. Geralmente significa que o PHP-FPM não está em execução, o caminho do soquete no seu bloco de servidor está errado, ou as permissões no arquivo de soquete estão desativadas. Verifique com sudo systemctl status php8.3-fpm primeiro. Se estiver funcionando, verifique se o caminho do soquete corresponde ao que o Nginx espera (o padrão é /run/php/php8.3-fpm.sock).
Erro ao estabelecer uma conexão com o banco de dados
Seu wp-config.php as credenciais não correspondem ao que você definiu no MariaDB. Verifique novamente DB_NAME, DB_USER, DB_PASSWORD. Teste as credenciais diretamente: mariadb -u wpuser -p wordpress. Se isso falhar com um erro de autenticação, a senha em wp-config.php está errado, ou o usuário não recebeu privilégios nesse banco de dados.
WordPress permalinks return 404
Ausente try_files $uri $uri/ /index.php?$args; no seu Nginx location / quadra. Adicione, correr sudo nginx -t, então recarregue o Nginx. Os links permanentes funcionam imediatamente depois; nenhuma redefinição de plugin necessária.
White screen of death after a plugin install
Um erro fatal do PHP está sendo registrado, mas não é exibido. Cauda /var/log/nginx/error.log e /var/log/php8.3-fpm.log. Se você não consegue acessar o painel, renomeie a pasta do plugin incorreto via SSH (mv plugin-name plugin-name-disabled) e o site volta. De lá, verifique o requisito da versão PHP do plugin; muitos plugins mais antigos quebram no PHP 8.3.
Permission denied when uploading media
o wp-content/uploads diretório não é gravável por www-data. Correr sudo chown -R www-data:www-data /var/www/yoursite.com/wp-content e o problema é resolvido. Se você estiver em uma hospedagem compartilhada que requer um usuário diferente, verifique os documentos do seu provedor; o usuário difere de acordo com o host.
perguntas frequentes
Why use Nginx instead of Apache for WordPress?
Nginx lida com conexões simultâneas com mais eficiência e fornece arquivos estáticos (CSS, JS, imagens) mais rápido com menos RAM. Em um 1 GB VPS, Apache normalmente satura 50 Usuários concorrentes; Nginx lida com várias centenas no mesmo hardware. O Apache ainda tem seu lugar quando você depende .htaccess substituições ou módulos específicos do Apache. Para a maioria das instalações modernas do WordPress, Nginx é o padrão certo.
Can I install WordPress on a LEMP stack without root access?
Não. Instalando o Nginx, PHP-FPM, e MariaDB requer sudo no mínimo. Se o seu plano de hospedagem oferece apenas cPanel e FTP, você está em hospedagem compartilhada e a instalação do LEMP não é sua para executar. Você precisaria de um VPS ou servidor em nuvem com acesso root, ou mude para um host WordPress gerenciado que já execute o Nginx por baixo.
Does the 10-minute timing actually hold up?
Realisticamente, dez minutos é o chão, não a média. Com um Ubuntu novo 24.04 imagem, um domínio já apontado, e os comandos pré-copiados em um editor de texto, a instalação é executada em 8 para 12 minutos. Os iniciantes que leem e verificam cada etapa estão mais próximos de 30 para 45 minutos. O maior desperdício de tempo é a propagação do DNS e a solicitação do certificado SSL, que juntos podem se estender até 20 minutos em um dia ruim.
Is MariaDB or MySQL better for WordPress?
Qualquer um funciona bem; WordPress não percebe. MariaDB tem vantagem na comunidade de código aberto, vem no repositório padrão do Ubuntu, e nunca tive pontos de interrogação sobre propriedade da Oracle. MySQL 8.0 é mais rápido para algumas cargas de trabalho específicas com uso intenso de JSON, o que raramente importa para WordPress. Escolha MariaDB, a menos que você tenha um motivo real para usar o MySQL.
Do I need a CDN if I run FastCGI cache?
Diferentes camadas, trabalhos diferentes. O cache FastCGI acelera seu servidor de origem; um CDN coloca cópias em cache em 200+ cidades para que os visitantes em Sydney não busquem no seu servidor de Frankfurt. Execute ambos em qualquer site com visitantes internacionais. Plano gratuito da Cloudflare mais coberturas de cache FastCGI 95% de pequenos sites WordPress sem custo mensal.
Can I host multiple WordPress sites on the same LEMP stack?
sim. Cada site recebe seu próprio bloco de servidor Nginx (um arquivo por domínio em /etc/nginx/sites-available/), seu próprio banco de dados em MariaDB, e sua própria pasta em /var/www/. PHP-FPM atende todos eles através do mesmo soquete. O único limite prático é a RAM; despesas 200 para 400 MB por site para tráfego moderado, mais para WooCommerce.
Palavra final
A instalação do LEMP é a parte fácil. Mantê-lo funcionando é o jogo mais longo: atualizações mensais do Ubuntu, verificações trimestrais de versão PHP, rotação de log que não preenche o disco, renovações de certificado que você realmente verifica. Nada disso é difícil, mas também não é gratuito. Se o lado da manutenção parece um trabalho que você não quer fazer, nossa visão geral de provedores de hospedagem na nuvem abrange opções gerenciadas em que outra pessoa cuida inteiramente da camada do sistema operacional. A auto-hospedagem do WordPress no LEMP é uma escolha de controle, não é uma escolha de custo. Se vale a pena manter o controle depende do que você está construindo e de quão confortável você se sente na linha de comando.
