Como instalar e configurar o Apache2 e o PHP-FPM no Ubuntu ou Debian

Nesse artigo vou explicar como instalar e configurar o Apache2 e o PHP-FPM no Ubuntu ou no Debian para colocar um servidor web com manipulador PHP em produção em poucos minutos.

Apache é um servidor web gratuito da Apache Software Foundation. Suas funcionalidades são mantidas através de uma estrutura de módulos para várias funções diferentes, por exemplo: interpretar o PHP, reescrever URLs, fazer cache e assim por diante. No caso deste tutorial, não vamos utilizar o módulo padrão do PHP (mod_php) para realizar a comunicação entre o apache e o PHP. Vamos utilizar o PHP-FPM.

Diferente do módulo do PHP (mod_php), o PHP-FPM é um serviço independente e não um módulo dentro do Apache. Ele é executado em um processo à parte utilizando FastCGI (Fast Common Gateway Interface).

Neste momento estou usando o Debian 9 para a criação desse tutorial, porém, todos os comandos deverão funcionar normalmente no Ubuntu (em suas últimas versões) também.

Então bora colocar a mão na massa!

Como instalar e configurar o Apache2 e o PHP-FPM no Ubuntu ou Debian Capa

Instalando o Apache 2.4

Só pra constar, meu arquivo /etc/apt/sources.list do Debian 9 está assim:

deb http://deb.debian.org/debian stretch main contrib non-free
deb-src http://deb.debian.org/debian stretch main contrib non-free

deb http://security.debian.org/debian-security/ stretch/updates main contrib non-free
deb-src http://security.debian.org/debian-security/ stretch/updates main contrib non-free

deb http://deb.debian.org/debian stretch-updates main contrib non-free
deb-src http://deb.debian.org/debian stretch-updates main contrib non-free

Sabendo disso, digite o seguinte para atualizar sua lista de pacotes:

sudo apt-get update
sudo apt install apache2 libapache2-mod-fcgid

Isso deverá instalar o Apache e o módulo fcgid (para comunicação com o PHP-FPM).

No momento da criação desse tutorial a versão do Apache é:

Server version: Apache/2.4.25 (Debian)
Server built:   2018-06-02T08:01:13

Apache e Fcgid instalados, vamos ao PHP.

Instalando o PHP 7.2

Como o PHP 7 não está disponível por padrão para Debian ou Ubuntu nas versões atuais, vamos adicionar os repositórios em ambos. Para isso, escolha o comando para o seu sistema operacional em específico a seguir (Ubuntu ou Debian).

############# 
### PHP 7 ###
#############
#
### Para Ubuntu
#
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
#
### Para Debian
#
sudo apt install ca-certificates apt-transport-https
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
echo "deb https://packages.sury.org/php/ stretch main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt-get update
#
### Para ambos (Instala o PHP 7.2 e o PHP-FPM)
#
sudo apt install php7.2 php7.2-fpm php7.2-common

Antes de continuar, vamos editar o php.ini do PHP-FPM, para isso digite:

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

E modifique o seguinte:

...
file_uploads = On
...
allow_url_fopen = On
...
memory_limit = 256M
...
upload_max_filesize = 100M
...
max_execution_time = 360
...
date.timezone = America/Sao_Paulo
...

Os três pontinhos (…) são só pra indicar que tem mais trechos códigos que não precisam ser editador nesses locais.

Depois de tudo instalado, vamos às configurações.

Configurando o Apache2

Vamos ativar os módulos necessários, então digite:

sudo a2enmod actions fcgid alias proxy_fcgi mpm_event

Os módulos Fcgid e Proxy_Fcgi vão fazer a comunicação com o PHP-FPM.

Também vamos criar um usuário especificamente para o site. Caso você tenha mais de um site no mesmo servidor, faça um usuário para cada site.

# Cria uma pasta para o site
sudo mkdir --mode=755 /var/www/pasta_do_site/
# Cria o usuário do site
sudo useradd usuario_do_site -d /var/www/pasta_do_site/ -s /sbin/nologin
# Altera a senha do usuário do site
sudo passwd usuario_do_site
# Dá permissões do usuário do site na pasta do site
sudo chown -R usuario_do_site:usuario_do_site /var/www/pasta_do_site/

Altere usuario_do_site e pasta_do_site nos comandos acima para suas necessidades.

Configurando a(s) pool(s) do(s) site(s)

Na pasta /etc/php/7.2/fpm/pool.d/ existe um arquivo padrão chamado www.conf, você não precisa editar este arquivo diretamente. Para cada site, basta copiar este arquivo e configurar conforme a necessidade.

Para copiar este arquivo para outro chamado de pool_do_site.conf, digite:

sudo cp /etc/php/7.2/fpm/pool.d/www.conf /etc/php/7.2/fpm/pool.d/pool_do_site.conf

Copiado, edite este arquivo digitando o seguinte:

sudo nano /etc/php/7.2/fpm/pool.d/pool_do_site.conf

Edite as seguintes linhas:

