quarta-feira, 31 de agosto de 2016

Guia rápido de instalação do PHP 7 com Apache 2






Guia rápido de instalação do PHP 7 + Apache 2


Este tutorial é apenas um guia rápido de instalação da linguagem de programação PHP 7 em conjunto com o servidor Apache 2 no sistema operacional Ubuntu Linux 16.04.

Primeiro passo: Abra o terminal e como administrador execute o seguinte comando abaixo para instalar o PHP e Apache:

$ sudo apt-get install apache2 php7.0 postgresql libapache2-mod-php7.0 php7.0-pgsql php7.0-curl php7.0-json

Segundo passo: Abra a pasta de projetos do apache e adicione um arquivo info.php utilizando o editor PICO:

$ cd /var/www/html
$ sudo pico info.php

Terceiro passo: Com o arquivo info.php aberto, adicione o seguinte código e salve-o utilizando o comando CTRL + W. Caso deseje fechar o arquivo utilize o comando CTRL + X.

<?php

    phpinfo();

?>

Quarto passo: Utilizando o navegador, abra o seguinte endereço abaixo. Uma página com as informações de versão, variáveis de ambiente, módulos instalados e outras informações do PHP serão exibidas incluindo a localização do arquivo php.ini em seu sistema operacional.

http://localhost/myinfo.php



Por enquanto é apenas isso o que você precisa saber. Em breve estarei disponibilizando um guia completo para suporte a múltiplos projetos utilizando Virtual Hosts e OpenSSL. Futuramente estaremos também inciando um projeto utilizando Postgres 9.5, Composer, SLIM 3, Twig e Doctrine.

sábado, 20 de fevereiro de 2016

Configuração do Apache 2 + PHP 5 + PostgreSQL em ambiente GNU/Linux



Este artigo tem o objetivo de apenas ajudar a configurar sua máquina local para desenvolver projetos/sites utilizando o servidor web Apache 2, a linguagem de programação PHP 5 e o banco de dados PostgreSQL 9. Configurações feitas para servidores em ambiente de produção deverão ser realizadas por profissionais qualificados. Estes comandos e configurações podem não ser o mais adequado e seguro para o parque de servidores do seu local de trabalho.

PASSO 1: Inicialmente será necessário instalar um sistema operacional GNU/Linux. Você poderá utilizar Ubuntu, Mint ou qualquer outra distribuição derivada do Debian. Quando eu fiz este passo a passo, estava utilizando uma distribuição Linux Mint em meu Desktop.

PASSO 2: Para instalar o Apache 2, PHP 5, PostgreSQL 9 e suas dependências será necessário abrir o terminal de comando de seu sistema operacional. Caso seu Desktop esteja corretamente conectado a Internet, basta executar os seguintes comandos abaixo:

$ sudo apt-get update
$ sudo apt-get install apache2 php5 php5-pgsql curl php5-curl php5-cli mcrypt php5-mcrypt php-pear php5-dev openssl ssl-cert postgresql-9.3 pgadmin3

Se você trabalha em uma rede com proxy não transparente, ocasionalmente você deverá executar os comandos abaixo para habilitar seus programas na linha de comando:


$ export http_proxy="http://user:password@host:port"
$ export https_proxy="http://user:password@host:port"  

OBS: Obviamente você deverá substituir os parâmetros USER, PASSWORD, HOST e PORT pelos utilizados em sua rede.

PASSO 3: Após a instalação dos programas acima, será necessário realizar a configuração do ambiente de programação em PHP. Três arquivos de pré-configurados estão disponíveis em seu Desktop nos seguintes endereços abaixo:

/usr/share/php5/php.ini-production.cli
/usr/share/php5/php.ini-production
/usr/share/php5/php.ini-development

Caso você deseje utilizar o PHP como ambiente para execução de um site pronta, desenvolvido por terceiros, execute os seguintes comandos abaixo:


$ sudo mv /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini-old   
$ sudo cat /usr/share/php5/php.ini-production > /etc/php5/apache2/php.ini

Caso você deseje utilizar o PHP como ambiente de desenvolvimento de seus projetos/sites, execute os seguintes comandos:


