Posts com Tag ‘mysql’

1) Introdução
Testamos este post na versão 7 do Debian (“wheezy”), e Mediawiki versão 1.19.20.

2)Instalar o MediaWiki (parte-1)

#apt-get install mediawiki

Esse comando instalará:
– apache2;
– mysql;
– php5;
– mediawiki,

e seus conjuntos de arquivos associados. Quando da instalação, será formulada a pergunta de qual a senha desejada para ser definida para o administrador do banco de dados MySQL (atenção: não tem nada haver com usuário root do S.O.; este usuário administrador do banco de dados será criado automaticamente na tabela mysql.user.). Veja abaixo:

Pedido de senha para usuario root MySQL

Após a execução do comando acima, o mediawiki estará disponível nas seguintes pastas (e subpastas):

  • /etc/mediawiki
  • /var/lib/mediawiki/ : contém, basicamente, links simbólicos para /usr/share/mediawiki
  • /usr/share/mediawiki/ : principal pasta. Onde estão os arquivos com o código do mediawiki

3) Uma primeira mensagem de alerta do Apache
Logo após a instalação do Apache, quando da execução do comando de recarregar a configuração do Apache (# /etc/init.d/apache2 reload) ou comando de reiniciar (# /etc/init.d/apache2 restart), uma primeira mensagem de alerta aparece:

Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

Isso normalmente pode ser ignorado, pois não impede o bom funcionamento do Apache. Mas aquela mensagem significa que o daemon do Apache (httpd) não conseguiu obter um nome de host totalmente qualificado, fazendo uma pesquisa inversa no seu servidor de endereço IP. Uma alternativa simples para evitar estas mensagens é especificar “ServerName 127.0.0.1” no contexto do servidor global da configuração. Por exemplo, criando o arquivo /etc/apache2/conf.d/servername.local , tendo como conteúdo:

ServerName 127.0.0.1

4) Verificações básicas
a) verificar se o Apache está funcionando
Verificar se o servidor de páginas Apache está ativo, na forma exemplificada abaixo:
# ps -A | grep apache2
7561 ? 00:00:00 apache2
7706 ? 00:00:00 apache2
7707 ? 00:00:00 apache2
7708 ? 00:00:00 apache2
7709 ? 00:00:00 apache2
7710 ? 00:00:00 apache2

Acessar também a url http://localhost/ , onde uma página muito simples deverá ser mostrada no navegador, como esta abaixo (referente ao código em /var/www/index.html):
Tela inicial do Apache quando instalado

Dicas:
– para acompanhar as mensagens de erro do Apache, normalmente estas se encontram no arquivo /var/log/apache2/erro.log (quem define qual arquivo de erro é a variável ErrorLog, definida em /etc/apache2/apache2.conf).

– se desejar uma cópia local do manual da versão em uso do servidor de páginas Apache, fazer:
#apt-get install apache2-doc
Com isso, ao acessar a url http://localhost/manual/ teremos a documentação do Apache mostrada, como abaixo ilustrado:
Tela inicial do Manual do Apache

b) verificar se o PHP está funcionando
Criar o arquivo /var/www/index.php com o seguinte conteúdo:

<?php
phpinfo();
?>

Reiniciar o Apache:
# /etc/init.d/apache2 restart

Agora, acessar o endereço http://localhost/index.php . Se as informações de configuração do PHP aparecerem, isto significará que o Apache e o interpretador PHP foram instalados corretamente e estão funcionando. Veja um exemplo de um pedacinho da página que deverá ser mostrada:

Tela de teste do funcionamento do interpretador PHP

c) verificar se o MySQL está funcionando.
Verificar se o processo MySQL server foi iniciado e está “ativo”:

$ ps -A | grep mysql
7391 ?        00:00:00 mysqld_safe
7720 ?        00:00:13 mysqld

Para ter acesso ao banco do MySQL, utilizar o seguinte comando:
$ mysql -u root -p
Este comando é destinado a fazer a autenticação no banco de dados MySQL. Será solicitado a senha do usuário “root” (que neste momento é o usuário administrador do MySQL) de acesso ao banco que fora definida anteriormente na instalação. Forneça a senha, conforme definida naquele momento da instalação.

Dicas:
– verificar se o servidor MySQL está instalado e qual a sua versão: $ apt-cache policy mysql-server
– verificar se o client MySQL está instalado e qual a sua versão: $ apt-cache policy mysql-client
– estando autenticando do servidor MySQL, são úteis os seguintes comandos básicos:
* status do banco: mysql> status;
* base de dados existentes: mysql> show databases;
* selecionar uma base de dados (exemplo: a BD mysql): mysql> use mysql;
* listar as tabelas de uma BD (que fora anteriormente selecionada): mysql> show tables;
* verificar os usuários existentes:


mysql> SELECT User, Host, Password FROM mysql.user;
+------------------+-----------+-------------------------------------------+
| User             | Host      | Password                                  |
+------------------+-----------+-------------------------------------------+
| root             | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root             | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root             | ::1       | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| debian-sys-maint | localhost | *BEB671E4F154411B71BEEDA86385600449ED3346 |
+------------------+-----------+-------------------------------------------+

Neste caso, fora o próprio sistema operacional, apenas usuário do BD chamado “root” pode ter acesso, fornecendo senha, e partindo do própria máquina.
* para outros comandos do BD MySQL veja o post Tutorial MySQL.

5) Instalar o MediaWiki (parte-2)
5.1 Liberar acesso inicial para parametrizar o mediawiki
Editar o arquivo da configuração do Apache em /etc/mediawiki/apache.conf e remover o sinal de comentário ‘#’ presente na sua terceira linha, ficando desta forma:
Alias /mediawiki /var/lib/mediawiki
Reiniciar o Apache:
# /etc/init.d/apache2 restart

Obs: observar que existe o arquivo /etc/apache2/conf-available/mediawiki.conf com as diretivas de configuração para o Apache achar o mediawiki.

Nesse momento, já é possível acessar a página inicial do Mediawiki para iniciar seu processo de configuração. Ao acessar a url http://localhost/mediawiki/ a seguinte página deverá ser mostrada:
Tela inicial do Midiawiki, para iniciar sua configuração

5.2 Iniciar a parametrização do mediawiki
Clicar no link mostrado na figura anterior e iniciar a parametrização do Mediawiki. Algumas dicas úteis:
– nome do utilizador da base de dados: informar o nome do usuário já criado na BD do MySQL que será usado para ter acesso à BD durante o processo de instalação. Este usuário não é o do MediaWiki, e sim de um usuário da base de dados.
– conta de administrador, seu nome: o seu nome, por exemplo, “Joao Beltrao”. Este é o nome que irá utilizar para entrar na wiki.
– sobre o arquivo LocalSettings.php: automaticamente será gerado um arquivo de configuração que será disponibilizado ao usuário que está instalando o mediawiki. Salve este arquivo e coloque-o na mesma pasta do arquivo index.php do mediawiki (no caso deste post, esta pasta após iniciar os dois links simbólicos é a /etc/mediawiki/ .

Pronto, acesse a url http://localhost/mediawiki/ e observe que o Mediawiki estará funcionando normalmente. Faça o login através do usuário que fora criado (no caso, “Joao Beltrao”). Bom uso.

5.3 Parametrizações do arquivo LocalSettings.php
Este arquivo permite um grande número de parametrizações. Algumas dicas (no caso, acrescentar ao final do arquivo as seguintes linhas:
$wgGroupPermissions['*']['edit'] = false;
$wgLocalTZoffset = -180;
$wgGroupPermissions['*']['createaccount'] = false;

A primeira linha acima serve para evitar que usuários anônimos possam modificar o conteúdo do Wiki; a segunda linha para que o Wiki utilize o mesmo fuso horário do usuário no momento de uma edição (horário brasileiro: -3 horas = -180 minutos); a terceira linha desabilita a criação de novos usuários pelos próprios internautas, tarefa que será feita exclusivamente pelo administrador do wiki.

Se desejar, fazer:
$wgGroupPermissions['*']['read'] = false;
Com isso, só é permitido a leitura do wiki por usuários logados no wiki.

Obs: o logo do wiki é definido pela variável “$wgLogo” que por padrão está apontando para /usr/share/mediawiki/skins/common/images/wiki.png. Recomenda-se que se utilize uma figura com fundo transparente de 135×135 pixels. Uma rápida modificação dessa imagem visualizada nesta instalação, apenas altere o valor da variável “$wglogo” que está apontando para a imagem “wiki.png”, deixando-a apontando para a imagem “mediawiki.png” (que está na mesma pasta).

5.4 Dica de segurança
Caso o mediawiki for instalado em uma área pública, cuidado deve-se ter quanto a proibição do acesso de usuários ao arquivo de configuração. Assim, quando for esse o caso, a alteração da permissão do arquivo /etc/mediawiki/LocalSettings.php seria recomendável:

# chmod 600 LocalSettings.php
# chown www-data:www-data LocalSettings.php

Isto fará com que este arquivo não fique visível a outros usuários. É uma medida de segurança.
Se a configuração de segurança fora feita com sucesso, ao acessar a url http://localhost/mediawiki/LocalSettings.php uma página em branco ou uma página de erro deve ser mostrada.

5.5 Uma verificação da base de dados após mediawiki estar instalado
Para isso, faça a autenticação na base de dados. Assim:
a) verificar as bases de dados
Caso o nome da base de dados escolhida na instalação do wiki tenha sido “my_wiki”, tem-se:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_wiki            |
| mysql              |
| performance_schema |
+--------------------+

b) verificar as tabelas criadas para o wiki
Após chavear para a base de dados “my_wiki”, e durante a instalação do wiki escolheu-se “prefixo” para o nome dos prefixos das tabelas relativas as bases de dados do wiki, tem-se:

mysql> show tables;
+---------------------------+
| Tables_in_my_wiki         |
+---------------------------+
| prefixoarchive            |
| prefixocategory           |
| prefixocategorylinks      |
| prefixochange_tag         |
          .
          .
          .

5.6 Testar o funcionamento do mediawiki como um todo
Agora que o mediawiki está instalado, é hora de testar os passos executados. Pelo menos, teste as seguintes facilidades:

