Instalação LEMP · 15 min read · Oct 13, 2025

Como Instalar Nginx com PHP e MariaDB (LEMP Stack) com Opcache, Redis e Let's Encrypt no Ubuntu

O acrônimo “LEMP” representa um grupo de softwares que geralmente são instalados juntos para permitir que um servidor hospede sites dinâmicos e aplicações web. Este termo é, na verdade, um acrônimo que representa quatro componentes principais:

  1. Linux: O sistema operacional. O Linux é um sistema operacional de código aberto popular que serve como a base para o servidor.
  2. Engine-X (pronunciado como “nginx”): O servidor web. O Nginx é um servidor web de alto desempenho conhecido por sua estabilidade, rico conjunto de recursos, configuração simples e baixo consumo de recursos.
  3. MySQL ou MariaDB: O sistema de banco de dados. O MySQL é um sistema de gerenciamento de banco de dados relacional amplamente utilizado que armazena e gerencia os dados para o site ou aplicação. Observe que o MySQL é às vezes substituído pelo MariaDB, um fork aprimorado, totalmente de código aberto e desenvolvido pela comunidade do MySQL.
  4. PHP: A linguagem de programação. O PHP é uma linguagem de script do lado do servidor projetada para desenvolvimento web, mas também é usada como uma linguagem de programação de propósito geral.

O stack LEMP é uma escolha popular para hospedar sites que requerem um banco de dados e processamento do lado do servidor, como sites WordPress, plataformas de e-commerce e outras aplicações web dinâmicas. É comparável ao stack LAMP, onde o Apache (representado pelo “A” em LAMP) é usado em vez do Nginx.

Neste guia, você instalará um stack LEMP em um servidor baseado em Ubuntu 20.04. Também instalaremos o phpMyAdmin, Redis, Opcache e SSL Let’s Encrypt.

Pré-requisitos

  • Um servidor rodando Ubuntu 20.04.
  • Um usuário sudo não-root.
  • Certifique-se de que tudo está atualizado. shell $ sudo apt update $ sudo apt upgrade
  • Alguns pacotes que seu sistema precisa. shell $ sudo apt install wget curl nano -y Alguns desses pacotes podem já estar instalados em seu sistema.

Configurar Firewall

O primeiro passo é configurar o firewall. O Ubuntu vem com o ufw (Uncomplicated Firewall) por padrão.

Verifique se o firewall está em execução.

$ sudo ufw status

Você deve obter a seguinte saída.

Status: inactive

Permita a porta SSH para que o firewall não interrompa a conexão atual ao ativá-lo.

$ sudo ufw allow OpenSSH

Permita também as portas HTTP e HTTPS.

$ sudo ufw allow 80
$ sudo ufw allow 443

Ative o Firewall

$ sudo ufw enable
Comando pode interromper conexões ssh existentes. Prosseguir com a operação (y|n)? y
Firewall está ativo e habilitado na inicialização do sistema

Verifique o status do firewall novamente.

$ sudo ufw status

Você deve ver uma saída semelhante.

Status: active

Para                         Ação      De
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Instalar PHP

O Ubuntu 20.04 por padrão vem com PHP 7.4, mas para ter um repositório PHP atualizado, adicionaremos o repositório PHP do Ondrej.

Instale o repositório PHP do Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

Instale o PHP 7.4 junto com alguns pacotes adicionais.

$ sudo apt install php-cli php-fpm php-mysql -y

Verifique se o PHP está funcionando corretamente.

$ php --version

Você deve ver uma saída semelhante.

