Alex Junio
Voltar para o Blog
Magento

Instalação do LEMP e Lets Encrypt Magento 2

admin

admin

Engenheiro Cloud & DevOps

Publicado em

14/03/2025

Compartilhe

Como instalar o Magento 2 com Nginx Let’s Encrypt SSL no Ubuntu 22:04 LTS

No capítulo anterior você aprendeu a identificar e saber dos requisitos do Magento 2. Agora iremos iniciar o setup do servidor.

O LEMP (Linux, Nginx, MySQL e PHP), será a stack adotada para este 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:

bash
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”

bash
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

bash
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.

bash
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

bash
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.

bash
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.

bash
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.

bash
# 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.

bash
# 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.

bash
# 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 22: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.

bash
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.

bash
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.

bash
# 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.

bash
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.

bash
# 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.

bash
host seudominio.com.br

Se tudo estiver ok, você já pode rodar o comando de emissão do certificado SSL.

bash
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.

Remova o arquivo default do nginx

bash
sudo rm /etc/nginx/sites-enabled/default

Cole o novo bloco de configuração e substitua os valores de domínio

bash
sudo nano /etc/nginx/sites-enabled/default
bash
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;
}

Salve o arquivo.

Agora podemos partir para a próxima etapa.

Passo 8 – Instalação do RabbitMQ Ubuntu 22:04

Para instalar o RabbitMQ no Ubuntu 22.04, siga os seguintes passos abaixo.

bash
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.

bash
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.

bash
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 22:04 siga os passos abaixo.

bash
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.

bash
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.

bash
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

bash
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.

bash
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 \
--admin-email=admin@admin.com \
--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.

bash
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..

admin

Escrito por admin

Engenheiro Cloud & DevOps com mais de 10 anos de experiência construindo e escalando infraestruturas de alto tráfego em AWS, DigitalOcean e Servidores Dedicados.

Conhecer Serviços →

Comentários (4)

Deixe seu comentário

U
Thiago Moreira
Thiago Moreira
Há 2 dias

Excelente artigo, Alex! Estávamos exatamente com esse problema de overprovisioning na nossa startup. Aplicar os Savings Plans salvou quase 30% da nossa conta mensal.

Alex Junio
Alex JunioAutor
Há 1 dia

Fico feliz que ajudou, Thiago! Essa economia faz total diferença no longo prazo. Se precisarem de ajuda para escalar o banco de dados depois, me deem um toque.

Juliana Costa
Juliana Costa
Há 4 dias

Não tinha pensado em usar Spot para as filas do SQS. Existe algum risco do Spot ser finalizado no meio de um processamento pesado de vídeo?

Alex Junio
Alex JunioAutor
Há 4 dias

Sim, Juliana! A AWS te avisa com 2 minutos de antecedência. O segredo é sua aplicação capturar o evento de interrupção e colocar a mensagem de volta na fila (visibility timeout) antes da máquina morrer.

Roberto Freitas
Roberto Freitas
Há 1 semana

Muito bom o conteúdo técnico. Falta só mais detalhes sobre instâncias Graviton.

Carla Mendes
Carla Mendes
Há 1 semana

Sensacional! Usei as dicas de Right-Sizing e deu muito certo no meu e-commerce.