Rodando uma aplicação PHP no Azure Websites

Sign in to queue

Description

Criar um site com PHP e MySQL no Azure Web Sites usando Git para deploy

Este tutorial irá mostrar como criar um site utilizando PHP e MySQL e hospedá-lo no Azure Web Sites. Você precisará ter instalado no seu computador o PHP, o MySQl Command-Line Tool e o Git. Estas instruções podem ser seguidas em um computador rodando Windows, Mac ou Linux. Com este tutorial você irá aprender:

  • Hospedar um site PHP no azure websites usando o banco de dados.
  • Fazer deploy de um site no Azure Web Sites utilizando git

Ao concluir o tutorial você terá a seguinte página hospedada no Azure WebSites:

Generic Episode Image

Criar um site no Azure e configurar o repositório git para publicação

  1. Entre no portal de gerenciamento do Azure.
  2. Na página de "Sites", clique no link "Novo", localizado no canto inferior esquerdo da página.

Generic Episode Image

3. Clique na opção "Criação Personalizada".

Generic Episode Image

 

4. Escreva o nome do seu site, defina a região como Sul do Brasil e assinale que quer criar um novo banco de dados MySQL. Na opção "Cadeia de conexão de DB" coloque o nome da variável de ambiente segura que armazenará a string para conexão com o banco. Não se esqueça de selecionar "Publicar no controle de origem" para que o Azure já disponibilize um repositório git para o seu site. 

 

Generic Episode Image

 

5. Digite o nome do banco de dados que irá ser criado para o seu site.

Generic Episode Image

6. Selecione a opção "Repositório Git local".

Generic Episode Image

7. Defina um usuário e senha para pode acessar o repositório git. 

Generic Episode Image

Desenvolvimento local do site PHP

Este guia pressupõe que você tenha instalados e configurados no seu computador o PHP 5.4 ou mais recente e o MySQL (ou MariaDB) com a extensão PDO habilitada.

Para maior segurança e flexibilidade é importante que seu site rode em um ambiente local isolado durante o desenvolvimento. Assim você poderá ter confiança em implementar funcionalidades e corrigir bugs com baixo perigo de acidentalmente publicar algo que ainda não está pronto. Todo o desenvolvimento afetará somente o ambiente local e só irá ser publicado no servidor quando você explicitamente ordenar.

Em um terminal de linha de comando, siga os próximos passos para criar o nosso banco local usado apenas para desenvolvimento:

1. Conectar-se com o servidor MySQL local

mysql -h localhost -u <seu_usuario_local> -p

2. Criar o banco de dados para o site:

CREATE DATABASE livro_de_assinaturas;

USE livro_de_assinaturas;

3. Criar a tabela que a aplicação usará:

CREATE TABLE assinaturas(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), nome VARCHAR(100), data DATE);

Após isto crie uma pasta com o nome da sua aplicação, em um local de fácil acesso, e dentro dela crie os seguinte arquivos:

Index.php

