Nesse post vou mostrar como instalar o Nginx + PHP 7 + MySQL (Maria DB), no nosso ambiente de desenvolvimento, mas nada impede que possamos usá-lo no ambiente de produção. Essa configuração também é conhecida como LEMP Stack, vamos instalar e configurar todos os itens individualmente e no final tem um bônus para você.

PHP 7.2 Disponível

Existe uma versão deste post com PHP 7.2, clique aqui para visualizar.

UPDATE: Agora existe uma versão deste post com o PHP 7.1 clique aqui e confira.

Disclaimer

Esse post foi atualizado em 22/01/2017 e testado com sucesso em uma instalação limpa do Ubuntu 16.10 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 o sistema

Vamos começar garantido que o sistema está atualizado, no terminal rode o comando abaixo e aguarde o termino do processo.

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

Instalando o MySQL

Agora que o sistema está atualizado, vamos começar instalando o MySQL, nesse caso vamos instalar o MariaDB que é a versão open source do MySQL, não vou entrar em detalhes sobre por que utilizá-lo, existem muitos materiais disponíveis sobre isso, google it.

No terminal rode o comando abaixo, e informe sua senha, você pode deixá-la em branco no ambiente de desenvolvimento, mas lembre-se de utilizar uma senha segura no ambiente de produção.

sudo apt-get install mariadb-server

A dica abaixo é opcional no ambiente de desenvolvimento, mas é altamente recomendável que você execute o comando abaixo no servidor de produção.

O comando mysql_secure_installation é muito importante e deve ser usado no servidor de produção, o assistente irá nos guiar através de algumas opções que vem por configuradas por padrão, mas são perigosas de se usar em no servidor de produção.

sudo mysql_secure_installation

Informe sua senha, se você deixou sua senha em branco, apenas tecle enter.

Esta é uma oportunidade para você mudar sua senha para algo seguro se você não tiver feito isso.

Você deve responder "Y" (Sim) para todas as questões restantes.

Pronto, agora nosso MySQL está pronto para uso.

Instalando o Nginx

Seguindo, agora vamos instalar o Nginx, é simples, rode o comando abaixo e aguarde o termino.

sudo apt-get install nginx

Abra o navegador e acesse http://localhost, se tudo correu bem você deve estar vendo a página de boas vindas do Nginx e isso é um ótimo sinal.

Instalando o PHP 7

Agora vamos instalar a estrela do nosso stack, a versão   7 do PHP. Vamos para o terminal

sudo apt-get install php7.0-cli php7.0-fpm php7.0-mysql php7.0-curl php-memcached php7.0-dev php7.0-mcrypt php7.0-sqlite3 php7.0-mbstring

Rode o comando abaixo e veja o que é retornado.

php -v

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.0/fpm/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.0/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.0-fpm

Se você chegou até aqui já pode se considerar um vencedor, agora vamos integrar o Nginx com o PHP7.

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 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.0-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, reinicie os serviços.

sudo service php7.0-fpm restart && service nginx restart

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.

Mcrypt

Um requisito da grande maioria dos frameworks PHP é que a extensão mcrypt do PHP também esteja ativa, rode o comando abaixo e reinicie o php7.0-fpm novamente.

phpenmod mcrypt
sudo service php7.0-fpm restart

Bônus 1: Instalar o XDebug

O XDebug é uma ferramenta indispensável para quem programa em PHP. Como bônus vou mostrar como instalá-lo.

Como sou um cara muito legal, vou facilitar sua vida e deixar os comandos prontinhos para você usar, basta colar no terminal.

wget http://xdebug.org/files/xdebug-2.5.0.tgz
tar -xvzf xdebug-2.5.0.tgz
cd xdebug-2.5.0
phpize
./configure
make
sudo cp modules/xdebug.so /usr/lib/php/20151012
sudo echo 'zend_extension = /usr/lib/php/20151012/xdebug.so' >> /etc/php/7.0/fpm/php.ini
sudo service php7.0-fpm restart

Tudo certo, volte na página de informações e aperte f5, procure por xdebug support e verifique que ele está enabled.

Bônus 2: Instalar o Composer

Novamente, se você esta configurando um ambiente de desenvolvimento este passo é segundo presentinho para você.

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

Execute composer no terminal e veja que agora você pode utilizá-lo onde quiser.

Conclusão

Rapidamente e quase sem nenhum trabalho configuramos nosso ambiente de desenvolvimento para utilizar o PHP 7 e de quebra configuramos o XDebug.

Obrigado por ler e até a próxima =]