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.
Existe uma versão deste post com PHP 7.3, clique aqui para visualizar.
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..
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
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
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
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.
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
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
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.2 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+o
e 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ê.
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.
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
Espero que este post tenha sido útil e caso tenha alguma duvida, deixe nos comentários.
Obrigado por ler e até a proxima =]