– edição de página;
– criação de página;
– criação de usuário.

5.7 Acessar o Mediawiki de outras máquinas
Para isto, basta alterar o valor da variável wgServer do arquivo LocalSettings.php: em vez de localhost (que é o default), coloque o IP de sua máquina. Exemplo:
$wgServer ="http://192.167.34.25";

6) Dicas adicionais para aqueles que desejam criar um domínio próprio para o wiki
A partir desse ponto, são dicas adicionais e não há obrigatoriedade de seguir para deixar o Mediawiki funcionando.

Copiar os apontadores do Mediawiki (e mais algumas pastas adicionais) para o diretório raiz do Apache

# cp -a /var/lib/mediawiki/ /var/www/wiki

6.1) Preparar o ambiente antes de continuar a instalação do Mediawiki

6.1.1) escolher um nome de domínio para acessar o mediawiki. Por exemplo: http://www.meuwiki.com
6.1.2) criar uma entrada no Apache para o novo domínio meuwiki
a) Criar um arquivo em /etc/apache/sites-available, por exemplo de nome ‘meuwiki’, com o seguinte conteúdo:

<VirtualHost *:80>
ServerName http://www.meuwiki.com
DocumentRoot /var/www/wiki
</VirtualHost>

obs: para facilitar, faça uma cópia do arquivo ‘default’ para o ‘meuwiki’, e edite suas diretivas.

b) Habilitar o dominio virtual

#a2ensite meuwiki

c) caso o novo domínio esteja hospedado na mesma máquina que o usuário esteja usando, crie uma entrada em /etc/hosts:

127.0.0.1 http://www.meuwiki.com

6.2) Recarregar o Apache com as novas configurações

# /etc/init.d/apache2 reload

6.3) Complementar a instalação do Mediawiki pelo navegador
Na caixa de endereços de URL do navegador, digitar o endereço do Mediawiki e complementar sua instalação. O acesso ao Mediawiki deve ser pelo nome do domínio escolhido (isso é MUITO IMPORTANTE!!!, para que a instalação fique correta e o Mediawiki acessível de qualquer máquina da rede):

http://www.meuwiki.com

A tela mostrada é para iniciar a configuração do Mediawiki, pois ainda o arquivo de configuração LocalSettings.php ainda não fora criado na pasta /etc/mediawiki/. Este arquivo será criado quando for terminado o processo de complementação da instalação do mediawiki, realizado pelo usuário com o navegador clicando no hiperlink “Set up the wiki” (conforme figura anterior).

6.4) Setup do Wiki
Um exemplo de setup do wiki:

Wiki name: “Meuwiki”
Admin username: “wikiadmin”
Password: <senha_do_wikiadmin>
Databasehost: “10.200.70.5:3306” ou “localhost” (se base dados em outra máquina ou na mesma em que fora instalado o wiki, respectivamente)
DB name: “db_meuwiki”
DB username: “adm_wiki”
DB password: <senha do DB admin>
Database table prefix: “meuwiki_”
Storage Engine: “InnoDB”
Database character set: “MySQL4.1/5.0 UTF-8”

Após executar este “setup”, será criado o banco de dados “db_meuwiki“, e a tabela “mysql.user” terão os seguintes usuários criados:

User Host Password
adm_wiki % *07C2A823749F8D68A9758F74DDDC945DE57873F6
adm_wiki localhost *07C2A823749F8D68A9758F74DDDC945DE57873F6
adm_wiki localhost.localdomain *07C2A823749F8D68A9758F74DDDC945DE57873F6

 

6.5) Disponibilizar o arquivo LocalSettings.php gerado na sua pasta definitiva
Após ter clicado no link “set up the wiki”, conforme mostrado na figura acima, respondido as questões apresentadas pelo aplicativo e, ao final, ter obtido uma mensagem de sucesso, complemente a instalação do Mediawiki disponibilizando este arquivo na sua pasta definida (a mesma que contém o arquivo com o código inicial do midiawiki – “index.php”). Na instalação exemplificada neste post, a pasta seria /var/lib/mediawiki:

# mv LocalSettings.php /var/lib/LocalSettings.php

Agora, garanta a segurança necessária ao ambiente:
# chmod 600 /var/lib/LocalSettings.php
# chown root:root /var/lib/LocalSettings.php

Links uteis:
1- Instalação do MediaWiki em sites pessoais em WebHostings
2- Instalação do MediaWiki no Debian Etch
3- Instalação do MediaWiki em sites pessoais em WebHostings
4- Instalando Apache+PHP+MySQL no Linux/Debian
5- Tutorial MySQL ( instalar em ambiente Linux – Debian )
6- Configurar domínios virtuais do Apache em máquina Linux/Debian
7- Instalar e configurar Módulos do Apache2 no Debian

1. Instalação
a) Verificar qual a versão do pacote do servidor de Banco de Dados (BD) MySQL disponível no repositório:
$ apt-cache policy mysql-server

mysql-server:
Instalado: (nenhum)
Candidato: 5.5.31+dfsg-0+wheezy1

Pela resposta do sistema vemos que o servidor BD MySQL ainda não está instalado, onde o pacote candidato à instalação é a versão 5.5.31

b) Verificar qual a versão do pacote cliente MySQL (linha de comando) disponível no repositório:
$ apt-cache policy mysql-client

mysql-client:
Instalado: (nenhum)
Candidato: 5.5.31+dfsg-0+wheezy1

Pela resposta do sistema vemos que o cliente MySQL ainda não está instalado, onde o pacote candidato à instalação é a versão 5.5.31

c) Para fazer a instalação do servidor de BD MySQL e de seu pacote client:

# apt-get install mysql-server
Neste procedimento será solicitado a senha para o usuário root do MySQL (atenção: não tem nada haver com usuário root do S.O. !!), usuário este que será criado automaticamente na tabela mysql.user. Ao final da instalação o S.O. tentará iniciar o MySQL server.

Observações:

  • com este comando serão instalados simultaneamente o servidor de Banco de Dados MySQL e seu cliente (que oferece uma interface através de linha de comando para o usuário);
  • o arquivo de configuração do MySQL está em /etc/mysql/my.cnf ;
  • são criadas as bases de dados “information_schema” e “mysql” que armazenam várias informações de controle do funcionamento do servidor MySQL, incluindo informações sobre os usuários e sobre as demais bases de dados;
  • O pacote Debian do MySql-server cria o usuário “debian-sys-maint” que é utilizado nos scripts de start-stop e cron. Este usuário não deve ser deletado!
  • o MySQL tem um usuário padrão “root” que tem acesso a todas as bases de dados e privilégios especiais para tarefas de manutenção;
  • Duas tabelas são especialmente importantes:
    • mysql.user: tabela de concessões (“grant table”) que define os usuários do MySQL e seus privilégios de acessos.
    • mysql.db:
  • é recomendado que seja instalado o phpMyAdmin para facilitar o gerenciamento do banco.

d) Para fazer a instalação apenas do pacote MySQL client:
# apt-get install mysql-client

1.1 Verificação da instalação
a) Verificação 1: verificar se o MySQL está instalado corretamente na máquina
mysql> STATUS;
Se estiver corretamente instalado, uma resposta deve ocorrer semelhante a transcrição abaixo:

mysql Ver 14.14 Distrib 5.1.73, for debian-linux-gnu (x86_64) using readline 6.1

Connection id: 1939
Current database:
Current user: jose@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Server version: 5.5.31-1 (Debian)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 2 days 21 hours 22 min 35 sec

Threads: 1 Questions: 17075 Slow queries: 0 Opens: 639 Flush tables: 2 Open tables: 58 Queries per second avg: 0.68
————–

b) Verificação 2: verificar as variáveis do MySQL
mysql> SHOW VARIABLES;
Para visualizar os nomes das variáveis do sistema e seus valores.

c) Verificação 3: se processo do MySQL server foi iniciado e está “ativo”
$ ps -A
3535 ? 00:00:00 mysqld_safe
3660 ? 00:00:50 mysqld

d) Verificação 4: tentando acesso ao MySQL de forma indevida
Mostramos a seguir duas tentativas de acesso ao MySQL sem senha, cuja resposta (corretamente) foi de negação:
joao$ mysql
ERROR 1045 (28000): Access denied for user 'joao'@'localhost' (using password: NO)

joao$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Caso tenha ocorrido a conexão com sucesso ao servidor de banco de dados sem a solicitação de uma senha, existe fragilidade de segurança que deve ser corrigida. O procedimento correto seria na linha de comando informar que será fornecido um password. Quando informado o password correto, o usuário terá acesso ao prompt do MySQL. Por exemplo, para tentar acessar o MySQL utilizando o usuário root o comando seria:
joao$ mysql -u root -p

e) Verificação 5: olhando diretamente a tabela de usuários do MySQL

mysql> SELECT User, Host, Password FROM mysql.user;
+------------------+-----------------------+--------------------------------------------------------------------+
| User                | Host                       | Password                                                                         |
+------------------+-----------------------+--------------------------------------------------------------------+
| root                  | localhost               |                                                                                           |
| root                  | 127.0.0.1              | *FE23015365952A341A576684A19831B890F9DC45 |
+------------------+-----------------------+--------------------------------------------------------------------+
2 rows in set (0.00 sec)

No caso acima temos uma falha de segurança: qualquer usuário da máquina ou aplicação hospedada nesta poderá ter acesso ao prompt do MySQL utilizando usuário root, sem necessitar informar a senha. Por exemplo, este acesso poderá se dar através do simples comando abaixo:
$ mysql -u root

Algumas verificações quanto a segurança são necessárias de serem feitas logo que se instala o servidor MySQL. Uma boa explanação sobre isto pode ser conseguida no manual do MySQL na sessão Securing the Initial MySQL Accounts. Explicando um pouco mais: a tabela de concessão mysql.user define as contas dos usuários do MySQL e seus privilégios de acesso:

