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:
- Linux: O sistema operacional. O Linux é um sistema operacional de código aberto popular que serve como a base para o servidor.
- 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.
- 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.
- 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 -yAlguns 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.

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:// em seu navegador e você deve ver o seguinte.

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.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.