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):
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
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:
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.