mysql> SELECT User, Host, Password FROM mysql.user;
+------------------+-----------------------+-------------------------------------------+
| User                | Host                       | Password                                       |
+------------------+-----------------------+-------------------------------------------+
| root                  | localhost               | *FE23015365952A341A576684A19831B890F9DC45 |
| root                  | euve34849           | *FE23015365952A341A576684A19831B890F9DC45 |
| root                  | 127.0.0.1              | *FE23015365952A341A576684A19831B890F9DC45 |
| rita                   | %                            | *3459015365952A341A576684A19831B890F97A5E |
+------------------+-----------------------+-------------------------------------------+
3 rows in set (0.00 sec)

No caso acima temos o usuário root com acesso ao BD a partir da própria máquina em que está o MySQL. Seja utilizando o nome do host como localhost, o endereço IP 127.0.0.1 ou ainda utilizando o nome da máquina local. Ainda se tem a usuária rita que tem o caractere curinga ‘%’ para a parte do host, então ela pode se conectar de qualquer host.

f) Verificação 6: teste com telnet
Este teste tem por objetivo verificar se o servidor MySQL está permitindo conexões remotas ou não. A instalação padrão não permite conexões externas, o que é mais seguro. A configuração do MySQL pode ser alterada através do seu arquivo de configuração /etc/mysql/my.cnf como será detalhado mais adiante.

De uma máquina qualquer da rede, tentar acessar a porta padrão utilizada pelo MySQL (porta 3306):
$ telnet endereço_máquina 3306
Deve-se obter uma resposta do tipo:

Trying ip_maquina…
telnet: Unable to connect to remote host: Connection refused

Caso contrário, onde tenha ocorrido uma conexão ao banco de dados ou o envio de um conjunto de caracteres (sem sentido lógico), a porta está aberta e o servidor MySQL aceita conexões remotas. Se o que se deseja é se permitir apenas conexões locais ao servidor MySQL (situação que é mais segura), deve-se fechar esta possibilidade de conexão através do seu arquivo de configuração.

2. Liberar o servidor MySql para aceitar conexões externas
O MySQL por padrão ao ser instalado está configurado para NÃO permitir acesso remoto, somente local (localhost). Se for necessário ter de habilitar conexões remotas ao servidor MySQL (partindo de outros hosts que não seja o localhost), deve-se:


shell# mcedit /etc/mysql/my.cnf

E substituir o valor do parâmetro “bind-address”, que contém 127.0.0.1, pelo IP da máquina em que está instalado o servidor MySQL.
Reiniciar o MySQL:
shell# /etc/init.d/mysql restart

Agora o servidor MySQL permitirá acessos de outras máquinas da rede.

O seguinte comando ilustra como acessar um servidor MySQL remoto:
shell$ mysql -h ip-maquina -u jose -p
Fornecendo a senha correta do usuário jose e se este estiver cadastrado na tabela mysql.user com permissão de conexão remota, o prompt da linha de comando do MySQL-client será fornecido ao usuário.

OBS: ressaltando, o usuário que fará o acesso remoto deve estar cadastrado na tabela de acesso do MySQL (mysql.user) e ter permissão para conexão a partir de um host externo (coluna “Host”=% referente a este usuário nesta tabela).

2.1 Limitando as conexões externas
É possível limitar as conexões externas a apenas alguns endereços IPs. Para isto deve-se lançar mão de políticas restritivas através de firewalls, como iptables. A seguir exemplificamos restrições que podem ser feitas através do iptables:
-A INPUT -i eth0 -s 197.160.2.13 -p tcp --destination-port 3306 -j ACCEPT
-A INPUT -i eth0 -s 197.160.2.0/24 -p tcp --destination-port 3306 -j ACCEPT

3. Alguns comandos bastante utilizados
Vamos listar alguns comandos do MySQL que consideramos bastante utilizados, agrupando-os em grupos lógicos. Esse agrupamento não é oficial, mas me tem sido útil em diversas situações.
OBS: os comandos dados dentro do prompt do client MySQL NÃO são case sensitive.

3.1 Comandos de caráter Geral (em muitas ocasiões, os mais importantes…)

Comando Comentário

  • shell# /etc/init.d/mysql start
  • shell# /etc/init.d/mysql restart
  • shell# /etc/init.d/mysql stop

Comandos para iniciar, reiniciar e parar o MySQL
shell$ mysql -p
shell$ mysql -u jose -p
Login para linha de comando do MySQL, para o usuário corrente.
Login para linha de comando do MySQL, para o usuário jose.
mysql> STATUS; Informações da atual sessão do cliente MySQL, com versão e status do banco de dados.

  • mysql> SHOW databases;
  • mysql> SHOW tables;

Mostra listas de banco de dados e de tabelas disponíveis, respectivamente.
mysql> USE database Usa um banco de dados específico.
mysql> DESCRIBE table Descreve as colunas de uma tabela
mysql> SOURCE filename Executa comandos de um arquivo como script.
mysql> QUIT Sai do cliente MySQL (linha de comando)

3.2 Comandos de administração de Banco de Dados
Para acompanhar a administração de usuários, em especial, visualizar duas tabelas: mysql.user e mysql.db.

Comando Comentário
mysql> SELECT User, Host, Password FROM mysql.user; Visualizar tabela mysql.user, que armazena identificação dos usuários do MySQL e seus privilégios.
shell$ mysqladmin -u root password nova_senha -p Definir nova senha o usuário root do MySQL.
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd') WHERE User = 'root'; Atualiza de uma única vez todas as senhas referente ao usuário root.
mysql> FLUSH PRIVILEGES; Declaração FLUSH causa no servidor a releitura das tabelas de permissões. Sem ele, a alteração da senha permaneceria despercebida pelo servidor até que este fosse reiniciado.
mysql> SET PASSWORD FOR 'jose'@'localhost' = PASSWORD('senha_para_jose'); Altera senha de usuário já existente jose@localhost

  • mysql> CREATE USER maria@localhost IDENTIFIED BY 'minha_senha';
  • mysql> CREATE USER 'luiza'@'localhost' IDENTIFIED BY 'senha_para_luiza';
  • mysql> CREATE USER jose IDENTIFIED BY 'minha_senha'

Comandos de criar usuários com senha criptografada.
Para todos os exemplos NENHUM PRIVILÉGIO é atribuído aos usuários criados. Nem mesmo o de select. Isto pode ser verificado através da tabela mysql.user
mysql> INSERT INTO mysql.user (Host,User,Password,Select_priv) VALUES('localhost','jose', PASSWORD('minha_senha'), 'Y');
mysql> FLUSH PRIVILEGES;
Cria novo usuário jose@localhost, com senha criptografada, sendo atribuído o privilégio do mesmo de fazer SELECT. O comando FLUSH PRIVILEGES faz com que o servidor faça a releitura das tabelas de permissões.
mysql> GRANT ALL ON banco1.* TO 'jose'@'%' identified by 'secret'; Cria usuario jose, para conexão externa ao MySQL, com a senha que será guardada criptografada “secret”. Este usuário terá todos os privilégios limitado ao banco de dados banco1.
Se usuário já existir, apenas atualizará a sua senha e privilégios. Para verificar os privilégios do usuário jose, usar (como administrador do MySQL) os comandos select * from mysql.user where User='jose';, bem como select * from mysql.db where User='jose';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE on banco2.* to marcos@'%' identified by 'secret'; Cria usuário marcos, para conexão externa ao MySQL. Este usuário terá os privilégios de SELECT, INSERT, UPDATE, DELETE sobre o banco de dados “banco2”. Os demais privilégios serão negados.
mysql> REVOKE ALL ON banco1.* FROM 'jose'@'%'; Remover as permissões de acesso remoto do usuario jose a base de dados base1. Este usuario continuará existindo no MySQL e poderá acessar outras bases de dados a que tenha acesso.

mysql> DROP USER maria@localhost;
mysql> DROP USER joana;
mysql> DROP USER 'clara'@'%';
mysql> DROP USER 'patricia'@'201.132.12.13';
Excluir as usuárias: maria (para acesso localhost), joana e clara (para acessos remotos, quaisquer hosts) e usuária patricia (a partir do host 201.132.12.13), respectivamente.
Em todos os casos, as tabelas mysql.user e mysql.db serão afetadas.

OBS:
Ao tentar se conectar ao MySQL e uma das situações ocorrer:
– errar a senha;
– não fornecer a senha;
– usuario inexistente;
– sem permissão de acesso (por exemplo, tentando fazer uma conexão remota sem permissão para isto),

uma mensagem semelhante a abaixo será mostrada:

ERROR 1045: Access denied for user: ‘user@ip-maquina’ (Using password: NO|YES)

4. Criar base de dados
Vamos criar a base de dados ‘test’. Após fazer a conexão com o MySQL (mysqladmin -u root password xxxx), usa-se o comando:

mysql> create database test;

E obtem-se a seguinte resposta:

Query OK, 1 row affected

Verifique agora se realmente a base dados ‘test’ fora criada:

mysql> show databases;

e o MySQL informará as bases de dados existentes.

5. Exemplos de linhas de comandos MySQL diversos

use bd_discoteca;
describe tb_discos;
SELECT * FROM tb_discos;
SELECT * FROM tb_discos where disco_id >= 0 LIMIT $12;
select * FROM tb_discos where titulo = "Vai chover";
SELECT * FROM tb_musicas where titulo like "%lua%";
SELECT tb_discos.titulo FROM discos,musicas WHERE 
	tb_musicas.interprete = 'luiz gonzaga' AND tb_discos.disco_id := tb_musicas.disco_orig;
SELECT * FROM tb_discos where titulo LIKE 'NELSON%';
SELECT * FROM tb_discos where titulo LIKE '$titulo';

INSERT INTO tb_musicas (numero_disco,faixa,titulo,interprete,autor,ritmo) VALUE (1600,10,"AQUELAS MAOS","NELSON GONCALVES","LOURO,A-RODRIGUE",7);
INSERT INTO tb_musicas (numero_disco,faixa,titulo,interprete,autor,ritmo) VALUE (
           '$num_disco','$num_faixanovo','$titulonovo','$interpretenovo','$autornovo','$ritmonovo');
INSERT INTO tb_usuarios (username,senha) VALUE ("maria","secret");

