Tag: magento aws

  • Instalação do LEMP e Lets Encrypt Magento 2

    Instalação do LEMP e Lets Encrypt Magento 2

    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:

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

    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.

    Remova o arquivo default do nginx

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

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

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

    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 22: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 \
    --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.

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