PHP 7.4.5 (cli) (built: Apr 28 2020 14:49:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Instalar MariaDB

O MariaDB é um substituto direto para o MySQL, o que significa que os comandos para executar e operar o MariaDB são os mesmos que os do MySQL.

O Ubuntu 20.04 por padrão vem com o MariaDB 10.3, que está um pouco desatualizado. Para obter a versão estável mais recente do MariaDB, instalaremos seu repositório oficial.

Adicione o repositório oficial do MariaDB.

$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu focal main'

Para instalar o MariaDB, emita o seguinte comando.

$ sudo apt install mariadb-server -y

Verifique se o MariaDB foi instalado corretamente.

$ mysql --version

Você deve ver a seguinte saída.

mysql  Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Ative o serviço MariaDB.

$ sudo systemctl enable mariadb

Execute o seguinte comando para realizar a configuração padrão, como definir uma senha de root, remover usuários anônimos, desabilitar o login remoto do root e descartar tabelas de teste.

$ sudo mysql_secure_installation

Com o MariaDB 10.4, agora você será questionado entre usar a senha de root ou o plugin unix_socket. O plugin unix_socket permite que você faça login no MariaDB com suas credenciais de usuário do Linux. É considerado mais seguro, embora você precise de um nome de usuário/senha tradicional para usar aplicativos de terceiros como o phpMyAdmin. Vamos continuar usando o plugin unix_socket para este tutorial. Você ainda pode usar o phpMyAdmin através de qualquer usuário que você criar para seus bancos de dados.

Pressionar Enter escolhe a opção padrão (a que está em maiúsculas, Y neste caso).

NOTA: EXECUTAR TODAS AS PARTES DESTE SCRIPT É RECOMENDADO PARA TODOS OS SERVIDORES MariaDB EM USO EM PRODUÇÃO!  POR FAVOR, LEIA CADA PASSO CUIDADOSAMENTE!

Para fazer login no MariaDB e protegê-lo, precisaremos da senha atual do usuário root. Se você acabou de instalar o MariaDB e não definiu a senha de root ainda, você deve apenas pressionar enter aqui.

Digite a senha atual para root (pressione enter para nenhum): [PRESSIONE ENTER]
OK, senha usada com sucesso, prosseguindo...

Definir a senha de root ou usar o unix_socket garante que ninguém possa fazer login no usuário root do MariaDB sem a devida autorização.

Você já protegeu sua conta root, então pode responder 'n' com segurança.

Alternar para autenticação unix_socket [Y/n] [PRESSIONE ENTER]
Habilitado com sucesso!
Recarregando tabelas de privilégios..
 ... Sucesso!

Você já protegeu sua conta root, então pode responder 'n' com segurança.

Alterar a senha de root? [Y/n] [RESPONDA n]
... pulando.

Por padrão, uma instalação do MariaDB tem um usuário anônimo, permitindo que qualquer um faça login no MariaDB sem ter uma conta de usuário criada para eles.  Isso é destinado apenas para testes e para tornar a instalação um pouco mais suave.  Você deve removê-los antes de passar para um ambiente de produção.

Remover usuários anônimos? [Y/n] [PRESSIONE ENTER]
 ... Sucesso!

Normalmente, o root deve ser permitido apenas conectar a partir de 'localhost'.  Isso garante que alguém não possa adivinhar a senha de root pela rede.

Desabilitar login remoto do root? [Y/n] [PRESSIONE ENTER]
 ... Sucesso!

Por padrão, o MariaDB vem com um banco de dados chamado 'test' que qualquer um pode acessar.  Isso também é destinado apenas para testes e deve ser removido antes de passar para um ambiente de produção.

Remover banco de dados de teste e acesso a ele? [Y/n] [PRESSIONE ENTER]
 \- Descartando banco de dados de teste...
 ... Sucesso!
 \- Removendo privilégios no banco de dados de teste...
 ... Sucesso!

Recarregar as tabelas de privilégios garantirá que todas as alterações feitas até agora tenham efeito imediato.

Recarregar tabelas de privilégios agora? [Y/n] [PRESSIONE ENTER]
 ... Sucesso!

Limpando...

Tudo pronto!  Se você completou todos os passos acima, sua instalação do MariaDB deve agora estar segura.

Obrigado por usar o MariaDB!

É isso. Na próxima vez que você quiser fazer login no MySQL, use o seguinte comando

$ sudo mysql

Digite sua senha de root quando solicitado.

Instalar Redis

Use o seguinte comando para instalar o Redis e a extensão PHP Redis correspondente.

$ sudo apt install redis php-redis

Configurar o Servidor Redis

Vamos realizar algumas configurações básicas no servidor Redis.

Abra o arquivo /etc/redis/redis.conf com o editor Nano.

$ sudo nano /etc/redis/redis.conf

Dentro do arquivo, localize a diretiva supervised. Esta diretiva permite que você declare um sistema init para gerenciar o Redis como um serviço. Está definido como no por padrão. Como estamos usando o Ubuntu, que utiliza o sistema init systemd, mude seu valor de no para systemd da seguinte forma.

supervised systemd

Se você quiser que clientes remotos se conectem à sua instância Redis, então encontre a linha bind 127.0.0.1 e mude para o seguinte.

bind 0.0.0.0

Você também pode mudar a porta padrão na qual o Redis escuta de 6379 para um valor de sua escolha.

port 3458

Para configurar o Redis como um servidor de cache, defina os seguintes valores conforme indicado.

maxmemory 256mb
maxmemory-policy allkeys-lru

Isso diz ao Redis para remover qualquer chave usando o algoritmo LRU quando a memória máxima de 256MB for atingida. Você pode definir o valor da memória conforme sua necessidade e o servidor que está usando.

Você pode definir uma senha para que qualquer cliente que precise do Redis precise se autenticar primeiro. Para fazer isso, defina uma senha usando a seguinte diretiva.

requirepass  

Você pode encontrar mais diretivas para alterar no arquivo de configuração. Uma vez que você tenha terminado, pressione Ctrl + X e digite Y quando solicitado para salvar o arquivo.

Reinicie o servidor Redis para aplicar as alterações.

$ sudo systemctl restart redis

Também precisaremos adicionar a regra em nosso Firewall se você quiser que clientes remotos se conectem a ele. Caso contrário, você pode pular esta etapa.

$ sudo ufw allow 6379/tcp

Você precisará mudar o valor no comando acima para corresponder à porta que você escolheu no arquivo de configuração acima.

Instalar Nginx

O Ubuntu 20.04 por padrão vem com a versão mais recente do Nginx. (1.17.10). No entanto, mudaremos para usar o repositório estável oficial do Nginx.

Instale alguns pré-requisitos primeiro.

$ sudo apt install curl gnupg2 ca-certificates lsb-release

Alguns desses já estão instalados em seu sistema.

Adicione o repositório do Nginx.

$ echo "deb [arch=amd64] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
$ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

Instale o Nginx.

$ sudo apt update
$ sudo apt install nginx -y

Verifique se está funcionando corretamente.

$ nginx -v

Você deve ver a seguinte saída dependendo da versão do Nginx que você escolheu instalar.

nginx version: nginx/1.18.0

Inicie e habilite o Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Abra o endereço IP do seu servidor em um navegador para ver a seguinte página. Isso significa que o Nginx está funcionando corretamente.

Página Padrão do Nginx

Configurar Nginx

Configure diretórios onde os blocos do servidor viverão.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Crie o diretório onde seu site viverá.

$ sudo mkdir /var/www/example.com/html -p

Usando a diretiva -p cria diretórios pai que não existiam antes.

Execute o seguinte comando para adicionar um arquivo de configuração para seu site.

$ sudo nano /etc/nginx/sites-available/example.com.conf

Cole o seguinte código no editor.

server {
  listen          *:80;
  server_name     example.com;
  root            /var/www/example.com/html;
  index           index.php index.html;

  location / {
    try_files   $uri $uri/ =404;
  }
    
  access_log /var/log/nginx/example.com.access.log;
  error_log /var/log/nginx/example.com.error.log;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include  fastcgi_params;
  }
}