UPDATE tb_discos SET ritmoprincipal = "ciranda" WHERE id_discos = "3";
UPDATE tb_usuarios SET perfil = 2 WHERE id_usuario = 2;
UPDATE tb_musicas SET titulo = '$titulonovo',interprete='$interpretenovo',
    faixa='$num_faixanovo', autor='$autornovo',ritmo='$ritmonovo'  where
    numero_disco='$num_disco' AND  faixa='$num_faixa';

CREATE INDEX xmusica ON tb_musicas (numero_disco,faixa);
ALTER TABLE tb_musica_temp RENAME musicas;  // renomeando uma tabela.
ALTER TABLE tb_discos drop disco_id;
ALTER TABLE tb_discos CHANGE gravadora gravadora_velha varchar(30); // alterando nome da linha
ALTER TABLE tb_gravadoras ADD (PRIMARY KEY (codigo_gravadora));
ALTER TABLE tb_musicas ADD (PRIMARY KEY (numero_disco,faixa));
ALTER TABLE tb_discos ADD COLUMN disco_id int auto_increment PRIMARY KEY FIRST;
ALTER TABLE tb_discos ADD COLUMN anoproducao smallint AFTER ritmoprincipal;
ALTER TABLE tb_discos ADD COLUMN anoproducao year AFTER ritmoprincipal;
ALTER TABLE tb_discos ADD COLUMN id_discos SMALLINT auto_increment PRIMARY KEY FIRST;
ALTER TABLE tb_discos MODIFY titulo  char (40) NOT NULL;
ALTER TABLE tb_ritmos MODIFY codigo_ritmo smallint unsigned not null PRIMARY KEY;
ALTER TABLE tb_discos ADD index (titulo(10));

DELETE FROM tb_discos where disco_id=0;
DELETE FROM tb_discos;

LOAD DATA INFILE '/home/programando/discoteca/nome_disco.txt' INTO TABLE tb_discos (titulo);
LOAD DATA INFILE '/home/programando/discoteca/nome_discwq.txt' INTO TABLE tb_discos FIELDS TERMINATED BY '\t' (disco_id,titulo, ritmoprincipal, gravadora);

$mysqldump -u root -p --no-data bd_discoteca tb_usuarios > estrutura_usuarios.sql // cópia vazia da estrutura da tabela usuarios do BD discoteca.
$mysqldump -u root -p --no-data bd_discoteca > estrutura_usuarios.sql // cópia vazia da estrutura do BD discoteca.

6. Recuperar senha do administrador do MySQL
Pode acontecer do usuário root perder a senha de administração do MySQL. Esta não pode ser recuperada, mas é possível criar uma nova senha para este usuário.
Vejamos o procedimento.

6.1 Matar os processos mysqld e reiniciar o MySQL em modo seguro (safe mode)
shell# killall mysqld
shell# mysqld_safe --skip-grant-tables &

6.2 Definir a nova senha para o usuário root do MySQL

shell# mysql
mysql> update mysql.user set password = password('nova_senha') where user='root' and host='localhost';
mysql> flush privileges;
mysql> quit;

6.3 Desligar o modo de segurança do MySQL e iniciar o MySQL com a nova senha de root

shell# /etc/init.d/mysql stop
shell# /etc/init.d/mysql start

Conectar-se normalmente ao mysql utilizando a nova senha:
shell$ mysql -u root -p

7. Desinstalar o MySQL
Pode haver necessidade de desinstalar o MySQL (e até mesmo, após isso, fazer sua reinstalação). Seguir os passos abaixo:
a) Parar o MySQL
# killall -9 mysql
# killall -9 mysqld

b) Remover o MySQL
# apt-get remove --purge mysql\*
# apt-get clean /* limpar o cache de pacotes*/

c) Listar todos os pacotes mysql instalados
# dpkg -l | grep -i mysql

ou ainda….
# updatedb
# locate mysql

Veja também:
1- Tutorial MySQL Tizag
2- MySQL on Linux Tutorial
3- Securing the Initial MySQL Accounts
4- Assigning Account Passwords
5- MySQL 5.1 Reference Manual
6- Manual MySQL em português
7- mysqld_safe — MySQL Server Startup Script
8- Instalar servidor LAMP (Linux + Apache + PHP + MySQL) no Debian

1- Camada de Abstração
A abstração de banco de dados é um recurso que permite que a aplicação seja portável entre diferenres SGBDs (Sistema de Gerência de Banco de Dados). É uma camada intermediária entre a aplicação e o banco de dados. As bibliotecas de abstração de banco de dados traduzem os comandos fornecidos para os comandos nativos dos SGBDs.

Abstração de banco de dados

Existem muitas bibliotecas de abstração de banco de dados disponíveis para o PHP. Estas bibliotecas (classes) representam uma conecção entre o PHP e um servidor de base de dados. Podemos citar algumas destas bibliotecas:

  • dbx
  • DBA
  • ODBC
  • PEAR::MDB2
  • PDO

1.1- Extensão dbx:
– disponível na biblioteca de extensões PECL (ver adiante) e precisa ser instalada separadamente. Suporta diversos bancos de dados como o MySQL, PostgreSQL, SQL Server, ODBC, Sybase, Oracle e SQLite. Em ambiente com servidores Linux, a dbx necessita ser instalada separadamente fazendo seu download dos arquivos fonte da biblioteca em http://pecl.php.net/package/dbx

1.2- Classe PEAR::MDB2
– trata-se de uma classe externa disponível para download no PEAR (repositório de extensões e aplicações do PHP, ver adiante). Suporta grande variedade de SGBDs, tais como dBase, Interbase, Informix, mSQL, MySQL, ODBC, PostgreSQL, Sybase, Oracle e outros.

1.3- PDO
A extensão “PHP Data Objects” (PDO) define uma interface leve e consistente para acessar bancos de dados em PHP. Cada driver de banco de dados (PDO_SQLITE, PDO_MYSQL e outros conforme listado abaixo) que implementa a interface PDO pode dispor de facilidades específicas da respectiva base de dados como extensão de funções regulares. Note que deve-se usar um driver específico PDO para acessar um determinado servidor de banco de dados.

PDO fornece uma camada de abstração de acesso a dados, o que significa que, independentemente de qual banco de dados se esteja usando, se utiliza das mesmas funções para emitir consultas e buscas de dados. A grande utilidade do PDO é quando se escreve um sistema já pensando na possibilidade dele ser portado para outros bancos de dados ou quando da necessidade de se trabalhar com mais de um tipo de banco. É uma interface de acesso a banco de dados (ao contrário de uma camada de abstração total, esta extensão não gera SQL automaticamente nem emula características faltantes). É uma extensão que tem como objetivo padronizar o acesso a banco de dados usando as mesmas funções independentemente do SGBD.

PDO está empacotado com PHP 5.1, e está disponível como uma extensão PECL (veja abaixo) para PHP 5.0; não funciona com versões anteriores ao PHP 5. PDO e o driver PDO_SQLITE já estão habilitados por default desde o PHP 5.1.0. No entanto, é necessário habilitar o driver PDO para outros SGBD.

Os seguintes drivers estão disponíveis para implementarem interfaces PDO:

  • PDO_FIREBIRD Firebird/Interbase 6
  • PDO_IBM IBM DB2
  • PDO_INFORMIX IBM Informix Dynamic Server
  • PDO_MYSQL MySQL 3.x/4.x/5.x
  • PDO_OCI Oracle Call Interface
  • PDO_ODBC ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
  • PDO_PGSQL PostgreSQL
  • PDO_SQLITE SQLite 2 e SQLite 3
  • PDO_SQLSRV Microsoft SQL Server / SQL Azure

Como instalar os drivers PDO no Debian?
Para o driver PDO_MYSQL:
# apt-get install php5-mysql
O pacote php5-mysql provê um módulo para conexões de banco de dados MySQL diretamente a partir de scripts PHP. Também inclui o módulo pdo_mysql para uso com a extensão PDO.

Para o driver PDO_PGSQL:
# apt-get install php5-pgsql
O pacote php5-pgsql provê um módulo para conexões de banco de dados PostgreSQL diretamente a partir de scripts PHP. Também inclui o módulo pdo_pgsql para uso com a extensão PDO.

Para o driver PDO_SQLITE:
# apt-get install php5-sqlite

2- PEAR
Pear (PHP Extension and Application Repository) oferece o seguinte:
+ uma biblioteca estruturada de código fonte aberto para programadores PHP;
+ sistema de distribuição de código e gerência de pacote
+ estilo de código padronizado desenvolvido em PHP
+ uma biblioteca de extensões para o PHP (PECL)

PEAR é um sistema de estrutura e distribuição para componentes PHP reutilizáveis, criando uma coleção de funcionalidades de adição para o desenvolvimento de PHP. Cada pacote de código PEAR segue um padrão. Existem muitos pacotes PEAR disponíveis que lidam com finalidades diversas: de gerenciamento de seções até funcionalidades de carrinho de compras. Abaixo lista-se algumas categorias de módulos PEAR:

  •   autenticação;
  •   banco de dados;
  •   data/hora;
  •   encriptação;
  •   internacionalização;
  •   correio;
  •   streams;
  •   e muitas outras. A lista completa de módulos pode ser encontrada em http://pear.php.net/packages.php

O PEAR possui um gerenciador de pacotes chamado “PEAR package manager”, que permite a instalação de de novos pacotes, gerenciamento de pacotes já instalados e verificação de dependência entre eles. Esse gerenciador tem sua funcionalidade semelhante ao “apt-get” do Debian Linux. Este pacote “PEAR package manager” contém as classes base PEAR para o PHP, bem como o instalador PEAR. Muitas classes PEAR já estão empacotados para o Debian, e pode ser facilmente identificados por nomes que começam com “php”, como php-db e php-auth.

Para verificar se o PEAR está instalado no seu sistema, verifique a resposta do sistema ao seginte comando:
$ pear
O programa ‘pear’ não está instalado no momento. Você pode instalá-lo digitando: apt-get install php-pear

No caso acima, o sistema informou que o “PEAR package manager” não está instalado. Proceda a instalação com o seguinte comando:
# apt-get install php-pear