<html>
  <head>
    <Title>Lista de assinaturas</Title>
    <style type="text/css">
      body { background-color: #fff; border-top: solid 10px #000;
           color: #333; font-size: .85em; margin: 20; padding: 20;
           font-family: "Segoe UI", Verdana, Helvetica, Sans-Serif;
      }
      h1, h2, h3,{ color: #000; margin-bottom: 0; padding-bottom: 0; }
      h1 { font-size: 2em; }
      h2 { font-size: 1.75em; }
      h3 { font-size: 1.2em; }
      table { margin-top: 0.75em; }
      th { font-size: 1.2em; text-align: left; border: none; padding-left: 0; }
      td { padding: 0.25em 2em 0.25em 0em; border: 0 none; }
    </style>
  </head>
  <body>
    <h1>Lista de assinaturas</h1>
    <p>Escreva seu nome e depois clique em <strong>Assinar</strong>.</p>
    <form method="post" action="index.php" enctype="multipart/form-data" >
      Nome  <input type="text" name="nome" id="nome"/>
      </br>
    <input type="submit" name="assinar" value="Assinar" />
    </form>
    <?php
      //Carrega configurações de acesso ao banco de dados
      require_once("config.php");

      //Configurando encoding
      header('Content-Type: text/html; charset=utf-8');

      date_default_timezone_set('America/Sao_Paulo');

      //Conecta ao banco de dados
      try {
        $conn = new PDO( "mysql:host=$DB_HOST;dbname=$DB_DATABASE", $DB_USER, $DB_PASSWORD);
        $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
      }
      catch(Exception $e){
        die(var_dump($e));
      }

      //Insere assinatura no banco de dados
      if(!empty($_POST)) {
        try {
          $nome = $_POST['nome'];
          $data = date("Y-m-d");
           
          $sql_insert = "INSERT INTO assinaturas (nome, data) 
                   VALUES (:nome, :data)";
          $stmt = $conn->prepare($sql_insert);
          $stmt->execute(array(':nome' => $nome, ':data' => $data));
        }
        catch(Exception $e) {
          die(var_dump($e));
        }

        echo "<h3>Você assinou a lista!</h3>";
      }

      //Lê assinaturas salvas no banco de dados
      $stmt = $conn->query('SELECT * FROM assinaturas');
      $assinaturas = $stmt->fetchAll(); 

      if(count($assinaturas)) {
        echo "<h2>Pessoas que assinaram a lista:</h2>";
        echo "<table>";
        echo "<tr><th>Nome</th>";
        echo "<th>Data</th></tr>";

        foreach($assinaturas as $assinatura) {
          echo "<tr><td>".$assinatura['nome']."</td>";
          echo "<td>".$assinatura['data']."</td></tr>";
        }

        echo "</table>";
      } else {
        echo "<h3>Ainda não há nenhuma assinatura na lista :(</h3>";
      }
    ?>
  </body>
</html>

 

config.php

Este arquivo contém as configurações de acesso ao banco de dados. Troque a "<variável_ambiente>" para o nome da connections string configurada ao criar o site; mude a conexão local de acordo com o usuário e senha do seu servidor localhost.

<?php
//Procura pela variável de ambiente com a connectionstring. Caso não encontra,
//assume que está rodando em um ambiente de desenvolvimento e define a
//connectionstring do ambiente local
$CONNECTION_STRING = getenv("MYSQLCONNSTR_<varivel_ambiente>");
if (!$CONNECTION_STRING) {
    $CONNECTION_STRING = "Data Source=devhost.com;Database=livro_de_assinaturas;User Id=<usuario_local>;Password=<senha_do_usuario_local>";
}

// Esta função obtém um parâmetro de uma connectionstring
function get_parameter($parameter_name, $connection_string) {
    preg_match_all("/$parameter_name=(.*?)(;|$)/s", $connection_string, $matches);
    return $matches[1][0];
}

$DB_USER = get_parameter("User Id", $CONNECTION_STRING);
$DB_HOST = get_parameter("Data Source", $CONNECTION_STRING);
$DB_PASSWORD = get_parameter("Password", $CONNECTION_STRING);
$DB_DATABASE = get_parameter("Database", $CONNECTION_STRING);
?>

Com os arquivos criados, use o git para fazer um commit (salvar) das alterações:

git add *.php
git commit -m "Primeira versão do site"

Desde a versão 5.4 o PHP vem com um servidor local de testes muito fácil de usar. Para testar nossa aplicação, em um terminal de linha de comando navegue até a pasta anteriormente criada e execute:

php -S localhost:8097

Agora o site está acessível na url http://localhost:8097

 

Publicar o site no Azure Web Sites

Navegue até o Portal do Azure. Seu site será listado na sessão de "Web Sites".

Generic Episode Image

Clique sobre o nome do seu site e então na opção "Exibir implantações".

Generic Episode Image

 

Copie a url do GIT

Generic Episode Image

Clique na guia "Configurar". Na sessão "cadeias de conexão" clique na opção "Mostrar Cadeias de Conexão".

Generic Episode Image

Copie o valor da cadeia de conexão.

Generic Episode Image

Em um terminal de linha de comando, na pasta em que estão os arquivos do site. Primeiro conecte-se com o banco de dados do servidor usando os dados de conexão anotados do Portal de Gerenciamento do Azure:

mysql -h <servidor> -D <nome_do_banco> -u <usuario> -p

mysql -h <servidor> -D <nome_do_banco> -u <usuario> -p

Crie a tabela que a aplicação usará:

CREATE TABLE assinaturas (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), nome VARCHAR(100), data DATE);

