Instalando e Configurando o Apache 2.4 + PHP + MySQL no FreeBSD 9.2

E ai galera, aqui eu vou abordar a instalação e a configuração do Apache 2.4 com suporte a PHP e MySQL.

O que vou utilizar:

  • FreeBSD 9.2
  • IP: 192.168.1.60/24
  • Hostname: freebsd.douglasqsantos.com.br

Vamos ajustar o /etc/hosts do nosso servidor

vim /etc/hosts
[...]
192.168.1.60            freebsd.douglasqsantos.com.br freebsd

Vamos obter o ports para podermos instalar os daemons necessários

portsnap fetch && portsnap extract && portsnap update

Eu vou mandar desabilitar o DIALOG que é aquela telinha chata que fica aparecendo quando mandamos instalar algo :P

echo "NO_DIALOG=yes" >> /etc/make.conf

Agora vamos mandar instalar o apache 2.4, vamos acessar o seu ports

cd /usr/ports/www/apache24

Agora vamos mandar compilar e instalar ele

make install clean

Agora precisamos inserir alguns módulos na inicialização do sistema

echo 'accf_http_load="YES"' >> /boot/loader.conf
echo 'accf_data_load="YES"' >> /boot/loader.conf

Agora vamos carregas estes módulos no kernel

kldload accf_http
kldload accf_data

Agora vamos adicionar o apache na inicialização do sistema

echo 'apache24_enable="YES"' >> /etc/rc.conf

Para obter informações sobre a variável que vamos inserir no rc.conf podemos executar o seguinte comando

/usr/local/etc/rc.d/apache24 rcvar
# apache24
#
apache24_enable="NO"
#   (default: "")

Agora vamos inicializar o nosso apache para testar a configuração

/usr/local/sbin/apachectl start

Agora já podemos acessar http://192.168.1.60 para verificar se o apache está funcionando

Agora vamos a instalação do PHP

Vamos acessar o ports do php e vamos mandar instalar ele

cd /usr/ports/lang/php55 && make WITH_APACHE=yes install clean 

Agora vamos ajustar o php.ini

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Agora vamos mandar compilar as extensões para o php

Vamos acessar o ports das extensões e vamos mandar instalar elas

cd /usr/ports/lang/php55-extensions && make WITH_MYSQL=yes WITH_MYSQLI=yes WITH_PDO_MYSQL=yes install clean

Agora vamos ajustar o apache

vim /usr/local/etc/apache24/httpd.conf 
[...]
    #Deixe a linha 255 da seguinte forma para que o apache possa interpretar o index do php
    DirectoryIndex index.html index.php
[...]
    #Adicione na linha 385
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
[...]

Agora vamos remover o index.html que é o default do apache

rm -rf /usr/local/www/apache24/data/index.html 

Agora vamos criar um index.php

vim /usr/local/www/apache24/data/index.php
<?php
phpinfo();
?>

Agora já podemos reiniciar o apache

/usr/local/sbin/apachectl restart

Agora vamos acessar o http://192.168.1.60 aqui vamos ter a configuração do php.

Instalação do MySQL

Vamos acessar o ports do MySQL e vamos mandar instalar ele

cd /usr/ports/databases/mysql56-server/ && make install clean

Agora vamos inserir ele na inicialização do sistema

echo 'mysql_enable="YES"' >> /etc/rc.conf

Agora vamos ajustar o arquivo de configuração do MySQL

cp /usr/local/share/mysql/my-default.cnf /etc/my.cnf

Agora vamos habilitar o MySQL escutar em todas as interfaces

echo "bind-address = 0.0.0.0" >> /etc/my.cnf

Agora vamos inciar o MySQL

/usr/local/etc/rc.d/mysql-server onestart

Agora vamos definir uma senha para

mysqladmin -u root password 'senha'

Agora vamos testar a conexão com o MySQL

mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.14 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> \q
Bye

Agora vamos consultar as portas que estão escutando

sockstat -4 -l
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS      
mysql    mysqld     34711 10 tcp4   *:3306                *:*
www      httpd      3286  4  tcp4   *:80                  *:*
www      httpd      3283  4  tcp4   *:80                  *:*
www      httpd      3282  4  tcp4   *:80                  *:*
www      httpd      3281  4  tcp4   *:80                  *:*
www      httpd      3280  4  tcp4   *:80                  *:*
www      httpd      3279  4  tcp4   *:80                  *:*
root     httpd      3278  4  tcp4   *:80                  *:*
root     sendmail   689   3  tcp4   127.0.0.1:25          *:*
root     sshd       686   4  tcp4   *:22                  *:*
root     syslogd    582   7  udp4   *:514                 *:*

O nosso apache e o nosso MySQL está escutando em qualquer interface.

Criação de VirtualHost

Agora vamos ver como criamos um Virtual host

Vamos habilitar a linha no httpd.conf para ser reconhecido o Virtual Host

vim /usr/local/etc/apache24/httpd.conf
[...]
#Descomentar a linha abaixo. linha: 473
Include etc/apache24/extra/httpd-vhosts.conf
[...]

Agora vamos deixar o arquivo de virtualhost da seguinte forma