Com a instalação do “PEAR package manager”, pode-se utilizá-lo para instalar os pacotes desejados. Por exemplo, para instalar o pacote MDB2:
# pear install MDB2

No caso acima, o instalador denominado pear abre uma conexão HTTP com o servidor de pacotes do PEAR, obtém o pacote MDB2 e o instala no diretório apropriado. No caso do Debian, o arquivo principal dessa classe estará em: /usr/share/php/MDB2.php , e a documentação correspondente em /usr/share/doc/php5-common/PEAR/MDB2/docs/

Para saber quais os pacotes instalados, utilize o seguinte comando conforme demonstrado no exemplo abaixo:
$ pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.7 stable
Console_Getopt 1.3.0 stable
MDB2 2.4.1 stable
PEAR 1.9.4 stable
Structures_Graph 1.0.4 stable
XML_Util 1.2.1 stable

3- PECL
PECL (PHP Extension Community Library) é um projeto que distribui extensões PHP (códigos compilados escritos em C) para compilação com o PHP. PECL inclui módulos para muitas finalidades. Extensões PECL são distribuídos como pacotes e podem ser instalados utilizando o instalador PEAR com o comando “pecl”.

O repositório PECL pode ser encontrado em http://pecl.php.net/
A lista de extensões PHP pode ser visualizada em http://pecl.php.net/packages.php

Links:
1- Driver PDO_SQLITE
2- Instalações PECL

A configuração descrita abaixo foram realizadas no Debian-6 (Squeeze).

Para o WordPress executar corretamente (Instalação WordPress básico + Supercache), é preciso :
a) habilitar o módulo suPHP do Apache;
b) habilitar o módulo rewrite do Apache;
c) habilitar a diretiva “AllowOverride All” relativo a pasta raiz do site.

Vejamos os procedimentos.

1. Instalar o Apache, PHP e MySQL (LAMP)
Veja aqui um tutorial para esta instalação.

2. Preparar os dominios virtuais no Apache
A configuração pode ser conseguida seguindo este tutorial. Atentar para habilitar a permissão de reescrita.

3. Certificar-se dos pacotes Apache necessários
Para isto, use a maneira mais fácil é que através do Synaptic. Devem ser deixados instalados e funcionando os seguintes pacotes:

apache2
apache2-mpm-worker
apache2-utils
apache2.2-bin
apache2.2-common
libapache2-mod-suphp

4. Habilitar o módulo rewriter do Apache

# a2enmod rewrite

OBS: para entender o funcionamento do módulo de reescrita do Apache, veja o post Configuração .htacces do Apache2.

5. Configurar o módulo suPHP
Primeiro, instalar o módulo:
# apt-get install libapache2-mod-suphp

Editar o arquivo /etc/suphp/suphp.conf , para fixar as seguintes configurações na sua sessão de segurança:
; Security options
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false

Também deve ser matéria de atenção três outros aspectos:
(a) a configuração de “docroot” neste arquivo. Se todos os domínios existentes no servidor tiver sua pasta inicial em /home/nome_usuario/public_html, esta variável deve ser do tipo:
docroot=${HOME}/public_html
(b)Mudar a configuração da UMASK (“user mask”) para 0022, de forma a se ter as criações do arquivos com permissões 644 e para DIRETÓRIOS 755:
umask=0022, em vez do valor default que é “0077”.
(c) Para evitar que o arquivo de log cresça muito, utilize:
loglevel=warn, em vez do valor default que é “info”.

6. Habilitar o módulo suPHP


# a2dismod php5
# a2enmod suphp

O primeiro comando acima é necessário caso esteja o Apache2 instalado com o PHP como um módulo. Neste caso, o módulo PHP deve ser desabilitado pelo fato do suPHP usar a versão CGI do PHP para funcionar.
OBS: para uma descrição mais completa da instalação do módulo suPHP, veja o post Instalar e configurar Módulos do Apache2 no Debian.

Comandos úteis:
$ ls -la /etc/apache2/mods-enabled
O primeiro comando lista os módulos habilitados.

7. Reiniciar o Apache

# /etc/init.d/apache2 restart

8. Criar um usuário para receber o WordPress
Utilize o comando adduser, criando um novo usuário conforme exemplo abaixo

# adduser governanca

Faça login neste novo usuário e crie uma pasta para servir como diretorio raiz para o novo dominio virtual a ser criado. Como exemplo, iremos criar a pasta public_html:

governanca$ mkdir public_html

9. Criar um domínio virtual tendo como pasta raiz public_html
a) Criar o arquivo /etc/apache2/sites-available/governanca copiado a partir do arquivo “default”, devendo o mesmo ser editado e ter as seguintes configurações nos locais apropriados:
Servername http://www.governanca.org
DocumentRoot /home/governanca/public_html

Para maiores detalhes, veja o post Configurar domínios virtuais do Apache em máquina Linux/Debian.

b) Habilitar o novo dominio, através dos seguintes comandos

# a2ensite governanca
# /etc/init.d/apache2 reload

10. Testar o funcionamento do novo domínio
Copie para a pasta criada public_html dois arquivos exemplos, index.html e index.php, e acesse via navegador para testar o funcionamento do Apache e do PHP (www.governanca.org e http://www.governanca.org/index.php). Deverá ser mostrado na tela do navegador os conteúdos destes dois arquivos. Assim, asseguramos o funcionamento do Apache e do PHP.

11. Baixar o WordPress e descompactá-lo
Para facilitar, faça estas ações já na pasta public_html do usuário que será proprietário da aplicação:


governanca/public_html$ wget -c http://br.wordpress.org/
governanca/public_html$ unzip wordpress-3.3.1-pt_BR.zip

Com estes comandos, será criado uma pasta governanca/public_html/wordpress contendo todo o conteúdo da aplicação já de forma descompactada.

12. Criar base de dados para o WordPress

governanca$ mysql -u root -p

mysql> CREATE DATABASE wordpress;
mysql> GRANT ALL ON wordpress.* TO wordpress IDENTIFIED BY '2nMaqPvg';
mysql> FLUSH PRIVILEGES;

13. Ajustar a configuração do WordPress

a) Renomear o arquivo “wp-config-sample.php” para “wp-config.php”:

governanca/public_html/wordpress$ cp wp-config-sample.php wp-config.php

b) Editar o arquivo wp-config.php com configurações de conectorização ao banco de dados

// ** MySQL settings ** //
define('DB_NAME', 'wordpress'); // The name of the database
define('DB_USER', 'wordpress'); // Your MySQL username
define('DB_PASSWORD', '2nMaqPvg'); // ...and password
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');

OBS: Em caso de se utilizar servidores separados para a função de servidor web e banco de dados, DB_HOST deve indicar o IP do servidor de banco de dados. Usa-se “localhost” ou o “127.0.0.1” quando o servidor MySQL estiver instalado na mesma máquina do servidor web.

14. Configurar o WordPress
Acesse pelo navegador a página de configuração do WordPress em http://www.governanca.org.br/wordpress/wp-admin/install.php. Abaixo uma parte da tela que deve ser mostrada.
Tela para configuração inicial do WordPress
Prossiga informando o que é solicitado:
Título do site: Governança
Nome do usuário: admin
Senha: minhasenha

Se tudo estiver funcionando bem, uma tela de sucesso de instalação deve ser mostrada conforme o exemplo abaixo.

Tela informando sucesso na instalação do WordPress.

15. Para acessar o novo sitio com WordPress
Acesso aos posts: http://www.governanca.org.br/wordpress/
Acesso ao login administrativo: http://www.governanca.org.br/wordpress/wp-login.php

Referências:
1- Instalando o WordPress
2- Apache2 usando o módulo Suphp
3- Installing suPHP
4- Manual Apache: suporte suEXEC
5- Instalar servidor LAMP (Linux + Apache + PHP + MySQL) no Debian
6- Configurar domínios virtuais do Apache em máquina Linux/Debian
7- Instalar e configurar Módulos do Apache2 no Debian
8- Configuração .htacces do Apache2
9- Download do WordPress
10- Instalando o WordPress
11- Calculando valores de UMASK
12- SuPHP HomePage

Zend Framework é um framework para aplicações Web de código aberto, orientado a objetos, implementado em PHP 5 e licenciado como New BSD License. Zend Framework—freqüentemente referido como ZF—é desenvolvido com o objetivo de simplificar o desenvolvimento web enquanto promove as melhores práticas na comunidade de desenvolvedores PHP.

1. Instalar o Apache, PHP5 e MySQL

Primeiramente, instalar os pacotes necessários para se ter um servidor Web PHP funcionando. Em outro post já descrevemos este procedimento. Não vamos aqui tecer maiores detalhes novamente. Faça uso do seguinte comando:

# # apt-get install apache2 apache2-utils php5 php5-cli mysql-server-5.0 php5-mysql -y

Agora verifique se o Apache está funcionando: acesse com o navegador a URL http://localhost

Caso seja visualizada uma página do tipo “It Works”, o servidor Apache está funcionando.

Para verificar o funcionamento do PHP, crie um arquivo /var/www/index.php com o seguinte conteúdo:

<?php
phpinfo();
?>

Agora acesse o endereço http://localhost/index.php . Se as informações de configuração do PHP aparecerem, isto significará que o Apache e o interpretador PHP estão funcionando. Uma listagem semelhante a abaixo deve ser visualizada.

Tela da saída index.php

Para funcionar, o ZendFramework necessita que esteja instalada a biblioteca de abstração de banco de dados ADOdb. Essa biblioteca é que permite que o código que se escreve seja portável a diversos bancos de dados. Isso pode ser facilmente realizado através do Synaptic, ou através do comando:

# apt-get install libphp-adodb

Para entender a importância desta biblioteca, veja o exemplo abaixo:

<?php
include(‘libs/adodb.inc.php’);
# fazendo a conexão ao MYSQL
# (servidor, usuario, senha e banco)
$DB = NewADOConnection(‘mysql’);
$DB->Connect(‘localhost’,’albuquerque’,’minhasenha’, ‘meu_banco’);
?>

Assim, conecta-se ao banco MySQL.  Para mudar para uma base PostgreeSQL, basta trocar:

