LEMP Stack · 11 min read · Oct 12, 2025
Como Instalar Nginx com PHP e MySQL (LEMP Stack) no Ubuntu 22.04

A pilha de software LEMP é um grupo de software de código aberto que permite que um servidor hospede sites e aplicativos dinâmicos escritos em PHP. É um acrônimo para Linux, Nginx (pronunciado como Engine-X), MySQL e PHP.
Este guia mostrará como instalar uma pilha LEMP em um servidor Ubuntu 22.04. Você também aprenderá a instalar aplicativos como o phpMyAdmin.
Pré-requisitos
- Um servidor rodando Ubuntu 22.04.
- Um usuário não-root com privilégios sudo.
- O Firewall Descomplicado (UFW) está habilitado e em execução.
- Tudo está atualizado.
$ sudo apt update && sudo apt upgrade
Passo 1 - Configurar o Firewall
O primeiro passo antes de instalar qualquer pacote é configurar o firewall para permitir conexões HTTP e HTTPS.
Verifique o status do firewall.
$ sudo ufw status
Você deve ver algo como o seguinte.
Status: ativo
Para Ação De
-- ------ ----
OpenSSH PERMITIR Em qualquer lugar
OpenSSH (v6) PERMITIR Em qualquer lugar (v6)
Permita as portas HTTP e HTTPS.
$ sudo ufw allow http
$ sudo ufw allow https
Verifique o status novamente para confirmar.
$ sudo ufw status
Status: ativo
Para Ação De
-- ------ ----
OpenSSH PERMITIR Em qualquer lugar
80/tcp PERMITIR Em qualquer lugar
443/tcp PERMITIR Em qualquer lugar
OpenSSH (v6) PERMITIR Em qualquer lugar (v6)
80/tcp (v6) PERMITIR Em qualquer lugar (v6)
443/tcp (v6) PERMITIR Em qualquer lugar (v6)
Passo 2 - Instalar PHP
O Ubuntu 22.04 vem com PHP 8.1 por padrão. Você pode instalá-lo executando o seguinte comando.
$ sudo apt install php-fpm php-cli php-mysqlnd php-mbstring php-xml php-gd
Instalamos as extensões MySQL, CLI, GD, Mbstring e XML do PHP. Você pode instalar quaisquer extensões extras conforme suas necessidades.
Para sempre ficar na versão mais recente do PHP ou se você quiser instalar várias versões do PHP, adicione o repositório PHP do Ondrej.
Adicione o repositório PHP do Ondrej.
$ sudo add-apt-repository ppa:ondrej/php
Agora, você pode instalar qualquer versão do PHP.
$ sudo apt install php8.0-fpm php8.0-cli
Verifique a versão do PHP instalada.
$ php --version
PHP 8.1.2 (cli) (built: Jun 13 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies
Passo 3 - Instalar MySQL
O Ubuntu 22.04 vem com a versão mais recente do MySQL. Você pode instalá-lo com um único comando.
$ sudo apt install mysql-server
Verifique a versão do MySQL.
$ mysql --version
mysql Ver 8.0.29-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))
Este passo é necessário para versões do MySQL 8.0.28 e superiores. Entre no Shell do MySQL.
$ sudo mysql
Execute o seguinte comando para definir a senha do seu usuário root. Certifique-se de que tenha uma mistura de números, letras maiúsculas, minúsculas e caracteres especiais.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';
Saia do shell.
mysql> exit
Execute o script de instalação segura do MySQL.
$ sudo mysql_secure_installation
Você será solicitado a instalar o Componente de Validação de Senha. Ele verifica a força das senhas usadas no MySQL. Pressione Y para instalá-lo.
Em seguida, você será solicitado a definir o nível da política de validação de senha. Escolha 2 pois é a mais forte.
Em seguida, insira sua senha root. Pressione N para recusar a alteração.
Pressione Y para remover usuários anônimos, desabilitar logins remotos do root, remover o banco de dados de teste e recarregar as tabelas de privilégios.
Passo 4 - Configurar MySQL
Faça login no shell do MySQL. Insira sua senha root quando solicitado.
$ sudo mysql -u root -p
Crie um banco de dados de exemplo.
mysql> CREATE DATABASE exampledb;
Crie uma conta de usuário SQL.
mysql> CREATE USER 'exampleuser'@'localhost' IDENTIFIED BY 'YourPassword2!';
Conceda todos os privilégios no banco de dados ao usuário.
mysql> GRANT ALL PRIVILEGES ON exampledb.* TO 'exampleuser'@'localhost';
Atualize os privilégios do usuário.
mysql> FLUSH PRIVILEGES;
Saia do shell.
mysql> exit
Vamos fazer login novamente no shell do MySQL usando o usuário recém-criado.
$ sudo mysql -u exampleuser -p
Crie uma tabela de teste.
mysql> CREATE TABLE exampledb.name_list ( sno INT AUTO_INCREMENT, content VARCHAR(255), PRIMARY KEY(sno) );
Insira dados de teste.
mysql> INSERT INTO exampledb.name_list (content) VALUES ("Navjot");
Repita o comando acima separadamente para adicionar mais entradas. Execute o seguinte comando para verificar o conteúdo da tabela.
mysql> SELECT * FROM exampledb.name_list;
Você receberá a seguinte saída.
+-----+---------+
| sno | content |
+-----+---------+
| 1 | Navjot |
| 2 | Adam |
| 3 | Josh |
| 4 | Peter |
+-----+---------+
4 rows in set (0.00 sec)
Saia do shell do MySQL.
mysql> exit
Passo 5 - Instalar Nginx
O Ubuntu 22.04 vem com uma versão mais antiga do Nginx. Para instalar a versão mais recente, você precisa baixar o repositório oficial do Nginx.
Importe a chave de assinatura do Nginx.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Adicione o repositório para a versão estável do Nginx.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Atualize os repositórios do sistema.
$ sudo apt update
Instale o Nginx.
$ sudo apt install nginx
Verifique a instalação.
$ nginx -v
nginx version: nginx/1.22.0
Passo 6 - Configurar PHP-FPM
Abra php.ini para edição.
$ sudo nano /etc/php/8.1/fpm/php.ini
Para definir os tamanhos de upload de arquivos, altere os valores das variáveis upload_max_filesize e post_max_size.
upload_max_filesize = 50M
...
post_max_size = 50M
Configure o limite de memória do PHP dependendo dos recursos e requisitos do seu servidor.
memory_limit = 256M
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Abra o arquivo /etc/php/8.0/fpm/pool.d/www.conf.
$ sudo nano /etc/php/8.0/fpm/pool.d/www.conf
Precisamos definir o usuário/grupo Unix dos processos PHP como nginx. Encontre as linhas user=www-data e group=www-data no arquivo e altere-as para nginx.
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = nginx
group = nginx
...
Além disso, encontre as linhas listen.owner=www-data e listen.group=www-data no arquivo e altere-as para nginx.
listen.owner = nginx
listen.group = nginx
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Reinicie o processo PHP-fpm.
$ sudo systemctl restart php8.1-fpm
Passo 7 - Instalar phpMyAdmin
Baixe o arquivo de arquivo do phpMyAdmin para o idioma inglês.
$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-english.tar.gz
Crie um diretório público para o site.
$ sudo mkdir /var/www/html/example.com -p
Extraia o arquivo para o diretório público.
$ sudo tar -xzvf phpMyAdmin-5.2.0-english.tar.gz -C /var/www/example.com
Mude para o diretório público.
$ cd /var/www/html/example.com
Renomeie o diretório extraído para algo obscuro para melhorar a segurança.
$ sudo mv phpMyAdmin-5.2.0-english sm175
Passo 8 - Configurar phpMyAdmin
Copie o arquivo de configuração de exemplo.
$ sudo cp sm175/config.sample.inc.php sm175/config.inc.php
Abra o arquivo de configuração para edição.
$ sudo nano sm175/config.inc.php
Encontre a linha $cfg['blowfish_secret'] = ''; e insira uma string aleatória de 32 caracteres para autenticação baseada em cookie.
Você pode usar o gerador de blowfish online do phpSolved ou fazer isso via linha de comando.
Copie o valor e cole-o como mostrado.
$cfg['blowfish_secret'] = 'Tc/HfLPBOAPxJ-rhQP}HJoZEK69c3j:m';
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Altere a propriedade do site e do phpMyAdmin para o servidor Nginx.
$ sudo chown -R nginx:nginx /var/www/html/example.com
Exclua o diretório de configuração do phpMyAdmin.
$ sudo rm -rf /var/www/html/example.com/sm175/setup
Passo 9 - Configurar Opcache
Opcache é o sistema de cache do PHP. Ele funciona salvando o bytecode do script pré-compilado na memória, para que toda vez que um usuário visita uma página, ela carregue mais rápido. O Opcache é instalado por padrão. Para verificar, verifique a versão do PHP.
$ php --version
PHP 8.1.2 (cli) (built: Jun 13 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies
Isso nos diz que o Opcache está instalado e disponível. Caso não apareça aqui, você pode instalá-lo manualmente executando o seguinte comando.
$ sudo apt install php-opcache
Para alterar as configurações do Opcache, abra o arquivo /etc/php/8.1/fpm/conf.d/10-opcache.ini para edição.
$ sudo nano /etc/php/8.1/fpm/conf.d/10-opcache.ini
As seguintes configurações devem ajudá-lo a começar a usar o Opcache e são geralmente recomendadas para um bom desempenho. Você pode habilitar uma configuração descomentando-a, removendo o ponto e vírgula na frente dela.
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Passo 10 - Instalar Certbot para SSL
Precisamos instalar o Certbot para gerar certificados SSL gratuitos oferecidos pelo Let’s Encrypt.
Você pode instalar o Certbot usando o repositório do Ubuntu ou pegar a versão mais recente usando a ferramenta Snapd. Usaremos a versão Snapd.
O Ubuntu 22.04 vem com o Snapd instalado por padrão. Execute os seguintes comandos para garantir que sua versão do Snapd esteja atualizada.
$ sudo snap install core
$ sudo snap refresh core
Instale o Certbot.
$ sudo snap install --classic certbot
Use o seguinte comando para garantir que o comando Certbot possa ser executado criando um link simbólico para o diretório /usr/bin.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Passo 11 - Testar um site de demonstração
Criar o site
Crie e abra uma página de teste para edição.
$ sudo nano /var/www/html/example.com/index.php
Cole o seguinte código nele.
Lista de Membros";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "- " . $row['content'] . "
";
}
echo "
";
} catch (PDOException $e) {
print "Erro!: " . $e->getMessage() . "
";
die();
}
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Criar um Certificado SSL
Execute o seguinte comando para gerar um Certificado SSL.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com
O comando acima fará o download de um certificado para o diretório /etc/letsencrypt/live/example.com em seu servidor.
Gere um certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Abra o arquivo /etc/letsencrypt/renewal/example.com.conf para edição.
$ sudo nano /etc/letsencrypt/renewal/example.com.conf
Cole o seguinte código no final.
pre_hook = systemctl stop nginx
post_hook = systemctl start nginx
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Geramos o certificado SSL usando a opção standalone do Certbot. Ele executa seu servidor web para criar o certificado, o que significa que o Nginx deve ser desligado durante a renovação. Os comandos pre_hook e post_hook são executados antes e depois da renovação para desligar e reiniciar automaticamente o servidor Nginx, não exigindo intervenção manual.
Para verificar se a renovação do SSL está funcionando bem, faça um teste do processo.
$ sudo certbot renew --dry-run
Se você não ver erros, está tudo pronto. Seu certificado será renovado automaticamente.
Configurar Nginx
Crie e abra o arquivo /etc/nginx/conf.d/example.conf para edição.
$ sudo nano /etc/nginx/conf.d/example.conf
Cole o seguinte código nele.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
root /var/www/html/example.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Pass PHP Scripts Para o Servidor FastCGI
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
# forçar HTTPS
server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$host$request_uri;
}
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Abra o arquivo /etc/nginx/nginx.conf para edição.
$ sudo nano /etc/nginx/nginx.conf
Adicione a seguinte linha antes da linha include /etc/nginx/conf.d/*.conf;.
server_names_hash_bucket_size 64;
Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.
Verifique sua configuração do Nginx.
$ sudo nginx -t
Se você não ver erros, significa que está tudo certo. Inicie o servidor Nginx.
$ sudo systemctl start nginx
Carregue seu site visitando https://example.com em seu navegador e você verá a seguinte página.

Você pode acessar sua instalação do phpMyAdmin visitando a URL https://example.com/sm175 em seu navegador. Você pode inserir seu usuário root ou o usuário criado anteriormente para fazer login.
Conclusão
Isso conclui nosso tutorial onde você aprendeu como configurar uma pilha LEMP em um servidor Ubuntu 22.04 e criou um site de demonstração. Se você tiver alguma dúvida, poste nos comentários abaixo.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.