Matheus Lima

Dica

Instalando o Nginx + PHP 7 + MySQL (LEMP)

Posted on .

Instalando o Nginx + PHP 7 + MySQL (LEMP)

Introduction

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

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.

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 =]

matheuslima

matheuslima

https://matheuslima.com.br

Meu nome é Matheus Lima, sou desenvolvedor web, entusiasta Linux, pai de família, apaixonado por pesca, ouvinte de boa música e aspirante a chef de cozinha. Prazer!

Comments
  • user

    AUTHOR Nielsen Martins Gonçalves

    Posted on 05:23 24 de fevereiro de 2016.
    Responder

    Valeu parceiro, funcionou perfeitamente!

  • user

    AUTHOR Fernando Rodrigues

    Posted on 16:02 22 de março de 2016.
    Responder

    Olá!!!

    Muito bom o conteúdo!
    Só tive um problema que não estou conseguindo solucionar.

    A instalação do PHPMyAdmin não funciona. Eu baixei uma pronta que parece funcionar, porem sempre dá senha inválida.
    git clone –depth=1 –branch=STABLE https://github.com/phpmyadmin/phpmyadmin.git

    Tentei recuperar a senha e modificar de diversas maneiras, porem sem sucesso.

    Poderia me ajudar?

  • user

    AUTHOR Thiago

    Posted on 03:17 7 de maio de 2016.
    Responder

    Muito Obrigado, esse post me ajudou a resolver um outro problema que eu tinha.

  • user

    AUTHOR Eduardo Henrique

    Posted on 20:23 1 de novembro de 2016.
    Responder

    Excelente!

  • user

    AUTHOR Luiz Gustavo Santos

    Posted on 13:28 15 de dezembro de 2016.
    Responder

    Muito bom! Valeu \o/

  • Deixe uma resposta

    View Comments (7) ...
    Navigation