25 de outubro de 2020 - Frederico Marinho

Como instalar LAMP com diferentes versões do PHP no Ubuntu 20.04

Nesse post vou me ater em explicar como instalar e executar o PHP 5.6 e 7.2 no linux e como fazer manualmente a mudança da versão, completando o LAMP com a instalação do Apache, MySQL e do PhpMyAdmin funcionando em todas as versões do PHP instaladas.

Depois de alguns anos trabalhando com desenvolvimento de sites na Divera nos deparamos com a necessidade de ter diferentes versões do PHP no mesmo servidor para manter sistemas legados. Há algum tempo chegamos a trabalhar com o IonizeCMS, um CMS bem interessante pela simplicidade, porém limitado quando o conteúdo começa a crescer muito e, agora, abandonado. Cheguei a precisar migrar um site de plataforma mantendo o mesmo template exportando mais de 3000 posts em menos de dois dias. Porém, temos alguns clientes ainda utilizando o Ionize e o mesmo acontece com o Prestashop. A versão 1.6 dessa plataforma de e-commerce pode conter alguns módulos que só funcionam na versão 5.6 do PHP. Acontece pouco, mas acontece.

Pra começar, basicamente vamos instalar todo o LAMP com o PHP 7.2 e depois de tudo pronto, instalamos também o 5.6. Particularmente gosto muito do pacote aptitude para instalar tudo, porque geralmente corrige as dependências e nesse caso será necessário instalá-lo antes. Mas fique a vontade para usar o apt-get se preferir.

sudo apt-get install aptitude

Instalar PHP 7.2

Por padrão o Ubuntu 20.04 só dá suporte ao PHP 7.4, então precisamos instalar o repositório que fornece as versões anteriores.

sudo add-apt-repository ppa:ondrej/php

Você vai precisar pressionar ENTER para finalizar a operação. Agora atualize o repositório:

sudo apt-get update

Agora instale o PHP 7.2 (se preferir por instalar o 7.0, 7.1, 7.3 ou mesmo o 7.4).

sudo aptitude install php7.2 libapache2-mod-php7.2 php7.2-mysql php7.2-common php7.2-curl php7.2-json php7.2-xml php7.2-mbstring php7.2-gettext php7.2-gd php7.2-zip php7.2-soap php7.2-xmlrpc php7.2-intl php7.2-cli php7.2-dev php-pear libapache2-mod-php7.2 php7.2-bz2

Instalar o MySQL

Simples e direto:

sudo aptitude install mysql-server mysql-client

Testar o servidor

Pronto. O servidor já estará funcionando. Você pode estar se perguntando como, já que não precisou instalar o Apache. Na verdade ele foi instalado no mesmo momento que você instalou o PHP. Veio no pacote completo.

Para testar, acesse o navegador da sua preferência e entre no localhost:

Se apareceu a tela do Apache de Boas-Vindas, tudo certo. Caso contrário, sugiro remover tudo e recomeçar do início.

Configuração da timezone no Apache e PHP

Aconselho fazer a configuração do UTC para o melhor funcionamento do seu servidor. Edite o php.ini:

sudo gedit /etc/php/7.2/apache2/php.ini

Procure por date.timezone. Vai ser preciso remover o ponto-e-vírgula antes para ativar a configuração. Preenche com o seu UTC correto, de acordo com a sua região.

Altere também as seguintes variáveis:

upload_max_filesize = 200
post_max_size = 200
max_input_vars = 5000

Coloque os valores que forem melhores para seu ambiente, esses são os que normalmente uso.

Depois de salvar o arquivo PHP.ini, reinicie o servidor Apache:

sudo service apache2 restart

Alterar a senha de root do MySQL

Deixar a senha vazia do usuário root para um servidor local é uma possibilidade, mas se for servidor de produção nem precisa falar que é essencial colocar uma senha forte né?

sudo mysql

Dentro do terminal do MySQL, entre com o comando abaixo trocando “sua_senha_nova” para senha que você desejar:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'sua_senha_nova';

Instalando outra versão do PHP

Agora basta instalar a versão do PHP alternativa que você gostaria de utilizar, inclusive mais de uma se achar necessário. No meu caso, vou instalar a versão 5.6:

sudo aptitude install php5.6 libapache2-mod-php5.6 php5.6-common php5.6-curl php5.6-json php5.6-xml php5.6-fpm php5.6-pdo php5.6-gd php5.6-mysqlnd php5.6-mbstring php5.6-gettext php5.6-cli php5.6-mcrypt php5.6-zip php5.6-soap php5.6-curl php5.6-bz2

Depois de finalizado, agora é preciso instalar a habilitar o módulo fcgi que vai fazer essa organização, além da instalação do módulo fpm do php que deve ser instalado para cada versão do PHP que será utilizada nesse servidor.

sudo aptitude install libapache2-mod-fcgid
sudo aptitude install php5.6-fpm php7.2-fpm
sudo a2enmod actions fcgid alias proxy_fcgi

Agora é só reiniciar o apache.

sudo service apache2 restart

Configurando a versão padrão do PHP no Ubuntu

A partir do momento que possuímos mais de uma versão do PHP instaladas, pode ser que seja preciso definir uma versão específica como padrão. Para isso, utilize os comandos abaixo:

Para colocar o PHP 7.2 como padrão:

sudo update-alternatives --set php /usr/bin/php7.2

Para colocar o PHP 5.6 como padrão:

sudo update-alternatives --set php /usr/bin/php5.6