$ sudo mv /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini-old   
$ sudo cat /usr/share/php5/php.ini-development > /etc/php5/apache2/php.ini  

Configurações adicionais (e bem específicas) poderão ser feitas no arquivo php.ini com o seguinte comando:


$ sudo pico /etc/php5/apache2/php.ini

PASSO 4: Após a instalação dos programas acima, será necessário realizar a configuração do Apache para o novo projeto/site que vou chamar de HELLOWORLD.COM.

Primeiro costumo desabilitar a navegação por diretórios via browser. Para isso executo o comando abaixo e faço a seguinte alteração no arquivo apache2.conf:


$ sudo pico /etc/apache2/apache2.conf


<Directory /var/www/>
        AllowOverride None
        Require all granted
        Options -Indexes
</Directory>

Em seguida irei criar o diretório de meu novo projeto com os seguintes comandos:


$ mkdir /var/www/helloworld.com/public_html
$ sudo chown -R www-data /var/www/helloworld.com/public_html
$ sudo chmod -R 755 /var/www

OBS: Perceba que nos comandos acima estou atribuindo as permissões para acesso ao usuário www-data. Este usuário é criado no momento da instalação do Apache e é um importante parâmetro de segurança. Não devemos atribuir permissão de dono ao root ou outros usuários ao seus projetos/site.

Para cada projeto é interessante criar um Virtual Host. Para o nosso novo projeto/site, execute os comandos e deixe o arquivo hosts com a seguinte informação (OBS: 111.111.111.111 é o endereço IP de seu computador):


$ sudo pico /etc/hosts


127.0.0.1         localhost
127.0.1.1         mymachine
111.111.111.111   helloworld.com www.helloworld.com

Em seguida será necessário criar o arquivo do Virtual Host do apache. O arquivo helloworld.com.conf deverá ser configurado desta forma:


$ cat /etc/apache2/sites-available/000-default.conf > /etc/apache2/sites-available/helloworld.com.conf
$ sudo pico /etc/apache2/sites-available/helloworld.com.conf


<VirtualHost *:80>
        ServerName helloworld.com
        ServerAlias www.helloworld.com
        ServerAdmin webmaster@helloworld.com
        DocumentRoot /var/www/helloworld.com/public_html

        <Directory "/var/www/helloworld.com/public_html">
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

As configurações do projeto helloword.com estão prontas. Agora será necessário recarregar as configurações do Apache com os seguintes comandos:


$ sudo a2ensite helloworld.com.conf

De agora em diante você poderá criar seu site no diretório /var/www/helloworld.com/public_html. O apache está configurado para o navegador reconhecer o arquivo index.html ou index,php como a página inicial. Você poderá utilizar a linha de comando ou algum editor de seu Desktop para editar o HTML de seu site. Normalmente utilizo o GEDIT.


$ sudo pico /var/www/helloworld.com/public_html/index.php


 <?php phpinfo(); ?>

OBS: Provavelmente será necessário desabilitar o proxy do navegador ou adicionar o endereço do site como excessão realizar o teste do www.helloworld.com.

Configurações adicionais (e bem específicas) poderão ser feitas no arquivo apache2.conf e helloworld.com.conf com os seguintes comandos (lembre-se de recarregar as configurações do apache com o terceiro comando abaixo):


$ sudo pico /etc/apache2/apache2.conf
$ sudo pico /etc/apache2/sites-available/helloworld.com.conf
$ sudo service apache2 reload

PASSO 5: Como passo adicional, é interessante configurar seu site para trabalhar com o protocolo SSL. Os seguintes passos abaixo deverão ser executados:

Primeiro habilitar o módulo SSL no apache:


$ sudo a2enmod ssl

O comando abaixo irá criar um arquivo com um certificado local em seu computador:


$ sudo openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem

Criar a configuração do SSL para o site helloword.com com o seguinte comando e estrutura:


$ cat /etc/apache2/sites-available/default-ssl.conf > /etc/apache2/sites-available/exemplo.com-ssl.conf
$ sudo pico /etc/apache2/sites-available/exemplo.com-ssl.conf


