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 "
  1. " . $row['content'] . "
  2. "; } 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.

Saída do Site de Teste LEMP

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.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.