Como instalar o Magento 2 com Nginx Let’s Encrypt SSL no Ubuntu 20:04 LTS
- Capítulo 1. Introdução e Requisitos Magento 2.4 na AWS
- Capítulo 2. Configurações Iniciais Magento 2.4 AWS
- Capítulo 3. Instalação do LEMP SSL RabbitMQ Elasticsearch e Magento 2.4.5
No capítulo anterior realizamos algumas configurações iniciais em nosso servidor.
O LEMP (Linux, Nginx, MySQL e PHP), será o core nesse setup. No entanto, iremos realizar customizações específicas para que possamos estar em conformidade com os requisitos de sistema do Magento 2.
Existem diversos tutoriais na internet de como instalar o LEMP, mas siga exatamente os passos abaixo pois tudo será pensado em Magento 2.
O que faremos ?
- Instalar o Nginx
- Instalar e configurar o PHP-FPM 8.1
- Instalar e configurar o MySQL 8
- Instalar o Composer 2
- Criar usuário SSH para deploy
- Gerar SSL Lets Encrypt
- Configurar o virtualhost do Nginx para Magento 2
Passo 1 – Instalar o Nginx
Instale o Nginx executando os comandos abaixo:
sudo apt -y install nginx
sudo systemctl enable nginx
Pode ser que o firewall do seu servidor esteja habilitado e com isso as portas 80 e 443 não funcionarão para a internet. Execute o comando abaixo para liberar as portas HTTP e HTTPS.
“Selecione todas as quatro linhas”
for svc in ssh http https
do
sudo ufw allow $svc
done
Passo 2 – Instalar e configurar o PHP-FPM 8.1
A seguir vamos instalar o PHP 8.1 com FPM e extensões do Magento 2.4
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install -y php8.1 php8.1-fpm php8.1-bcmath php8.1-intl php8.1-soap php8.1-zip php8.1-gd php8.1-curl php8.1-cli php8.1-xml php8.1-xmlrpc php8.1-redis php8.1-opcache php8.1-mbstring php8.1-apcu
sudo apt install -y php8.1-xsl php8.1-simplexml php8.1-mysql php8.1-ctype php8.1-dom php8.1-iconv php8.1-common php8.1-mcrypt php8.1-pdo php8.1-gmp php8.1-tidy php8.1-lz4
Precisamos customizar o php.ini do PHP-FPM 8.1 , iremos aproveitar e realizar algumas otimizações e habilitar o opcache. Execute todos os comandos abaixo no terminal.
sudo sed -i "s/.*memory_limit.*/memory_limit = 2G/" /etc/php/8.1/fpm/php.ini
sudo sed -i "s/.*max_execution_time.*/max_execution_time = 1800/" /etc/php/8.1/fpm/php.ini
sudo sed -i "s/.*zlib.output_compression.*/zlib.output_compression = On/" /etc/php/8.1/fpm/php.ini
sudo sed -i "s/.*cgi.fix_pathinfo.*/cgi.fix_pathinfo = 0/" /etc/php/8.1/fpm/php.ini
sudo sed -i "s/.*opcache.enable.*/opcache.enable = 1/" /etc/php/8.1/fpm/php.ini
sudo sed -i "s/.*opcache.save_comments.*/opcache.save_comments = 1/" /etc/php/8.1/fpm/php.ini
sudo sed -i "s/.*opcache.memory_consumption.*/opcache.memory_consumption = 256/" /etc/php/8.1/fpm/php.ini
sudo sed -i "s/.*opcache.max_accelerated_files.*/opcache.max_accelerated_files = 100000/" /etc/php/8.1/fpm/php.ini
sudo sed -i "s/.*date.timezone.*/date.timezone = America\/Sao_Paulo/" /etc/php/8.1/fpm/php.ini
Agora inicie o PHP-FPM
systemctl start php8.1-fpm
systemctl enable php8.1-fpm
Passo 3 – Instalação do MySQL 8
Execute o comando abaixo para que você instale o servidor MySQL 8.
sudo apt install -y mysql-server
Bom, vamos criar um usuário e database para nossa loja magento 2. Logue no servidor MySQL com o comando abaixo.
sudo mysql -u root
Uma vez que está logado no servidor MySQL, execute os comandos abaixo para configurar o usuário e banco de dados do magento. Lembre-se de personalizar conforme seu uso.
# CRIANDO USUARIO
CREATE USER 'USERMAGENTO'@'%' IDENTIFIED BY 'SENHAUSERMAGENTO';
ALTER USER 'USERMAGENTO'@'%' IDENTIFIED WITH mysql_native_password BY 'SENHAUSERMAGENTO';
# LIBERANDO TODOS OS PRIVILEGIOS PARA O USUARIO
GRANT ALL PRIVILEGES ON *.* TO 'USERMAGENTO'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# SAIR DO MYSQL
exit;