Para as demais versões, siga a mesma lógica.

Alternar entre as versões do PHP instaladas

Para alterar as versões do PHP é necessário desativar a que está ativa e ativar a nova.

Desativar PHP 7.2:

sudo a2dismod php7.2

Ativar a versão 5.6:

sudo a2enmod php5.6

Reiniciar o apache:

sudo service apache2 restart

Instalar o PhpMyAdmin

O phpMyAdmin é um caso mais complicado, porque se você pretende usar uma versão inferior ao PHP 7.1, a versão do repositório do gerenciador de banco de dados não vai funcionar. Teremos que instalar manualmente. Mas é bem tranquilo.

cd ~/Downloads

wget https://files.phpmyadmin.net/phpMyAdmin/4.6.4/phpMyAdmin-4.6.4-all-languages.tar.gz

sudo cp phpMyAdmin-4.6.4-all-languages.tar.gz /usr/share

cd /usr/share

sudo tar xvf phpMyAdmin-4.6.4-all-languages.tar.gz

sudo mv phpMyAdmin-4.6.4-all-languages phpmyadmin

É preciso habilitar o módulo mbstring:

sudo phpenmod mbstring

Agora é só apontar para o Apache onde está instalado o phpMyAdmin e dar permissão. Edite o arquivo de configuração do Apache:

sudo gedit /etc/apache2/sites-available/000-default.conf

Em qualquer lugar depois de “DocumentRoot /var/www/html”, insira as linhas:

Alias /phpmyadmin "/usr/share/phpmyadmin/"
<Directory "/usr/share/phpmyadmin/">
Order allow,deny
Allow from all
Require all granted
</Directory>

** ATENÇÃO: Se você copiou e colou o código acima, edite o arquivo novamente e reescreva as aspas (“). **

Reinicie o Apache:

sudo service apache2 restart

Pronto! Já deve estar tudo funcionando.

Teste o Apache+PHP+MySQL e PHPMyAdmin entrando com o endereço no navegador:

http://localhost/phpmyadmin

Se estiver tudo certinho, você conseguirá acessar o PHPMyAdmin. Entre com o usuário root e a senha que você configurou na instalação do MySQL. Porém, só vai funcionar com o PHP 7.1 pra cima…

PhpMyAdmin no PHP 5.6

Ao alterar a versão do PHP para a 5.6 e tentar fazer o login no phpmyadmin, você pode receber os seguintes erros:

  1. Server sent charset unknown to the client
  2. The server requested authentication method unknown to the client

Para corrigir esses erros precisamos adicionar um código no arquivo /etc/mysql/my.cnf. Edite o arquivo:

sudo gedit /etc/mysql/my.cnf

E cole o código abaixo no final do arquivo:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
default-authentication-plugin=mysql_native_password

Agora basta reiniciar o servidor mysql:

sudo service mysql restart

Agora pode acessar http://localhost/phpmyadmin e fazer o login com o PHP 5.6.

Definir a versão do PHP a ser usada em cada projeto

Como você viu em alguns tópicos atrás, é possível ativar a versão do PHP que se deseja utilizar. Assim você consegue rodar aquele projeto que precisa de uma versão específica. Mas existe uma forma mais simples de definir qual versão utilizar, sendo colocado diretamente na configuração do Virtual Host do projeto.

Obviamente, é preciso já estar com a configuração do Virtual Host pronta, então se você ainda não fez ou não sabe o que são Virtual Hosts, minha dica é: siga o passo-a-passo desse post sobre essa configuração e depois volte aqui que você vai entender melhor sobre o que estou falando.

Estando então com o Virtual Host do seu projeto já configurado e funcionando,vamos precisar instalar um novo pacote para cada versão do PHP que se deseja utilizar:

sudo aptitude install php5.6-fpm php7.2-fpm

Agora é preciso editar o arquivo de configuração do Virtual Host:

sudo gedit /etc/apache2/sites-available/nomedosite.com.conf

Insira o código abaixo logo depois da cláusula <Directory>…</Directory>:

<FilesMatch \.php$>
   # Apache 2.4.10+ can proxy to unix socket
   SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost"
</FilesMatch>

Observe que o código acima se refere ao PHP 7.2, ou seja, em todo arquivo de configuração Virtual Host que tiver o código acima, o site correspondente vai ser executado com a versão 7.2 do PHP. Caso queira outra versão, basta trocar para 7.0, 5.6, etc.

Instalar o X-Debug

Instalar o pacote de acordo com a sua versão do PHP:

sudo apt-get install php7.2-xdebug

Editar o arquivo php.ini e incluir as linhas abaixo:

sudo gedit /etc/php/7.2/apache2/php.ini

Incluir no final do arquivo:

xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_port = 9000

Salvar e reiniciar o Apache:

sudo service apache2 restart

Outras configurações úteis do Apache:

Habilitar o modo de rescrita de para usar URLs amigáveis:

sudo a2enmod rewrite

Habilitar mod_ssl:

sudo a2enmod ssl

Habilitar o Expires:

Útil para melhorar o tempo de carregamento do site:

sudo a2enmod expires

Habilitar a compressão GZip:

sudo a2enmod deflate

Seu servidor estará configurado e pronto para uso com versões diferentes do PHP integradas ao Apache, MySQL e o PhpMyAdmin. Agora o próximo passo é ativar servidores virtuais no apache para cada projeto.

2

Desenvolvimento web / Linux / PHP / Ubuntu

Deixe um comentário

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