de:
$DB=NewADOConnection(‘mysql’);
para:
$DB=NewADOConnection(‘postgres’);

2. Verificar os pacotes instalados
Verifique se os pacotes básicos foram instalados, antes de iniciar a instalação do ZendFramework. Uma forma simples de realizar isto através da interface gráfica é utilizando o Synaptic. Os seguintes pacotes e bibliotecas devem estar instalados:

apache2
apache2-mpm-itk
apache2-utils
apache2.2-bin
apache2.2.common
libapache2-mod-php5
libapr1
libaprutil1
libaprutil1-dbd-sqlite3
libphp-adodb
php5
php5-adodb
php5-cli
php5-common
php5-mysql
php5-suhosin

3. Baixar o ZendFramework.
O Zend Framework tem uma grande variedade de opções de instalação:

a) usar o canal PEAR;
b) baixar via aptitude (ou Synaptic) a versão do ZendFramework do repositório Debian;
c) instalar a Zend Zend Server Community Edition (CE), que é uma forma agradável e fácil de iniciar o desenvolvimento com Zend Server;
d) baixar a última versão do ZendFramework da própria página oficial do framework, e instalá-la manualmente.

Neste post vamos adotar a última opção acima, ou seja, baixar a mais recente versão do framewotk diretamente da sua página oficial. Para isto, deve-se entrar na página da ZendFramework, na seção download, e escolher o pacote e versão para baixar. Basicamente, existem duas opções para download:

  • Zend Framework Full: pacote completo com todas as ferramentas internas e externas da biblioteca. Aplicativo de linha de comando para Windows e Linux. Além de testes que podem ser executados, estão presentes algumas classes adicionais e o Dojo Toolkit, pacote Javascript utilizado oficialmente.
  • Zend Framework Minimal: pacote contendo todas as classes do Zend Framework e o aplicativo de linha de comando para Windows e Linux. Não encontramos algumas estruturas adicionais, porém esta versão contém todos os arquivos necessários para programação.

Vamos fazer este post utilizando a versão “full”.

Após baixar o arquivo ZendFramework-1.11.11.tar.gz, descompacte o seu conteúdo em /opt através do seguinte comando:

# tar -xvf ZendFramework-1.11.11.tar.gz -C /opt/

Será gerado uma estrutura de diretórios da seguinte forma (obs: use o comando “tree” para isto):

. (/opt)
── ZendFramework-1.11.11
├── bin
│   ├── zf.bat
│   ├── zf.php
│   └── zf.sh
├── demos
│   └── Zend
├── externals
│   └── dojo
├── extras
│   ├── library
│   └── tests
├── incubator
├── INSTALL.txt
├── library
│   └── Zend
├── LICENSE.txt
├── README.txt
├── resources
│   └── languages
├── src
└── tests
├── AllTests.php
├── phpunit.xml
├── resources
├── runtests.sh
├── TestConfiguration.php.dist
├── TestHelper.php
└── Zend

4. Configurar o ambiente
4.1 Variável include_path do PHP

O diretório library, onde o Zend espera localizar todos os seus arquivos, deve estar incluído no include_path. Edite os arquivos /etc/php5/apache2/php.ini e /etc/php5/cli/php.ini nas seções Paths and Directories que fica aproximadamente na linha 780 (dentro da sessão “Paths and Directories”), como no exemplo abaixo:

; UNIX: "/path1:/path2"
include_path = “.:/opt/ZendFramework-1.11.11/library”

4.2 Habilitar módulo rewrite do Apache
Para habilitar o módulo execute o seguinte o seguinte comando:

# a2enmod rewrite

Também é necessário alterar o arquivo /etc/apache2/sites-available/default, na tag <Directory /var/www/> temos o parâmetro AllowOverride com o valor None. Mude-o para All.

4.3 Recarregar as configurações do Apache e do PHP

Use o seguinte comando:


# /etc/init.d/apache2 reload

4.4 Criar alias para usar linha de comando
O ZendFramework vem equipado com uma ferramenta CLI, ou “command line tool” (internamente conhecida como a ferramenta de console), é correntemente a interface primária para “dispatching” solicitações à Zend_Tool.

Para fazer uso desta ferramenta de linha de comando, deve-se criar um alias para o comando zf. Edite o arquivo /etc/bash.bashrc e adicione no seu final a seguinte linha:

alias zf=/opt/ZendFramework-1.11.11/bin/zf.sh

5. Testar o funcionamento do ZendFramework
Feche e abra um novo terminal. Qualquer usuário do sistema pode executar o Zend Framework Command Line Console Tool, basta apenas digitar zf no terminal.

a) Para visualizar qual versão do ZendFramework está instalada, executar o seguinte comando:

$ zf show version

cuja resposta deve ser algo parecido com:

Zend Framework Version: 1.11.11

b) Para que o Zend_Tool possa funcionar, deve ser possível executar o PHP. Para testar execute:

$ php -v

cuja resposta deve ser algo parecido com:
PHP 5.3.3-1ubuntu9.3 with Suhosin-Patch (cli) (built: Jan 12 2011 16:08:14)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

6. Criar um projeto

6.1) Criar área do projeto no ZendFramework:

Vamos criar o projeto dentro de uma pasta na própria área do usuário. Essa pasta será a raiz de nosso servidor virtual a ser criado.  Isto facilitará a criação de arquivos já que o usuário local já terá todas as permissões para manipulação dos mesmos, não necessitando se logar como administrador. Para criar o projeto helloworld execute o seguinte comando:


$ zf create project /home/usuario/helloworld

Após este comando, uma estrutura de diretórios padrão do Zend Framework será criada.  Veja abaixo uma estrutura ideal para se iniciar um projeto (nem todas as pastas foram criadas automaticamente pelo comando acima):
Estrutura de Diretórios para iniciar um projeto.

Vamos analisar esta árvore:

  • Diretório application/: armazena todos os arquivos referentes ao aplicativo. Neste local encontramos toda a programação não visualizável em ambientes externos, ou seja, sua programação PHP. Arquivos como imagens ou que não devem sofrer processamento, como CSS estático, não devem ser armazenados neste local. Ainda neste diretório, vamos armazenar toda a arquitetura MVC, módulos criados, configurações necessárias para inicialização do aplicativo e classes de Bootstrap.
    • Diretório configs/: diretório de configuração da aplicação. Este diretório recebe todas as configurações do aplicativo. O Zend Framework carrega o application.ini em tempo de inicialização, intepretando as informações descritas. Com ele é possível trabalhar com recursos prontos sem programação. Antigamente, se você necessitava conectar ao banco de dados, era necessária a programação manual de conexão no arquivo de inicialização. Hoje, basta inserirmos algumas linhas no arquivo de configuração e todo o tratamento estará disponível, sem nenhuma codificação especial do programador. Este diretório deve armazenar qualquer programação necessária para inicializar o aplicativo, como arquivos XML contendo a estrutura inicial da barra de navegação ou qualquer característica modificável sem a necessidade de inclusão de código PHP.
    • Diretórios controllers/, models/, e views/: estes diretórios servem como os diretórios  default para o controller, model or view. Criar estes diretórios dentro do diretório application/ é o melhor leiaute para iniciar um projeto simples bem como para iniciar um projeto modular que tem controllers/models/views globais. Estes diretórios armazenam as controladoras da arquitetura MVC. As controladoras são as classes que armazenam a manipulação dos dados provenientes dos modelos e envia os processamentos prontos para a camada de visualização. Cada arquivo interno a este diretório deve armazenar somente uma classe de controladora e nomeado com o mesmo nome. Ou seja, caso exista uma controladora de “escolas”, a classe terá nome EscolasController, estendida da Zend_Controller_Action, e o arquivo deverá ser nomeado como EscolasController.php.
    • Diretórios controllers/helpers/: Estes diretórios conterão helpers de ação. Hekpes de ação serão “namespaced” bem como “Controller_Helper_” para o módulo default ou “<Module>_Controller_Helper” de outros modulos.
    • Diretório layouts/: diretório que armazena o formato da aplicação a ser construída, destinado aos layoutes do MVC. Desde que Zend_Layout é capaz de ter laiautes de MVC- e não-MVC-based, a locação deste diretório reflete que os leiautes não são relacionados 1-a-1 com os controladores e são independentes dos templates dos views/.  Participando da camada de visualização, este espaço armazena os templates utilizados para renderização da aplicação, juntamente com a classe Zend_Layout (padrão do ZF). Este diretório deve possuir o mesmo formato do views, descrito a frente. Se vamos utilizar o template layout.phtml em nosso aplicativo, ele deve ser armazenado da seguinte maneira:

    • Diretório modules/: permite ao desenvolvedor agrupar um conjunto de controladores relacionados em um grupo logicamente organizado. A estrutura abaixo deste diretório poderia ser semelhantes a estrutura abaixo do diretório  application/.  Cada módulo deve ser desenvolvido como um aplicativo qualquer, tentando manter o mínimo de dependência entre eles. Ao desenvolver um módulo admin, este deverá receber uma classe de inicialização chamada Admin_Bootstrap, assim como o inicializador do aplicativo descrito a frente. Qualquer classe pertencente a este módulo, deverá possuir o namespace Admin prefixadoEstrutura de Diretórios de modulos.
    • Diretorio views/: a camada de visualização da arquitetura MVC é encontrada no diretório views/. Respeitando esta arquitetura, não se deve desenvolver uma programação além de saída de dados, estruturas de blocos condicionais if-else ou laços de repetição como while for. Os auxiliares da camada de visualização são encontrados no diretório helpers. Já os templates de saída são criados no diretório scripts. Ao criar a controladora de produtos ProdutoController, devemos adicionar o subdiretório scripts/poduto; implementando a ação de listagem de produtos listAction à controladora, vamos incluir o arquivo de visualização scripts/produto/list.phtml. Note que todos os arquivos de saída da camada de visualização devem possuir a extensão phtmlEstrutura de diretorios View.
    • Diretório services/: este diretório é para os arquivos dos web-services da aplicação a ser desenvolvida, ou para implementar um » Service Layer  para seus models.
  • data/: este diretório fornece um lugar para armazenar dados voláteis da aplicação e possivelmente temporários. A perturbação dos dados neste diretório pode fazer com que o aplicativo falhe. Além disso, as informações contidas neste diretório pode ou não estar comprometidas com um repositório de subversão. Exemplos de coisas nesse diretório estão os arquivos de sessão, arquivos de cache, bancos de dados sqlite, logs, arquivos de uploads, índices e todas informações não existentes na instalação do aplicativo e que são gerados durante o seu ciclo de vida..
  • Diretório docs/: este directório contém documentação, tanto o gerado como os de autoria própria.
  • Diretório library/: este diretório é para bibliotecas comuns que a aplicação necessita, e deve estar no include_path do PHP. Os desenvolvedores devem colocar o código da biblioteca da aplicação sob este diretório em um espaço exclusivo, seguindo as diretrizes do guia de nomenclatura estabelecidas no » O manual de nomes do PHP, bem como os estabelecidos pela própria Zend. Este diretório pode também incluir o Zend Framework em si; se for o caso, o programador poderia guardá-lo em library/Zend/.
  • Diretório public/: este diretório contém todos os arquivos públicos de sua aplicação. index.php configura e invoca Zend_Application, que por sua vez invoca o arquivo application/Bootstrap.php, resultando em despachar o controlador frontal. A raiz do seu servidor web normalmente seria definido para este diretório.
  • Diretório scripts/: este diretório contém scripts de manutenção e/ou de instalação do sistema e banco de dados. Estes scripts podem incluir ações através de linhas de comando, cron, ou “phing build scripts” que não são executadas em tempo de execução, mas são parte do funcionamento correto do aplicativo.
  • Diretório temp/: diretório reservado para os dados transitórios do aplicativo. Estas informações não são normalmente salvos no repositório svn do projeto (deve receber a configuração svn:ignore em serviços de versionamento). Se os dados sob o diretório temp/ forem excluídos, o aplicativo deve ser capaz de continuar sendo executado com uma possível diminuição no desempenho até que os dados sejam mais uma vez restaurados ou recarregados.
  • Diretório tests/: este diretório contém testes de aplicação. Estes poderiam ser escritos à mão, baseados no PHPUnit, Zend_Test ou Selenium-RC, ou com base em alguma outro framework de testes.