Ainda não finalizamos! Agora vamos acessar novamente o MySQL, no entanto, utilizando o usuário que acabamos de criar. E com isso criar a database para o Magento 2.
# INSIRA O USUARIO CRIADO E TAMBEM A SENHA CONFIGURADA
sudo mysql -u USERMAGENTO -p
Se tudo ocorreu bem, você logou novamente no MySQL. Agora vamos criar uma database para o magento.
# CRIANDO DATABASE
CREATE DATABASE MAGENTO2;
# SAIR DO MYSQL
exit;
Nesse momento a configuração para o banco de dados é:
- User: USERMAGENTO
Pass: SENHAUSERMAGENTO - Database: MAGENTO2
Passo 4. Instalação do Composer 2 Ubuntu 20:04
O composer é um gerenciador de dependências para o PHP, com ele podemos instalar pacotes de nível de aplicativo e uma série de bibliotecas adicionais para o projeto. Inclusive o Magento 2 depende e muito desse cara.
Execute os comandos abaixo para instalar e configurar o composer 2.
curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
Agora teste se o composer está funcionando corretamente com o comando abaixo.
composer --version
Se a versão do composer for carregada na tela, significa que está funcional.
Passo 5 – Criando Usuário SSH para Deploy do Magento
Para desenvolver um e-commerce magento 2, você precisa de acesso SSH para realizar deploy e comandos de rotina. Sem enrolação, execute os comandos abaixo.
# CRIAR DIRETORIO ROOT DO MAGENTO
sudo mkdir -p /home/ecommerce
# CRIAR USUARIO
sudo useradd -d /home/ecommerce -s /bin/bash USER-DEPLOY
# DEFINIR PERMISSOES PARA USUARIO
sudo usermod -a -G www-data USER-DEPLOY
sudo chown -R www-data:www-data /home/ecommerce
sudo chmod -R g+w /home/ecommerce
# DEFINIR SENHA PARA USUARIO
sudo passwd USER-DEPLOY
- USER-DEPLOY: Usuario a ser criado, você deve inserir outro nome.
Passo 6 – Gerando certificado SSL com o Lets Encrypt
Para instalarmos o SSL Let’s Encrypt precisamos instalar o Certbot e também um plugin para Nginx, pois vamos utiliza-lo no processo de emissão.
sudo snap install core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo apt install -y python3-certbot-nginx
Vamos editar o arquivo host virtual do nginx, para que possamos conseguir emitir o certificado SSL, caso contrário teremos sérios problemas.
Em server_name , você deve inserir o domínio que está trabalhando.
# REMOVENDO O ARQUIVO DEFAULT, POIS NAO PRECISAMOS DELE
sudo rm /etc/nginx/sites-enabled/default
# CRIANDO UM VIRTUALHOST PROVISÓRIO
# COPIE TODAS AS LINHAS ABAIXO ATÉ O EOF
cat > default << EOF
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name magento-dev.shop www.magento-dev.shop;
location / {
try_files $uri $uri/ =404;
}
}
EOF
# ENVIE O ARQUIVO GERADO PARA O NGINX
sudo mv default /etc/nginx/sites-enabled/
# RESTARTE O NGINX
sudo systemctl restart nginx
Agora você precisa apontar o seu domínio para o IP do servidor e aguardar a propagação pois o certbot valida se o domínio realmente está apontado para o servidor, caso contrário a emissão falhará.

Verifique se o seu domínio já está sendo resolvido corretamente, no terminal execute o comando abaixo e veja se imprime na tela o IP do servidor.
host seudominio.com.br
Se tudo estiver ok, você já pode rodar o comando de emissão do certificado SSL.
sudo certbot --nginx -d seudominio.com.br -d www.seudominio.com.br
A emissão é rápida, e durante o processo você poderá escolher se quer redirecionar tudo de HTTP para HTTPS, selecione a opção 2.
Se tudo ocorreu bem, a saída do comando resultará em várias mensagens e um “Congratulations!” informando que o certificado foi emitido. Para verificar se realmente o SSL está configurado, basta acessar no navegador o domínio da loja.
Passo 7 – Configurando Nginx para Magento 2
Nessa etapa vamos configurar um server block (virtualhost) específico para o Magento 2. Lembre-se de realizar as alterações:
- server_name
- SSL certificate
Copie o conteúdo abaixo para um editor de sua preferência, e após reajusta-lo siga os passos abaixo.
upstream fastcgi_backend {
server unix:/run/php/php8.1-fpm.sock;
}
server {
listen 80;
server_name seudominio.com.br www.seudominio.com.br;
#include snippets/letsencrypt.conf;
return 301 https://magento-dev.shop$request_uri;
}
server {
listen 443 ssl http2;
server_name seudominio.com.br www.seudominio.com.br;
ssl_certificate /etc/letsencrypt/live/seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seudominio.com.br/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/seudominio.com.br/chain.pem;
#ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;
keepalive_timeout 300s;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
set $MAGE_ROOT /home/ecommerce/public_html;
set $MAGE_MODE developer; # or production
include /home/ecommerce/public_html/nginx.conf.sample;
}
# REMOVENDO O ARQUIVO DEFAULT, POIS NAO PRECISAMOS DELE
sudo rm /etc/nginx/sites-enabled/default
# CRIE UM NOVO ARQUIVO DEFAULT COLE O CONTEÚDO DO SERVER BLOCKS E SALVE
sudo nano /etc/nginx/sites-enabled/default
Agora podemos partir para a próxima etapa.
Passo 8 – Instalação do RabbitMQ Ubuntu 20:04
Para instalar o RabbitMQ no Ubuntu 20.04, siga os seguintes passos abaixo.
sudo apt install -y rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
Agora, o RabbitMQ está instalado e funcionando no seu servidor.
Podemos habilitar o plugin rabbitmq_management para poder acessar o RabbitMQ pelo navegador.
sudo rabbitmq-plugins enable rabbitmq_management
Você pode acessar o RabbitMQ utilizando o IP ou URL da sua loja:
- http://seu_ip:15672
- http://sualoja.com.br:15672
Abra a loja no navegador e verá que será solicitado um usuário e senha para login, por padrão o usuário e senha é “guest”. Mas vamos configurar um novo usuário para nossa loja magento 2.
Execute os comandos abaixo e troque apenas o nome de usuário e senha.
rabbitmqctl add_user USUARIO SENHA
rabbitmqctl set_user_tags USUARIO administrator
Agora você já pode acessar o RabbitMQ pelo navegador usando o usuário e senha configurados.