Pressione Ctrl + X para fechar o editor e pressione Y quando solicitado para salvar o arquivo.

Este arquivo assume que estaremos hospedando example.com no diretório /var/www/html. Se você não vai usar nenhum domínio e configurar seu servidor para ser acessível apenas via endereço IP/localhost, você precisará remover as configurações correspondentes do bloco do servidor do arquivo nginx.conf, caso contrário, isso irá interferir no bloco do servidor que você criará.

Ative este arquivo de configuração vinculando-o ao diretório sites-enabled.

$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Abra o arquivo /etc/nginx/nginx.conf para edição.

$ sudo nano /etc/nginx/nginx.conf   

Cole as seguintes linhas após a linha include /etc/nginx/conf.d/*.conf

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
types_hash_max_size 4096;

Pressione Ctrl + X para fechar o editor e pressione Y quando solicitado para salvar o arquivo. Teste a configuração do Nginx.

$ sudo nginx -t

Você deve ver a seguinte saída indicando que sua configuração está correta.

nginx: o arquivo de configuração /etc/nginx/nginx.conf a sintaxe está ok
nginx: arquivo de configuração /etc/nginx/nginx.conf teste foi bem-sucedido

Recarregue o serviço Nginx.

$ sudo systemctl reload nginx

Configurar PHP-FPM

Abra o arquivo /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Precisamos definir o usuário/grupo Unix dos processos PHP para nginx. Encontre as linhas user=www-data e group=www-data no arquivo e mude para nginx.

...
; Usuário/grupo Unix dos processos
; Nota: O usuário é obrigatório. Se o grupo não for definido, o grupo do usuário padrão
;       será usado.
; RPM: usuário apache escolhido para fornecer acesso aos mesmos diretórios que httpd
user = nginx
; RPM: Mantenha um grupo permitido para escrever no diretório de log.
group = nginx
...

Além disso, encontre as linhas listen.owner=www-data e listen.group=www-data no arquivo e mude 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 php7.4-fpm

Para testar sua configuração PHP, crie um arquivo test.php na pasta html.

$ sudo nano /var/www/example.com/html/test.php

Adicione o seguinte conteúdo a ele e salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Acesse http:///test.php em seu navegador e você deve ver o seguinte.

Informação PHP

Instalar phpMyAdmin

Instalaremos o phpMyAdmin manualmente para nosso tutorial.

Primeiro, precisamos instalar alguns pacotes PHP adicionais para que o phpMyAdmin funcione.

$ sudo apt install php-mbstring php-zip php-gd php-json php-curl php-bz2 php-xml

Mude para o diretório /usr/share para baixar e instalar o phpMyAdmin.

$ cd /usr/share

Baixe os arquivos do phpMyAdmin. (Verifique a versão mais recente em seu site) Instalaremos apenas a versão em inglês.

$ sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-english.tar.gz
$ tar xvzf phpMyAdmin-5.0.2-english.tar.gz
$ sudo mv phpMyAdmin-5.0.2-english /usr/share/phpmyadmin
$ sudo rm phpMyAdmin*.tar.gz

Dê as permissões adequadas à pasta do phpMyAdmin.

$ sudo chown -R nginx:nginx phpmyadmin 
$ sudo chmod -R 744 phpmyadmin 

Configurar phpMyAdmin

Crie o arquivo de configuração a partir do arquivo de exemplo fornecido com o pacote.

$ sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

Precisamos adicionar um valor secreto no arquivo de configuração para cookies e propósitos de segurança. Use os seguintes comandos para gerar e adicionar o código.

$ randomBlowfishSecret=$(openssl rand -base64 32)
$ sed -i "s|cfg\['blowfish_secret'\] = ''|cfg['blowfish_secret'] = '$randomBlowfishSecret'|" /usr/share/phpmyadmin/config.inc.php

Para que o servidor web Nginx encontre e sirva os arquivos do phpMyAdmin corretamente, precisaremos criar um link simbólico de sua localização real para o diretório raiz do documento do Nginx.

Para fazer isso, execute o seguinte comando.

$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin

Sua instalação do phpMyAdmin está operacional. Para acessá-la, basta abrir http://example.com/phpmyadmin.

Por padrão, essa localização deve ser alterada, pois é a localização mais comum que qualquer hacker pode localizar sua instalação do phpMyAdmin. Para fazer isso, execute o seguinte comando.

$ sudo mv /var/www/example.com/html/phpmyadmin /var/www/example.com/html/sm123

Basicamente, movemos nossa localização do phpMyAdmin para a pasta sm123. Para acessá-la, agora você precisará abrir http://example.com/sm123 em seu navegador.

Como estamos usando unix_authentication com MySQL aqui, não há usuário root para fazer login via phpMyAdmin. Você precisará criar um usuário MySQL primeiro e dar a ele privilégios para bancos de dados para poder usar o phpMyAdmin.

Para fazer isso, faça login no shell do MySQL.

$ sudo mysql

Agora, cole os seguintes comandos para criar um novo usuário e conceder a ele todos os privilégios do banco de dados.

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
EXIT

Agora você pode fazer login usando este usuário em http://example.com/phpmyadmin.

Configurar Opcache

Se você seguiu este tutorial, o Opcache já deve estar instalado com o PHP. Caso não esteja, você pode simplesmente instalar o Opcache usando o seguinte comando.

$ sudo apt install php7.4-opcache   

Verifique se ele foi instalado.

$ php -v
PHP 7.4.5 (cli) (built: Apr 28 2020 14:49:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Para alterar as configurações do Opcache, abra o arquivo /etc/php/7.4/fpm/conf.d/10-opcache.ini.

$ sudo nano /etc/php/7.4/fpm/conf.d/10-opcache.ini

Cole o seguinte código no final do arquivo. As seguintes configurações devem ajudá-lo a começar a usar o Opcache e são geralmente recomendadas como boas para desempenho.

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.

Reinicie seu servidor para aplicar as configurações.

$ sudo systemctl restart php7.4-fpm

Instalar SSL via Let’s Encrypt

O SSL se tornou uma parte essencial de qualquer site. Aqui, instalaremos SSL usando o serviço Let’s Encrypt.

Para isso, primeiro instale a ferramenta Certbot.

$ sudo apt install certbot python3-certbot-nginx

Gere os certificados.

$ sudo certbot --nginx -d example.com

Se esta for a primeira vez que você está executando o certbot em seu sistema, você será solicitado a fornecer um endereço de e-mail e a concordar com os termos de serviço. Você também será perguntado se concorda em compartilhar dados com a fundação EFF, o que você pode dizer não. Depois de fazer isso, o certbot se comunicará com os servidores Let’s Encrypt e executará um desafio para verificar seus domínios.

Se isso for bem-sucedido, você será perguntado como lidar com redirecionamentos HTTPS.

Por favor, escolha se o acesso HTTPS é obrigatório ou opcional.
-------------------------------------------------------------------------------
1: Fácil - Permitir acesso HTTP e HTTPS a esses sites
2: Seguro - Fazer todos os pedidos redirecionarem para acesso seguro HTTPS
-------------------------------------------------------------------------------
Selecione o número apropriado [1-2] e pressione [enter] (pressione 'c' para cancelar):

Selecione sua escolha e pressione enter. Seus certificados serão então criados e seus arquivos de configuração do Nginx serão atualizados com as configurações SSL.

Seus certificados estão prontos e você pode abrir seu site agora acessando https://example.com

Verificar Auto-Renovação do SSL

Este é o último passo antes de encerrarmos este tutorial.

Verifique o processo de renovação fazendo um teste do processo de renovação.

$ sudo certbot renew --dry-run

Se você não receber erros, isso significa que você está pronto. O Certbot renovará automaticamente seus certificados para você. Você receberá um e-mail avisando sobre a expiração do certificado.

Conclusão

Isso é tudo para este tutorial. Sua configuração LEMP está completa e você pode começar a criar e hospedar seus sites e aplicações.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.