Instalação do PHP 7 no CentOS 7 com Nginx
Introdução
Neste tutorial pretendo abordar a instalação do PHP 7 na distribuição CentOS versão 7 com o servidor web Nginx.
Pré-requisitos
CentOS instalado (preferencialmente na versão minimal).
Instalação
Nginx
A instalação do Nginx é bem simples pelo repositório EPEL:
# yum install epel-release
# yum install nginx
PHP
Como o PHP 7.x ainda não está empacotado em repositórios oficiais para as principais distribuições, confiaremos em uma fonte de terceiros. Vários repositórios oferecem arquivos PHP 7 em RPM. Usaremos o repositório IUS (Inline with Upstream Stable).
O IUS oferece um script de instalação para se inscrever no seu repositório e importar as chaves GPG associadas. Certifique-se de que você está no seu diretório pessoal e baixe o script usando o curl:
$ cd ~
$ curl 'https://setup.ius.io/' -o setup-ius.sh
Execute o script:
$ sudo bash setup-ius.sh
Instale os pacotes PHP7 do IUS.
# yum install php71u-fpm-nginx php71u-cli php71u-mysqlnd
Configuração
Uma vez que a instalação tem terminado, você precisará fazer algumas mudanças na configuração do PHP-FPM e do Nginx. Conforme configurado, o PHP-FPM escuta por conexões em um socket TCP local, enquanto o Nginx espera por um socket de domínio Unix, que mapeia para um caminho no sistema de arquivos.
PHP-FPM
PHP-FPM pode lidar com múltiplas “pools” de processos filhos. Como configurado, fornece uma única pool chamada “www”, que está definida em /etc/php-fpm.d/www.conf. Edite esse arquivo assim:
# vim /etc/php-fpm.d/www.conf ;listen = 127.0.0.1:9000 listen = /run/php-fpm/www.sock listen.acl_users = nginx
Nginx
No próximo passo, precisamos ter certeza que o Nginx está usando o caminho correto do socket para lidar com os arquivos PHP. Isso poderá ser feito no arquivo php-fpm.conf. Esse arquivo define um upstream, que pode ser referenciado por outra diretiva na configuração do Nginx.
# vim /etc/nginx/conf.d/php-fpm.conf upstream php-fpm { #server 127.0.0.1:9000; server unix:/run/php-fpm/www.sock; }
Agora vamos configurar o “server blocks” no Nginx. Essa configuração permite que o Nginx trabalhe de forma semelhante ao VirtualHosts do Apache.
# vim /etc/nginx/nginx.conf include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*.conf; # server { # listen 80 default_server; # listen [::]:80 default_server; # server_name _; # root /usr/share/nginx/html; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # }
Criar os diretórios de configuração dos sites:
# mkdir /etc/nginx/sites-available/ # mkdir /etc/nginx/sites-enabled/
Criar a configuração do site:
# vim /etc/nginx/sites-available/site-php7.conf server { listen 80; server_name php7.example.com; access_log /var/log/nginx/php7_access.log; error_log /var/log/nginx/php7_error.log; root /srv/www/php7; location / { index index.php; } location ~ \.php$ { include fastcgi_params; fastcgi_pass php-fpm; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
Ativar o site:
# cd /etc/nginx/sites-enabled/ # ln -s ../sites-available/site-php7.conf
Testar a configuração do nginx:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Criar o diretório do site:
# mkdir -p /srv/www/php7/
Iniciar os serviços:
# systemctl start {nginx,php-fpm}
Configurar o SELinux:
# chcon -Rv -u system_u -r object_r -t httpd_sys_content_t /srv/www/
Feito isso, agora vamos criar um arquivo index.php com a função phpinfo para testar se está tudo bem:
# vim /srv/www/php7/index.php <?php phpinfo(); ?>
Agora, basta configurarmos o nosso DNS para o site atribuído na configuração do site criado. Assim, basta acessarmos o site:
Fontes
Digital Ocean – How To Upgrade to PHP 7 on CentOS 7
Configuring SELinux Policies for Apache Web Servers
How To Set Up Nginx Server Blocks on CentOS 7
Ficou excelente!
Grato por compartilhar e parabéns pelo artigo!
Obrigado, Valério!
Obrigado pelo tutorial.
até um certo ponto deu certo, porem ao dar start ao php-fpm percebo que existe algum erro,
esse é um log do que ocorre:
Starting The PHP FastCGI Process Manager...
[05-Jun-2017 17:24:02] ERROR: [pool www] failed to read the ACL of the socket '/var/run/php-fpm.sock': Operation not supported (95)
[05-Jun-2017 17:24:02] ERROR: FPM initialization failed
php-fpm.service: main process exited, code=exited, status=78/n/a
Failed to start The PHP FastCGI Process Manager.
Unit php-fpm.service entered failed state.
php-fpm.service failed.
pesquisei sobre, e tentei de tudo, a forma foi mudar para:
listen = 127.0.0.1:9000
e
server 127.0.0.1:9000;
#server unix:/run/php-fpm/www.sock;
Se aparece essa mensagem, você pode conferir se indicou corretamente a configuração do php-fpm para o caminho que eu especifiquei?
/var/run é um symlink para /run e eu indiquei o socket de domínio Unix para /run/php-fpm/www.sock e não para /var/run/php-fpm.sock (Note que o socket está dentro de um diretório ao invés de estar “solto” na /run como na tua mensagem de erro)
Já que os dois serviços geralmente estarão na mesma máquina, usar um socket de domínio Unix garante mais performance do que deixar os serviços se comunicando por TCP/IP.
só uma dúvida… por que não usar o repositório remi para instalar o PHP 7.1 ?
Existe algo de melhor no IUS ?