Hoje é o dia de mostrar como instalar o Nginx + PHP 7.2 + MySQL o famoso LEMP, opcionalmente também mostrarei como instalar o xDebug e o Composer.

Disclaimer

Esse post foi testado com sucesso em uma instalação limpa do Ubuntu 16.04 x64, então na teoria você pode utilizar este post em qualquer distribuição baseada no Debian, tais como, Mint, Elementary OS e etc..

Atualizando

Vamos atualizar o sistema e deixar tudo zerado para começarmos com o pé direito, no terminal rode o comando a baixo e aguarde.

sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade

Pacotes essenciais

Vamos instalar alguns pacotes que serão necessários para realizar nossa configuração.

sudo apt-get install software-properties-common python-software-properties curl

MySQL

Com o sistema atualizado agora vamos começar de verdade, primeiro vamos instalar o MySQL. No terminal rode o comando abaixo, e informe sua senha, caso queira você pode deixá-la em branco no ambiente de desenvolvimento, nem preciso dizer para você utilizar uma senha segura no servidor de produção, não é?

sudo apt-get install mysql-server

O comando a seguir é opcional se você está usando no seu ambiente de desenvolvimento, mas você estiver usando este post para configurar um servidor de produção recomendo fortemente que o comando mysql_secure_instalation seja executado.

sudo mysql_secure_installation

A primeira pergunta é se você quer testar a força da sua senha: responda com Y (sim) ou N (não).

Segunda pergunta é sobre alterar a senha de root: novamente Y ou N.

Terceira questão é se você deseja remover os usuários anônimos do mysql: Y com toda certeza!

Quarta questão, desabilitar o login remoto do root?, Y claro!. Se você quer utilizar o login remoto, crie um usuário e configure as devidas permissões para o mesmo.

Quinta questão, remover a base teste e o acesso a ela?: Y

Sexta e ultima questão, recarregar os privilégios? Y

Instalando o Nginx

Agora é a hora de instalar o Nginx, rode o comando abaixo e aguarde o termino.

sudo apt-get install nginx

Abra o navegador e acesse http://localhost ou http://seu.ip, a pagina de boas vindas do Nginx deve ser exibida.

Instalando o PHP 7.2

Seguindo a instalação agora vamos instalar o PHP 7.2 que foi lançado em 30/09/2017. Precisamos adicionar o repositório PPA ,pois o até o momento que este post foi escrito ele ainda não foi adicionado ao repositório oficial do Ubuntu, mas não se preocupe, este é um procedimento muito comum.

sudo add-apt-repository -y ppa:ondrej/php && sudo apt-get update

Agora que o repositório esta instalado e a lista de pacotes esta atualizada, copie e cole o comando abaixo para instalar.

sudo apt-get install php7.2-cli php7.2-fpm php7.2-mysql php7.2-curl php-memcached  php7.2-dev php7.2-sqlite3 php7.2-mbstring php7.2-gd php7.2-json php7.2-xmlrpc php7.2-xml php7.2-zip

Rode o comando abaixo e veja o que o PHP 7.2 foi instalado.

php -v

Dica: caso queira ver todos pacotes disponiveis para o PHP 7.2 basta usar o comando abaixo.

sudo apt-cache search php7.2

Dica de ouro: deixando o PHP mais seguro

Vamos fazer uma pequena alteração na configuração do PHP para tornar nossa configuração mais segura.

Abra o arquivo /etc/php/7.2fpm/php.ini com o nano e procure pela linha (ctrl + w) cgi.fix_pathinfo, ela está comentada por ; e com valor setado para 1, descomente a linha e defina o valor para zero.

sudo nano /etc/php/7.2/fpm/php.ini

Deve ficar conforme abaixo

cgi.fix_pathinfo=0

Esta é uma configuração previne que o PHP tente executar o arquivo mais PHP próximo se o arquivo solicitado não puder ser encontrado. Isso basicamente permitiria aos usuários elaborar pedidos PHP de uma forma que permitisse executar scripts que não deveriam ser autorizados a executar. Tudo certo, renicie o PHP-fpm com o comando abaixo

sudo systemctl restart php7.2-fpm

Integrando o PHP 7.2 ao Nginx

Primeiramente vamos fazer um backup da configuração atual do Nginx. Lembre-se shit happens, e você ainda pode consultar o arquivo de configuração original em caso de duvidas.

sudo mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default_config

Agora vamos criar um arquivo de configuração que já integra o PHP 7.1 ao nosso Nginx.

sudo nano /etc/nginx/sites-available/default

Copie e cole a configuração abaixo no arquivo.

server {
    # Port that the web server will listen on.
    listen 80;

    # Host that will serve this project.
    server_name localhost;

    # Useful logs for debug.
    access_log /var/log/nginx/localhost_access.log;
    error_log /var/log/nginx/localhost_error.log;
    rewrite_log on;

    # The location of our projects public directory.
    root /usr/share/nginx/html;

    # Point index to the Laravel front controller.
    index index.php index.html;

    location / {
        # URLs to attempt, including pretty ones.
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Remove trailing slash to please routing system.
    if (!-d $request_filename) {
        rewrite ^/(.+)/$ /$1 permanent;
    }

    # PHP FPM configuration.
    location ~* \.php$ {
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # We don't need .ht files with nginx.
        location ~ /\.ht {
        deny all;
    }

    # Set header expirations on per-project basis
    location ~* \.(?:ico|css|js|jpe?g|JPG|png|svg|woff)$ {
        expires 365d;
    }
}

Salve o arquivo ctrl+oe saia ctrl+x. Teste a configuração no Nginx

sudo nginx -t

Reinicie os serviços.

sudo systemctl restart php7.2-fpm && systemctl restart nginx

Agora vamos criar um arquivo chamado info.php para ver se nossa configuração funcionou.

sudo nano /usr/share/nginx/html/info.php 

Copie e cole o código abaixo.

<?php
    phpinfo();

Volte ao navegador e acesse http://localhost/info.php, desta vez você deve ver uma página com todas as informações do PHP 7.2. Se tudo correu bem, você deve estar feliz da vida vendo uma pagina meio roxa com as informações do seu PHP.

Quem acompanha meu blog sabe que eu sempre deixo um presentinho no final de posts desse tipo, dessa vez não seria diferente, deixei os passos opcionais a baixo para você.

Instalar o xDebug (opcional)

O XDebug é uma ferramenta indispensável para quem programa em PHP, se você esta configurando um ambiente de desenvolvimento, siga em frente, vamos instalar o XDebug de uma maneira bem sussa.

wget http://xdebug.org/files/xdebug-2.6.0RC2.tgz
tar -xvzf xdebug-2.6.0RC2.tgz
cd xdebug-2.6.0RC2
phpize
./configure
make
sudo cp modules/xdebug.so /usr/lib/php/20170718
sudo echo 'zend_extension = /usr/lib/php/20170718/xdebug.so' >> /etc/php/7.2/fpm/php.ini
sudo systemctl restart php7.2-fpm

Volte na página de informações do PHP e aperte f5, procure por xdebug support e verifique que ele está enabled.

Instalar o Composer (opcional)

Acho que nem preciso explicar o que é o Composer, se você programa em PHP certamente já sabe o que ele é, vamos instalá-lo globalmente para utilizarmos em qualquer lugar do nosso sistema. Rode este comando gigante abaixo e Voilà.

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Conclusão

Espero que este post tenha sido útil e caso tenha alguma duvida, deixe nos comentários.

Obrigado por ler e até a proxima =]