6.2) Criar domínio zend.localhost no Apache

a) Copiar o conteúdo do arquivo “default” para o arquivo “zendlocal” (que será criado), o qual abrigará as configurações do novo sítio:
# cp /etc/apache2/sites-available/default /etc/apache2/sites-available/zendlocal

b) Editar o arquivo  /etc/apache2/sites-available/zendlocal . Abaixo um espelho do arquivo zendlocal após a sua edição de apontamentos para o novo sitio zend.localhost a ser criado:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName zend.localhost
DocumentRoot /home/usuario/helloworld/public

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

<Directory /home/usuario/helloworld/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"

<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>

Observe que com a declaração “AllowOverride All” já estamos preparando o Apache para funcionar com o seu módulo de reescrita.

c) Habilitar o site zend.localhost:
# a2ensite zendlocal

d) Reiniciar o apache com o comando:

# /etc/init.d/apache2 reload

c) Editar o arquivo /etc/hosts caso o navegador esteja sendo executado na própria máquina onde está instalado o Apache. Neste caso, deve ser adicionando a seguinte entrada ao arquivo:

127.0.0.1 zend.localhost

6.3) Testar o funcionamento: com um navegador, constatar o funcionamento do Apache com o ZendFramework conforme nossos dois exemplos abaixo:

a) Digitar na barra de endereços http://zend.localhost

Resultado: uma página em branco deverá ser mostrada.

b) Criar um arquivo chamado /home/usuario/helloworld/public/index.html com um conteúdo simples para teste, tal como este a seguir:
<html>
<title>Testando Zend</title>
<h1>Oi, testando o Zend</h1>
</html>

Ao digital novamente na barra de endereços do navegador http://zend.localhost, será mostrada uma página com o conteúdo “Oi, testando o Zend” .

6.4) Disponibilizar as bibliotecas do Zend

Copiar a pasta Zend(aproximadamente 23MB), que se encontra dentro de /opt/ZendFramework-1.11.11/library/ para a pasta helloworld/library:

usuario@002755:~/helloworld/library$ cp -R /opt/ZendFramework-1.11.11/library/Zend/ .

A estrutura ficará parecida com esta:
. (/helloworld/library)
`– Zend
|– Acl
|– Amf
|– Application
|– Auth
|– Barcode
|– Cache
|– Captcha
|– Cloud
|– CodeGenerator
|– Config
|– Console
|– Controller
|– Crypt
|– Currency
|– Date
|– Db
|– Debug.php
|– Dojo
|– Dom
|– Feed
|– File
|– Filter
|– Form
|– Gdata
|– Http
|– InfoCard
|– Json
|– Layout
|– Ldap
|– Loader
|– Locale
|– Log
|– Mail
|– Markup
|– Measure
|– Memory
|– Mime
|– Navigation
|– Oauth
|– OpenId
|– Paginator
|– Pdf
|– ProgressBar
|– Queue
|– Reflection
|– Rest
|– Search
|– Serializer
|– Server
|– Service
|– Session
|– Soap
|– Tag
|– Test
|– Text
|– TimeSync
|– Tool
|– Translate
|– Uri
|– Validate
|– View
|– Wildfire
`– XmlRpc

6.5) Testes finais após a disponibilização da biblioteca Zend

a) Usando um navegador, acesse o endereço http://zend.localhost, a tela abaixo de boas vindas do ZendFramework será mostrada.

Tela Boas Vindas do Zend

b) Verificar o Roteamento

Para verificar se o roteamento de páginas está funcionando, visite com um navegador um endereço qualquer, interno ao projeto. Vamos visitar uma página inválida do projeto,tal como:
http://zend.localhost/exemplo.html

O roteamento estará funcionando se a página visualizada for um aviso de “An error occurred, page not found”. Caso contrário, o roteamento do projeto não está funcionando, como é caso de se ter no navegador um erro de página não encontrada gerada pelo próprio servidor Web (“Not Found The requested URL was not found on this server“).

7.Mensagem final
Para se ter um ambiente completo para desenvolvimento de aplicações, ainda falta realizar outros procedimentos. Como por exemplo, instalar banco de dados (MySQL, Postgres, …) e criar e configurar o arquivo .htaccess. Mas isto ficará para um outro post. O importante neste momento é que o ZendFramework teve sua instalação e configuração básica realizada com sucesso.

Referências:
1- Guia de Referência do programador ZendFramework
2- Instalar e configurar o ZendFramework
3- Installing Zend Framework under a Debian Linux
4- ZendFramework
5- Introdução ao Zend Framework
6- Instalar servidor LAMP (Linux + Apache + PHP + MySQL) no Debian
7- Instalar e configurar Módulos do Apache2 no Debian
8- Entendendo a Zend Framework

Pommo, “pos modern mass mailer”, com uma sigla não-muito-bem casada, é um poderoso programa de envio de mails em massa, baseado em servidor web e firmemente enraizada em uma base Linux + Apache + MySQL + PHP base (LAMP): PHP (4.3.2 ou superior) e MySQL 4.1.11 (ou superior) . POMMO foi desenvolvido com o usuário final em mente, o que é demonstrado pela sua rápida instalação baseada na Web (é possível instalar e configurar tudo em menos de 15 minutos), pela sua maneira simples e poderosa de criar e enviar mailings, e pela a sua utilização intuitiva. POMMO está internacionalizado para várias linguas, incluindo Português, Espanhol, Francês Inglês e Italiano.

Enfim, um aplicativo interessante em licenciamento GPL para gerenciar listas de assinantes e envio de emails em massa para um site ou blog.