<IfModule mod_ssl.c>
   <VirtualHost _default_:443>
        ServerName helloworld.com
        ServerAlias www.helloworld.com
        ServerAdmin webmaster@helloworld.com
        DocumentRoot /var/www/helloworld.com/public_html

        <Directory "/var/www/helloworld.com/public_html">
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>

        SSLEngine on
        SSLCertificateFile /etc/apache2/apache.pem

    </VirtualHost>
</IfModule>

Em seguida vincular a configuração do SSL e reiniciar as configurações do apache:


$ sudo a2ensite helloworld.com-ssl.conf
$ sudo service apache2 reload

Agora você poderá abrir seu browser e testar o endereço utilizando https:// que deverá funcionar. Obviamente este certificado não é válido para sites públicos. Caso deseje utilizar um certificado compatível com o ICP-Brasil, pesquise na Internet as opções de contratação.

PASSO 6: No passo anterior criamos uma configuração para acessar o site helloworld.com utilizando o protocolo SSL. Mas também é possível navegar no site sem utilizar este recurso. Para seu site funcionar sempre utilizando o protocolo SSL, faça os seguintes comandos abaixo:

Adicionar o comando Redirect no arquivo das configurações do virtual host do projeto:


$ sudo pico /etc/apache2/sites-available/helloworld.com.conf


<VirtualHost *:80>
        ServerName helloworld.com
        ServerAlias www.helloworld.com
        ServerAdmin webmaster@helloworld.com
        DocumentRoot /var/www/helloworld.com/public_html

        Redirect permanent / https://helloworld.com/

        <Directory "/var/www/helloworld.com/public_html">
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Em seguida, executar mais uma vez o comando para recarregar as configurações do apache:


$ sudo service apache2 reload

Próxima vez que você acessar o site em seu navegador utilizando http://, o apache vai redirecionar para https://. Muito útil.

PASSO 7: Finalmente iremos fazer uma simples configuração para utilizar o PostgreSQL localmente em nosso projeto.

Primeiro devemos configurar uma senha para o usuário do postgres:


$ sudo su
$ su - postgres
$ psql postgres
$ alter user postgres with password 'minha_password'
$ \q
$ exit

Depois deveremos configurar o arquivo postgresql.conf para aceitar conexões IP e senha criptografadas. Será necessário apenas localizar e alterar as duas linhas com o seguinte formato após o comando abaixo:


$ sudo pico /etc/postgresql/9.3/main/postgresql.conf


listen_adresses = '*'
password_encryption = on

Depois deveremos configurar o arquivo pg_hba.conf com algo do tipo para aceitar conexões apenas de sua própria máquina:


$ sudo pico /etc/postgresql/9.3/main/postgresql.conf


local  all       postgres                peer
local  all       all                     peer
host   all       all       127.0.0.1/32  md5
host   all       all       ::1/128       md5

Finalmente reiniciaremos o postgres com o seguinte comando para as configurações surtirem efeito:


$ sudo service postgresql restart

Após reiniciar o postgres, você poderá utilizar a ferramenta pgadmin3 em sua área de trabalho para conectar e manipular seus banco de dados.

Uma prática que deverá ser bastante comum é a criação de usuários pois você não deve conectar diretamente ao banco utilizando o usuário postgres. Para criar um banco e um usuário para seu projeto/site, siga o exemplo abaixo:


$ su - postgres
$ psql postgres
$ create user nome_do_usuario with password 'minha_senha';
$ create database nome_do_banco;
$ grant all privileges on database nome_do_banco to nome_do_usuario;
$ \q
$ exit

OBS: O arquivo pg_hba.conf poderá ser editado com o objetivo de restringir o acesso remoto desta base de dados ou usuário na rede.

Por enquanto é só e em futuros artigos irei abordar outros assuntos interessantes como método de reescrita de URL, utilização do composer, SLIM, Doctrine, Twig, GIT e outras ferramentas úteis para desenvolver projetos utilizando PHP e PostgreSQL. Lembre-se de consultar os manuais e documentações das ferramentas em seus sites oficiais para tirar suas dúvidas.

Caso você tenha alguma dica de melhoria para este artigo, utilizar os comentários deste blog.