14 de dezembro de 2007

Webserver Ubuntu 7.10: Apache2 + php5 + MySQL + OpenSSL

Resolvi escrever esse passo-a-passo sobre criação de um webserver pessoal no Ubuntu 7.10, pela dificuldade que tive em encontrar, em um único lugar, informações completas sobre a instalação e configuração do sistema.
É impressionante a quantidade de material incompleto que existe espalhado pela rede...

1º passo: Instalando os pacotes

Apache2
$ sudo apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1

OpenSSL
$ sudo apt-get install openssl ssl-cert

MySQL
$ sudo apt-get install mysql-server-5.0
Durante a instalação do MySQL você será questionado pela senha do 'root', basta digita-la na caixa que texto que aparecerá no terminal e apertar

PHP5
$ sudo apt-get install php5 libapache2-mod-php5 php5-mysql php5-gd

Terminada a instalação é hora de configurar o Apache e o SSL


2º passo: Configurando o SSL

Primeiro vamos gerar os certificados, entre no diretório /etc/apache2/ (como root) e crie um diretório chamado ssl. Depois execute o 2o comando, listado abaixo, e responda as perguntas necessárias para a criação do certificado.
# mkdir /etc/apache2/ssl
# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem

3º passo: Configurando o Apache

Como root, copie o arquivo /etc/apache2/sites-available/default

# cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl

Modifique o arquivo para usar a porta 443 e habilite a função SSL usando o certificado que criamos anteriormente:
NameVirtualHost *:443
VirtualHost *:443

ServerAdmin webmaster@localhost

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/ssl/apache.pem


SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0

DocumentRoot /var/www/

Se você tem um domínio do DynDNS, que aliás é altamente recomendável, poderá usá-lo como host do seu webserver. Para tanto, adicione, também, a linha:

ServerName seudominio.mine.nu:80

Salve e feche o arquivo. Para terminar a configuração só falta carregar alguns módulos do Apache (SSL, rewrite e include) e o novo "site" :

#
a2ensite ssl

# a2enmod ssl
# a2enmod rewrite
# a2enmod include

Recarregue a configuração do Apache:

# /etc/init.d/apache2 force-reload

Então, reinicialize o Apache:

# /etc/init.d/apache2 restart

Para testar se tudo deu certo, entre no diretório /var/www/
Crie um arquivo chamado teste.php e escreva dentro dele "" e depois no seu navegador digite

http://localhost/teste.php

Se tudo correu bem, uma página com informações do PHP. Creio que este tutorial deve bastar para a criação de Webserver pessoal, vou tentar ir melhorando-o até chegar a um ponto mais profissional.

2 comentários:

Perdigão disse...

Cara, seu tutorial ajudou muito. Sério.

Mas tem uma coisa que não ficou muito clara. Quando se edita o arquivo /etc/apache2/sites-avaible/ssl as modificações serão aplicadas a quais sites?

Tive a impressão que isto faz todas as páginas e sites passarem por uma conexão SSL. Em outras palavras, não há como definir quais páginas estarão debaixo do SSl e quais não.

Acho que se você complementasse esclarecendo isso deixaria este tutorial mais específico.

Digo isso porque durante a vida útil de um server, considerando que ele seja uma estação de desenvolvimento, vários projetos serão lá escritos e nem todos têm a necessidade de rodar sob o SSL. Mais que isso. A maioria dos sites têm a parte pública - sem SSL, apenas informações cruas - e a parte com SSL - áreas gerenciais, administrativas, logins, etc, que ficam sob a proteção do SSL.

Assim para simular um ambiente mais real com a produção seria interessante poder fazer essa distinção.

No apache acho que isso se traduz como SSL para um virtual host específico. Por exemplo um site com a parte administrativa teria dois Virtual Hosts. Um para www.site.com (sem ssl) e outra para secure.site.com (com ssl).

Se essa distinção estivesse especificada, este seria "o" tutorial. Espero que encare isso como uma crítica construtiva.

Parabéns pelo tutorial

SoulRebel disse...

Encaro sim como uma crítica construtiva, do jeito que está o tutorial, qualquer página pode ser acessada via ssl, basta colocar https:// no endereço.
Para hosts específicos há a necessidade de usar Virtual Hosts como você disse.
Não acrescentei isso ao tutorial pois estou sem tempo e o foco principal do tutorial era a criação de um webserver doméstico.

Se você puder me mandar essa parte, colocarei no tutorial com os devidos créditos