Saia do prompt MySQL:

exit

 

Adicione o repositório do Azure, para seu projeto, como um novo remote executando os comandos:

git remote add azure <url_do_git_anotada_anteriormente>

Para publicar o site basta usar o git para enviar as alterações realizadas até o último commit:

git push azure master

Pronto! O site está online:

Generic Episode Image

Para ver o histórico de publicações basta navegar até a "Implantações" na página da aplicação no Portal de Gerenciamento do Azure:

Generic Episode Image

Definir a versão do PHP

Por padrão o Azure usa a versão 5.4 do PHP. Para alterar a versão, clique no link "Configurar" na página da aplicação no Portal de Gerenciamento do Azure. Nesta página estarão as versões disponíveis do PHP:

Generic Episode Image

 

Configurar o Azure para escalar a aplicação

O Azure Web Sites oferece opções para escalabilidade (aumentar a quantidade de máquinas servindo a aplicação) de forma simples e transparente. Estas configurações estão na aba "Escala" da página do site no Portal de Gerenciamento do Azure:

Generic Episode Image

As opções são disponibilizadas de acordo com plano Azure utilizado pela aplicação.

No plano "Compartilhado" a sua aplicação ficara em uma máquina virtual compartilhada com outras aplicações, nesta opção é possível escolher o número de instancias que irão prover o site de forma manual.

Generic Episode Image

No plano "Básico", você passa a ter uma máquina virtual completamente dedicada para servir a sua aplicação, nesta opção você pode além de escolher o número de instancias, também é possível escolher o tamanho destas instâncias.

Generic Episode Image

No plano "Padrão", como no básico, você tem uma máquina virtual completamente dedicada para servir a sua aplicação. Neste plano você tem as maiores opções de escalabilidade, onde é possível realizar todas as configurações das opções anteriores e regras para aumentar esta quantidade.

Existem duas regras possíveis de configurar para escalar a aplicação automaticamente:

  • Em datas ou períodos específicos
  • De acordo com as métricas do Azure

 

Para realizar a configuração por datas ou períodos específicos basta clicar no botão "configurar horas agendadas" no painel de administração do Azure.

Generic Episode Image

Nesta nova tela você pode optar por períodos recorrentes ou datas específicas.

Generic Episode Image

Para realizar a configuração por métricas basta escolher uma das métricas disponíveis (hoje a única métrica disponível é CPU) e então definir os valores máximo e mínimo de instâncias que o Azure deve utilizar e pôr fim a porcentagem mínima e máxima que o consumo da CPU deve trabalhar.

Nesta opção o Azure se auto regula para criar e remover instancias de acordo com as definições da métrica de CPU.

Generic Episode Image

Qualquer configuração que você faça é necessário clicar no botão salvar para que esta entre em vigor.

Generic Episode Image

Ao salvar uma configuração de escalabilidade o Azure irá apresentar uma mensagem apresentando as regras de faturamento e como isso pode afetar sua conta. Você precisa confirmar esta mensagem, para conseguir alterar as configurações de escalabilidade.

 

Tags:

IIS, Interop, PHP, websites

The Discussion

  • User profile image
    Marcelo Cechinel

    É possível hospedar um site que já esta funcionando com apache, e fazer a migração para o Azure utilizando o serviço PaaS?

Add Your 2 Cents