vim /usr/local/etc/apache24/extra/httpd-vhosts.conf
<VirtualHost *:80>
     ServerAdmin webmaster@douglasqsantos.com.br
     ServerName freebsd.douglasqsantos.com.br
     DocumentRoot "/usr/local/www/freebsd"
   <Directory "/usr/local/www/freebsd">
     Options +FollowSymLinks +MultiViews
     AllowOverride All
     Require all granted
   </Directory>

   <IfModule mod_php5.c>
     AddType application/x-httpd-php .php
     php_flag expose_php Off
     php_flag allow_url_fopen Off
     php_flag allow_url_include Off
     php_flag magic_quotes_gpc Off
     php_flag register_globals Off
     php_flag disable_functions show_source
     php_flag disable_functions system
     php_flag disable_functions shell_exec
     php_flag disable_functions passthru
     php_flag disable_functions exec
     php_flag disable_functions popen
     php_flag disable_functions proc_open
     php_flag disable_functions symlink
     php_value upload_max_filesize  15M
     php_value post_max_size 15M
   </IfModule>
     CustomLog /var/log/apache24/freebsd.douglasqsantos.com.br-access.log combined
     ErrorLog /var/log/apache24/freebsd.douglasqsantos.com.br-error.log
     LogLevel warn
     ServerSignature Off
</VirtualHost>

Agora vamos criar o diretório para armazenar os dados do site e o diretório para os logs e vamos ajustar as permissões

mkdir -p /usr/local/www/freebsd && chown -R www:www /usr/local/www/freebsd 
mkdir -p /var/log/apache24/ && chown -R www:www /var/log/apache24/

Agora vamos criar o index

vim /usr/local/www/freebsd/index.php 
<?php

echo "<h1>FreeBSD</h1>";

?>

Agora vamos reiniciar o apache

/usr/local/etc/rc.d/apache24 restart

Agora vamos habilitar o SSL

Vamos criar um diretório para armazenar as chaves

mkdir -p /usr/local/etc/apache24/ssl

Agora vamos gerar a chave principal

openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
........++++++
....................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key: #SENHA
Verifying - Enter pass phrase for server.key: #SENHA

Agora vamos gerar a requisição de assinatura

openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:Parana
Locality Name (eg, city) []:Curitiba
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Douglas
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:freebsd.douglasqsantos.com.br
Email Address []:douglas@douglasqsantos.com.br

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Douglas

Agora vamos auto-assinar o nosso certificado

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=BR/ST=Parana/L=Curitiba/O=Douglas/OU=IT/CN=freebsd.douglasqsantos.com.br/emailAddress=douglas@douglasqsantos.com.br
Getting Private key
Enter pass phrase for server.key:

Agora vamos ajustar as permissões das chaves

chmod 0400 server.*
cp server.key server.key.orig

Agora vamos tirar a senha da chave

openssl rsa -in server.key.orig -out server.key
Enter pass phrase for server.key.orig:
writing RSA key

Agora vamos ajustar o nosso virtualhost

vim /usr/local/etc/apache24/extra/httpd-vhosts.conf
Listen 443
<VirtualHost *:80>
     ServerName freebsd.douglasqsantos.com.br
     Redirect / https://freebsd.douglasqsantos.com.br/
</VirtualHost>
<VirtualHost *:443>
     ServerAdmin webmaster@douglasqsantos.com.br
     ServerName freebsd.douglasqsantos.com.br
  DocumentRoot "/usr/local/www/freebsd"
   <Directory "/usr/local/www/freebsd">
     Options +FollowSymLinks +MultiViews
     AllowOverride All
     Require all granted
   </Directory>

   <IfModule mod_php5.c>
     AddType application/x-httpd-php .php
     php_flag expose_php Off
     php_flag allow_url_fopen Off
     php_flag allow_url_include Off
     php_flag magic_quotes_gpc Off
     php_flag register_globals Off
     php_flag disable_functions show_source
     php_flag disable_functions system
     php_flag disable_functions shell_exec
     php_flag disable_functions passthru
     php_flag disable_functions exec
     php_flag disable_functions popen
     php_flag disable_functions proc_open
     php_flag disable_functions symlink
     php_value upload_max_filesize  15M
     php_value post_max_size 15M
   </IfModule>
   SSLEngine on
   SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
   SSLCertificateFile "/usr/local/etc/apache24/ssl/server.crt"
   SSLCertificateKeyFile "/usr/local/etc/apache24/ssl/server.key"
   <FilesMatch "\.(cgi|shtml|phtml|php)$">
     SSLOptions +StdEnvVars
   </FilesMatch>
     BrowserMatch ".*MSIE.*" \
     nokeepalive ssl-unclean-shutdown \
     downgrade-1.0 force-response-1.0
     CustomLog /var/log/apache24/freebsd.douglasqsantos.com.br-access.log combined
     ErrorLog /var/log/apache24/freebsd.douglasqsantos.com.br-error.log
     LogLevel warn
     ServerSignature Off
</VirtualHost>

Agora vamos descomentar a linha do modulo do ssl no httpd.conf

vim /usr/local/etc/apache24/httpd.conf
[...]
#Descomentar a linha abaixo
LoadModule ssl_module libexec/apache24/mod_ssl.so

Agora vamos reiniciar o apache

/usr/local/etc/rc.d/apache24 restart

Agora podemos acessar https://freebsd.douglasqsantos.com.br caso você não esteja utilizando dns insira uma entrada no /etc/hosts da sua maquina ou acesse pelo endereço ip https://192.168.1.60.