Passo 9 – Instalação do Elasticsearch
Para instalar o Elasticsearch no Ubuntu 20:04 siga os passos abaixo.
sudo apt install -y openjdk-17-jdk
sudo curl -sSfL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --no-default-keyring --keyring=gnupg-ring:/etc/apt/trusted.gpg.d/magento.gpg --import
sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list'
sudo chmod 666 /etc/apt/trusted.gpg.d/magento.gpg
sudo apt update
sudo apt install -y elasticsearch
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
Agora precisamos realizar algumas customizações caso contrário o Elasticsearch vai devorar a memória RAM do servidor. Para um servidor de desenvolvimento os parâmetros abaixo são suficientes.
sudo sed -i "s/.*cluster.name.*/cluster.name: magento2/" /etc/elasticsearch/elasticsearch.yml
sudo sed -i "s/.*-Xms4g.*/-Xms256m/" /etc/elasticsearch/jvm.options
sudo sed -i "s/.*-Xmx4g.*/-Xmx256m/" /etc/elasticsearch/jvm.options
sudo systemctl start elasticsearch.service
Passo 10 – Instalação do Magento 2 via Composer
Agora chegou do vamos ver! Vamos iniciar o setup do magento 2 no nosso servidor. Iremos realizar o setup via composer, e você vai precisar gerar um usuário e chave de acesso ao repositório do magento.
Gerar chave: https://marketplace.magento.com/customer/account/
No servidor, execute os passos.
1 – Acesse o usuário SSH gerado no passo 5.
sudo su USER-DEPLOY
cd ~
composer create-project --repository-url=https://repo.magento.com/ public_html
cd public_html
chmod +x bin/magento
2 – Faça o download o magento 2
composer create-project --repository-url=https://repo.magento.com/ public_html
cd public_html
3 – Instale o Magento 2 usando todo o comando abaixo, você precisa alterar os dados do banco de dados, domínio e usuário administrativo do Magento.
bin/magento setup:install \
--base-url=https://seudominio.com.br \
--backend-frontname=m2adm \
--db-host=localhost \
--db-name=MAGENTO2\
--db-user=USERMAGENTO\
--db-password=SENHAUSERMAGENTO \
--admin-firstname=admin \
--admin-lastname=admin \
[email protected] \
--admin-user=admin\
--admin-password=admin123 \
--language=en_US \
--currency=BRL \
--timezone=America/Sao_Paulo \
--use-rewrites=1 \
--search-engine=elasticsearch7 \
--elasticsearch-host=localhost \
--elasticsearch-port=9200 \
--elasticsearch-index-prefix=magento2 \
--elasticsearch-timeout=15 \
--session-save=files \
--use-rewrites=1
Se tudo ocorreu bem, você verá uma saída similar abaixo.

Agora o magento 2 foi instalado com sucesso. Para finalizar, corrija as permissões dos arquivos gerados para que não tenha nenhum problema na execução da loja.
chown -R www-data:www-data .

Conclusão
Nesse guia você aprendeu a configurar um servidor básico para hospedagem de lojas magento 2 na Amazon AWS para desenvolvimento.
Realizamos uma série de customizações no PHP-FPM, Nginx e Elasticsearch, para que nossa loja rode perfeitamente bem.
Existem várias ferramentas que ainda podemos instalar com foco em desenvolvimento, irei atualizar esse guia regularmente.
Gostou desse guia? Deixe nos comentários..