Como instalar?

  • Primeiro, certifique-se de estar instalado e funcionando o Apache, PHP e MySQL em seu servidor;
  • Faça o download da versão mais recente do Pommo: o arquivo tem um nome semelhante a “poMMo-aardvarkPR16.1.tar.gz”;
  • Extraia os arquivos do pacote baixado no seu computador: $tar -xvf poMMo-aardvarkPR16.1.tar.gz ;
  • Transfira toda a estrutura de arquivos do Pommo para a pasta que será acessada pelo Apache:
  • /var/www# cp -a /home/nome_usuario/download/pommo/ . ; para fazer a cópia recursiva de diretórios mantendo os atributos dos arquivos. Neste caso, a pasta raiz do pommo será /var/www/pommo

    Caso seja uma cópia entre máquinas diferentes (que estejam dentro de uma mesma rede), utilize o comando “scp” para fazer esta cópia. Caso a outra máquina esteja em outra rede, utilize um aplicativo de transferência de arquivos como o “gftp”, utilizando protocolo ftp ou ssh.

  • Ajuste as informações do proprietário e permissões dos arquivos. Utilizando o terminal:
  • /var/www# chmod 750 pommo
    /var/www# chown -R www-data:www-data pommo

  • Vá até o seu gerenciador MySQL e crie um banco de dados para o Pommo. Utilizando o terminal:
  • #mysql -u usuario_admin_mysql -p ; para se autenticar no MySQL
    mysql> show databases; para visualizar as bases de dados existentes
    mysql> CREATE database pommo; para criar base dados necessário ao funcionamento Pommo
    mysql> quit; para sair do MySQL

  • Abra o arquivo /var/www/pommo/config.sample.php, coloque as informações relacionadas ao seu servidor e site. Em seguida salve o arquivo como config.php. Um arquivo config.php simples pode ser assim:
  • <?php die();
    ?>
    [db_hostname] = “localhost”
    [db_username] = “root”
    [db_password] = “senha_admin_bd”
    [db_database] = “pommo”
    [db_prefix] = “pommo_”

    [lang] = pt-br

    [debug] = off
    [verbosity] = 3
    [date_format] = 3

    ** [baseURL] = “/mysite/newsletter/”
    ** [workDir] = “/path/to/pommoCache”
    [hostname] = pommo.meusite.org
    ** [hostport] = 8080

  • Acerte o Apache, dando autoridade para o novo site no servidor. Isto pode ser feito de algumas maneiras diferentes, onde uma das possibilidades é pela configuração do novo site através do arquivo /etc/apache2/httpd.conf:
  • <VirtualHost *:80>
    ServerName pommo.meusite.org
    DocumentRoot /var/www/pommo
    DirectoryIndex /index.php
    ErrorDocument 404 /documentoerro404.html
    </VirtualHost>

  • Se o Apache estiver na mesma máquina do Pommo:

    /etc/init.d/apache2 restart ; para reiniciar o apache

  • Agora utilize o seu navegador para ir até o local onde o Pommo foi instalado (por exemplo,  http://pommo.meusite.org) e siga as instruções que faltam para a instalação.
  • Endereços importantes:
    1. atualizar seus dados ou cancelar sua assinatura: http://meusite/pommo/user/login.php
    2. para inscrever-se na lista: http://meusite/pommo/user/subscribe.php

    Bom uso!

    Mais informações:
    1- Manual de instalação do Pommo
    2- Características do Pommo
    3- Gerenciar lista de assinantes com o Pommo
    4- Pommo mailing list e newsletter

    1. Manual de comandos do Apache2

    Uma lista dos comandos disponíveis do Apache podem ser vistos a partir do seu manual, com o uso de um terminal:

    # man apache2

    Outra fonte de informação de excelente qualidade é o README do Apache para o Debian que é encontrado de forma compactada em /usr/share/doc/apache2.2-common/README.Debian.gz . Baixe o arquivo, descompacte-o ($ gunzip README.Debian.gz) e boa leitura.

    Também é muito prático instalar a documentação completa do Apache na máquina local. Para isto, utilize o Synaptic ou o comando através do terminal:

    # apt-get install apache2-doc

    O arquivo da documentação será colocado em /usr/share/doc/apache2-doc/manual/index.html, e o acesso ao mesmo pode ser feito através do navegador na URL http://localhost/manual/ .

    2. Da situação inicial quando da instalação do sistema operacional
    Quando da instalação do Debian, para Desktop ou Laptop (isto é, versão não server), referente ao Apache a situação é a seguinte:

    O único pacote instalado neste momento é o “apache2.2-bin”, o qual contém os arquivos binários comuns do servidor Apache HTTP. Ou seja, contém todos os binários sem os arquivos de configuração ou scripts de suporte. Para ter um servidor autônomo, é necessário instalar um dos pacotes apache2-mpm-*, tais como worker ou prefork.

    Também estão criados um conjunto de diretórios e instalados alguns arquivos:
    /usr/lib/apache2/modules/
    /usr/share/doc/apache2.2-bin/
    /etc/apache2/sites-enabled/

    OBS: não estão criados ainda os seguintes diretórios:
    /var/www/html
    /var/log/apache2/

    3. Instalar o Apache 2 e o PHP 5

    #apt-get install apache2 apache2-utils libapache2-mod-php5 php5

    Onde:

    • apache2-utils contém diversos utilitários de gerenciamento, tais como:
      • ab (Ferramenta de avaliação de desempenho – “benchmark” – do Apache);
      •  logresolve (resolve endereços IP para nomes de máquina nos arquivos de  log);
      • htpasswd (manipula arquivos de autenticação “basic”);
      • htdigest (manipula arquivos de autenticação “digest”);
      • rotatelogs (periodicamente para de escrever em um arquivo de log e abre um novo); e outras.
    • libapache2-mod-php5: módulo PHP para executar o interpretador PHP como módulo embutido Apache. Para detalhes, ver o post Módulos do Apache PHP, suPHP, suexec e rewrite no Linux – Debian
    • no Debian, ao contrário do CenTOS (por exemplo), o servidor de páginas já fica configurado no momento de sua instalação para ser iniciado desde o instante do boot da máquina.
    • onde foram instalados os arquivos Apache? ……Para responder a esta questão use os dois comandos a seguir:

    # updatedb
    # locate apache2

    O retorno do comando deve ser uma lista de diretorios, entre outros algo como:
    /etc/apache2
    /etc/apache2/apache2.conf

    /etc/apache2/mods-enabled
    /etc/apache2/mods-available
    /etc/apache2/mods-available/suexec.load
    /etc/apache2/sites-enabled
    /etc/apache2/sites-available
    /etc/apache2/sites-available/default
    /etc/init.d/apache2
    /etc/php5/apache2
    /usr/lib/apache2/mpm-prefork
    /usr/lib/apache2/mpm-worker
    /usr/lib/apache2/modules/mod_rewrite.so
    /usr/lib/apache2/modules/mod_suexec.so
    /usr/sbin/apache2
    /usr/sbin/apache2ctl
    /usr/share/apache2/error/HTTP_FORBIDDEN.html.var
    /usr/share/apache2/icons/a.png
    /var/log/apache2/access.log
    /var/log/apache2/error.log

    Onde:
    * /usr/sbin/apache2 é o diretório do binário principal do apache;
    * /usr/lib/apache2 é a biblioteca do apache2;
    * /usr/share/apache2 são os objetos padrões do apache.
    * /etc/apache2/httpd.conf é um dos arquivos de configuração do Apache.

    4. Da situação após o comando de instalação do Apache
    a) Agora os pacotes instalados são 5 (cinco):

    apache2 metapacote Servidor Apache HTTP
    apache2-mpm-prefork Servidor Apache HTTP – modelo tradicional sem “threads”
    apache2-utils programas utilitários para servidores web
    apache2.2-bin arquivos binários comuns do servidor Apache HTTP
    apache2.2-common arquivos comuns do Servidor Apache HTTP

    b) Passaram a existir os seguintes diretórios e arquivos:

    drwxr-xr-x 2 root root /var/www
    -rw-r--r-- 1 root root /var/www/index.html
    drwxr-x--- 2 root adm /var/log/apache2
    -rw-r----- 1 root adm /var/log/apache2/access.log
    -rw-r----- 1 root adm /var/log/apache2/error.log
    -rw-r--r-- 1 root root /var/log/apache2/other_vhosts_access.log
    -rw-r--r-- 1 root root /etc/apache2/apache2.conf
    drwxr-xr-x 2 root root /etc/apache2/conf.d
    -rw-r--r-- 1 root root /etc/apache2/envvars
    -rw-r--r-- 1 root root /etc/apache2/httpd.conf
    -rw-r--r-- 1 root root /etc/apache2/magic
    drwxr-xr-x 2 root root /etc/apache2/mods-available
    drwxr-xr-x 2 root root /etc/apache2/mods-enabled
    -rw-r--r-- 1 root root /etc/apache2/ports.conf
    drwxr-xr-x 2 root root /etc/apache2/sites-available
    drwxr-xr-x 2 root root /etc/apache2/sites-enabled

    c) Observa-se neste instante, finalmente, que o servidor Apache já está ativo e pronto para receber requisições. Isto pode ser verificado assim (onde veremos 6 instâncias ativas do servidor Apache):

    # ps -A | grep apache2

    7561 ? 00:00:00 apache2
    7706 ? 00:00:00 apache2
    7707 ? 00:00:00 apache2
    7708 ? 00:00:00 apache2
    7709 ? 00:00:00 apache2
    7710 ? 00:00:00 apache2

    5. Testar se tudo fora instalado corretamente
    Algumas verificações podem (e devem) ser feitas:

    a) no Debian o serviço se chama “apache2” (diferentemente do CenTOS, onde o serviço se chama “httpd”). Verifique se o serviço está ativo, conforme anteriormente já descrito:

    # ps -A | grep apache2

    b) faça o primeiro acesso ao servidor Apache utilizando um navegador (browser) a partir da própria máquina em que houve a instalação. Acesse o endereço http://localhost/, e uma página surgirá:

    Tela inicial do Apache

    Tela inicial do Apache

    c) crie o arquivo /var/www/html/index.php com o seguinte conteúdo:

    <?php
    phpinfo();
    ?>

    Reinicie o Apache:

    # /etc/init.d/apache2 restart

    Agora acesse o endereço http://localhost/index.php . Se as informações de configuração do PHP aparecerem, isto significará que o Apache e o interpretador PHP foram instalados corretamente e estão funcionando.

    6. Instalar o MySQL
    Neste post abordaremos rapidamente este assunto. Para maiores detalhes sobre a instalação e demais configurações/procedimentos (aspectos de segurança, por exemplo), consultar o post Tutorial MySQL.
    Basicamente, duas instalações devem ser realizadas: o do servidor de banco de dados MySQL e o do módulo PHP para conectar ao servidor MySQL. O comando necessário de instalação para deixar funcionando o PHP junto com o banco de dados MySQL é o seguinte:

    # apt-get install mysql-server php5-mysql

    Quando da instalação, será solicitado uma senha para o usuário “root” ter acesso ao mysql. Naquele instante, crie uma senha. Para ter acesso ao banco do MySQL, utilize o seguinte comando:

    $ mysql -u root -p

    Quando da tentativa deste acesso ao banco, será solicitado a senha do usuário “root” de acesso ao banco. Forneça a senha, conforme procedeu no momento anterior.

    Se preferir trocar a senha do usuário “root” do MySQL, proceda da seguinte forma:

    #mysqladmin -u root seu_password

    Reinicie o Apache para que o serviço rode direitinho (Apache + PHP5, junto com o MySQL):

    #/etc/init.d/apache2 restart

    7. Instalar o phpMyAdmin
    É opcional, não obrigatório. Mas facilita a administração do MySQL foenecendo uma interface gráfica. É uma das melhores ferramentas para este fim:

    # apt-get install phpmyadmin

    Informações adicionais importantes:

    a) usuário/senha default do phpMyadmin: root/<senha informada na instalação>
    b) documentação do phpMyadmin:  /usr/share/doc/phpmyadmin
    c) para ter uma base de dados instalada e configurada:  dbconfig-common

    Veja também:
    1- Instalar e configurar Módulos do Apache2 no Debian
    2- Configurar domínios virtuais do Apache em máquina Linux/Debian
    3- Básico do Apache no Debian
    4- Configurar um servidor LAMP
    5- Tutorial MySQL ( instalar em ambiente Linux – Debian )