...
[www] <- Altere para -> [pool_do_site]
...
user = www-data <- Altere para -> usuario_do_site
group = www-data <- Altere para -> usuario_do_site
...
listen = /run/php/php7.2-fpm.sock <- Altere para -> 127.0.0.1:9010
...

Como na imagem a seguir:

Editando a pool do site

Editando a pool do site

Para cada site você precisa de valores diferentes para:

  • [www] – Um nome por pool por site;
  • user – Um usuário por site;
  • group – Um grupo por site;
  • listen – Uma porta por site. Nesse caso estou usando 9010, os próximos seriam 9011, 9012, e assim por diante.

Agora vamos configurar o virtualhost do seu site no apache.

Configurando um VirtualHost

Só vamos configurar a porta 80 (http) aqui (falaremos em SSL em outro tutorial).

O apache já vem com um arquivo padrão chamado 000-default.conf em /etc/apache2/sites-enabled/. Não precisamos editar esse arquivo diretamente, vamos copiá-lo e editar a cópia.

Para copiar o arquivo para outro chamado de meusite.conf, digite:

sudo cp /etc/apache2/sites-enabled/000-default.conf /etc/apache2/sites-enabled/meusite.conf
sudo nano /etc/apache2/sites-enabled/meusite.conf

Você pode apagar tudo dentro desse arquivo. Para isso, basta pressionar e segurar as teclas “CTRL” + “K” do seu teclado dentro do nano.

Nele cole o seguinte:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/pasta_do_site/
    ServerName localhost
    ServerAlias localhost

    CustomLog /var/log/apache2/meusite.com-access.log combined
    ErrorLog /var/log/apache2/meusite.com-error.log

    <FilesMatch "\.php$">
        <If "-f %{SCRIPT_FILENAME}">
            SetHandler "proxy:fcgi://127.0.0.1:9010"
        </If>
    </FilesMatch>

    <Directory "/var/www/pasta_do_site/">
        Options FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

Perceba que estou configurando este virtualhost para o domínio “localhost“, isso porque estou fazendo a configuração na minha máquina local. No caso de um servidor de produção, você vai colocar os dados corretos para seu domínio. Exemplo:

  • ServerName = dominio.com.br
  • ServerAlias = www.dominio.com.br

Perceba que também colocamos a pasta do nosso site em dois locais:

  • DocumentRoot /var/www/pasta_do_site/
  • <Directory “/var/www/pasta_do_site/”>

Altere para suas necessidades.

A parte importante para comunicação do apache com PHP-FPM:

<FilesMatch "\.php$">
    <If "-f %{SCRIPT_FILENAME}">
        SetHandler "proxy:fcgi://127.0.0.1:9010"
    </If>
</FilesMatch>

Você precisa alterar apenas a porta que colocou no seu site, como no nosso exemplo adicionei a porta 9010, essa é a que estou usando. Se tiver mais sites, mude as portas conforme as necessidades (9011, 9012 e assim por diante). Só não se esqueça que essa porta deve ser a mesma que você colocou na pool do site anteriormente.

Nosso primeiro teste

Para testarmos se tudo está correto, vamos criar um arquivo index.php na pasta do site. Para isso, digite:

sudo nano /var/www/pasta_do_site/index.php

E cole o seguinte dentro do arquivo:

<?php
phpinfo();

Salve e, por fim, digite:

sudo chown -R usuario_do_site:usuario_do_site /var/www/pasta_do_site/
sudo systemctl restart php7.2-fpm && sudo systemctl restart apache2

Agora acesse o seu domínio pelo navegador (no meu caso localhost) e veja tudo funcionando, como na imagem a seguir:

Apache2 + PHP-FPM funcionando

Apache2 + PHP-FPM funcionando

Aqui já está tudo pronto, mas vou passar um adicional para facilitar sua vida.

Configurando um servidor FTP

Para que você não tenha que ficar alterando as permissões dos arquivos toda vez que criar um novo arquivo na pasta do seu site, você pode enviar os dados por FTP. Vamos instalar e configurar um servidor FTP básico.

sudo apt-get install proftpd

Agora vamos editar as configurações do servidor FTP. Para isso digite:

sudo nano /etc/proftpd/proftpd.conf

E edite as seguintes linhas:

...
# Adicione o nome do seu servidor
ServerName                      "Nome do seu servidor"
...
# Descomente a linha
DefaultRoot                     ~
...
# Descomente a linha
RequireValidShell               off
...

Agora reinicie o servidor FTP:

sudo systemctl restart proftpd

Pronto! Agora você pode usar o Filezilla (por exemplo) para enviar arquivos pro seu site usando o usuário do site que criamos anteriormente.

Conectado ao servidor FTP com Filezilla

Conectado ao servidor FTP com Filezilla

Instalando o servidor MySQL ou MariaDB

Para instalar e configurar o servidor MySQL ou MariaDB, siga o seguinte tutorial:

Tudo pronto, até o próximo tutorial!

0 respostas

Deixe uma resposta

Quer participar da conversa?
Sinta-se livre para contribuir!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *