Compartilhar via


PHP no Azure: Criando uma aplicação com MySQL

O objetivo deste artigo é demonstrar como criar uma aplicação PHP no Microsoft Azure, utilizando um banco de dados MySQL também na nuvem. Serão explicados todos os passos necessários para criar e configurar o banco de dados e a aplicação, bem como fazer o deploy da mesma em uma Web App.

Introdução

PHP e MySQL formam um dos conjuntos de linguagem de programação e banco de dados mais utilizados no desenvlvimento de aplicações web, geralmente pelo baixo custo (ambos gratuitos) e facilidade de instalação e utilização.

Criando o banco de dados no Azure

O primeiro passo para a criação do banco de dados MySQL no Azure, assim como outros tipos de banco ou recursos, é ir ao menu New no painel de gerenciamento e na categoria Data + Storage selecionar o item MySQL Database, como ilustra a figura abaixo.

Na próxima guia devemos preencher as configurações iniciais do banco de dados, como nome, assinatura do Azure a ser utilizada, tipo de banco de dados (dedicado ou compartilhado), grupo de recursos e localização (datacenter no qual será criado), como na figura a seguir.

Na propriedade Pricing Tier, deve-se selecionar o plano de recursos e preço que se deseja utilizar. Por padrão a opção selecionada aponta para a configuração Titan, que permite um máximo de 10 conexões e 250MB de armazenamento. Caso se deseje realizar pequenos testes, pode-se utilizar a opção Mercury (figura abaixo), gratuita. Essa configuração, no entanto, suporta apenas 4 conexões ao banco de dados e apenas 20MB de armazenamento.

Caso opte por um banco dedicado, solução mais adequada para cenários em que é fundamental a alta disponibilidade, performance e baixa latência, será necessário criar um cluster do MySQL na guia seguinte. Por se tratar de uma opção mais robusta, os preços também são consideravelmente superiores às opções de banco compartilhado. Para este artigo utilizaremos a opção compartilhada, que atende boa parte das situações comuns de uso.

Os bancos MySQL no Azure, por padrão, são fornecidos pelo ClearDB, um provedor de bancos de dados na nuvem cujos serviços podem ser utilizados também no Amazon Web Services. Por isso, o último campo na guia de configurações requer que uma licença de uso desse serviço seja lida e aceita, clicando no botão Purchase na parte inferior.

Após ter preenchido todos campos iniciais necessários, basta clicar em Create e aguardar a criação do banco. Ao fim dessa operação, a guia de gerenciamento do banco será aberta e nela já podemos ver os primeiros dados de uso, informações do plano utilizado, e endereço para conexão (Hostname), como mostra a figura abaixo.

Clicando em Manage Database uma nova página será aberta com as estatísticas de uso, crescimento e performance do banco de dados, dessa vez fornecidas diretamente no painel do ClearDB.

Configurando o banco de dados

Com o banco criado, é preciso acessá-lo através de alguma ferramenta de gerenciamento para que seja possível criar tabelas, registros, etc. Aqui utilizaremos o MySQL Workbench, ferramenta gratuita disponibilizada pela Oracle, a partir da qual pode-se criar diagramas, tabelas, triggers, executar queries, etc.

Para que seja possível estabelecer uma conexão, precisaremos utilizar os dados fornecidos na guia All settings > Properties, como mostra a figura abaixo. Dessa tela precisaremos do Hostname, do Username e do Password.

Agora, no MySQL Workbench, adicionaremos uma nova conexão e preencheremos os campos com os valores que acabamos de obter no painel. Para garantir que os dados estão corretos, podemos clicar em Test connection. Se tudo correr bem, uma mensagem semelhante à figura abaixo será exibida, informando o sucesso da conexão.

Agora podemos acessar o banco de dados e criar uma tabela para testes. Para este exemplo simples utilizaremos o script a seguir, que cria e preenche uma tabela para registro de postagens em um blog, com título e categoria apenas.

CREATE TABLE  Posts
(
    Titulo VARCHAR(100),
    Categoria VARCHAR(20)
);
 
INSERT INTO  Posts VALUES
('Microsoft Azure: Implantação de Web Apps via Git Local', 'Azure'),
('Microsoft Azure: Gerenciando Web Apps com Azure CLI', 'Azure'),
('Novidades do C# 7.0 – Pattern Matching', 'C#'),
('Implementando o uso de logs no ASP.NET Core 1.0', 'ASP.NET')

Criando a aplicação PHP

Para simplificar o processo de estruturação do projeto, trabalharemos aqui com o framework CodeIgniter, que implementa o padrão MVC. No entanto, você pode utilizar qualquer outro framework ou estrutura de projeto, uma vez que o foco aqui é a conexão com o banco de dados.

Para utilizar o CodeIgniter, basta fazer download no site oficial. Será obtido um arquivo compactado contendo uma pasta que deve ser extraída e copiada para o servidor (neste caso, para C:/xampp/htdocs).

Na pasta baixada, localize o arquivo database.php dentro do diretório application/config e nele altere as chaves hostname, username, password e database, atribuindo a elas os mesmos valores utilizados para conectar no MySQL Workbench. O código abaixo mostra um exemplo de como deve ficar esse trecho do arquivo:

'hostname' => 'us-cdbr-azure-west-c.cloudapp.net',
'username' => 'bd43c0aff25bb3',
'password' => '012f726c',
'database' => 'dbtechnet',

Ainda na pasta config, abra o arquivo autoload.pho e na chave libraries do array $autoload adicione o elemento database, da seguinte forma:

$autoload['libraries'] = array('database');

Feito isso, criaremos agora o arquivo PostModel.php dentro da pasta application/models. A classe PostModel conterá apenas um método para listar todas as postagens cadastradas no banco de dados. Seu código pode ser visto abaixo:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
 
class PostModel extends CI_Model
{
    public function  listar_todos()
    {
        $this->db->select('Titulo, Categoria');
        $this->db->from('Posts');
        return $this->db->get()->result();
    }
}

E, seguida, abra o arquivo Welcome.php na pasta application/controllers e altere o método index para carregar a classe model e listar os dados retornados do banco de dados, como no código abaixo:

public function  index()
{
    $this->load->model('PostModel', 'posts');
    $posts = $this->posts->listar_todos();
    $dados['posts'] = $posts;
    echo '<h1>Posts do blog</h1>';
    echo '<table>';
    foreach ($posts  as $p) {
        echo '<tr>';
        echo '<td><strong>'.$p->Titulo.'</strong></td>';
        echo '<td>'.$p->Categoria.'</td>';
        echo '</tr>';
    }
    echo '</table>';
}

Agora já podemos acessar a aplicação no browser (neste caso, no endereço http://localhost:8080/technet) e teremos como resultado a listagem dos registros, como mostra a figura abaixo.

É importante ressaltar que o foco aqui é a conexão com o banco de dados MySQL criado no Azure. Portanto, caso você utilize algum outro framework ou driver de conexão, basta utilizar as informações de hostname, username, password e o nome do database para estabelecer a conexão.

Publicando a aplicação no Azure

Com a aplicação pronta, concluiremos o processo publicando-a como uma Web App no Microsof Azure. Para isso, voltaremos ao portal e no menu New > Web + Mobile > Web App, como ilustra a figura a seguir, criaremos uma nova aplicação.

Na tela seguinte, informe o nome da aplicação (neste exemplo será phpemysql), selecione o grupo de recursos, marque a opção Pin to dashboard e clique em Create. Quando a criação for concluída, já no primeiro painel que será aberto você pode copiar o endereço do FTP (ver figura abaixo) e acessá-lo pelo Windows Explorer ou algum cliente FTP.

Copie então o conteúdo da pasta do projeto PHP para a pasta site/wwwroot no FTP (arquivos de documentação podem ser descartados). É importante observar que o arquivo index.php da aplicação deve ficar na raiz da pasta wwwroot e não dentro de uma segunda pasta.

Após os arquivos serem copiados, já é possível acessar a Web App pelo link disponibilizado no Azure. Na figura acima, esse link aparece com o título URL. Com isso, temos uma aplicação PHP com banco de dados MySQL completamente hospedada no Microsoft Azure, que a partir de agora pode ser editada e evoluída.