Windows Azure IaaS: Actualizar PHP y MySQL en CentOS 6.5

centos
Uno de los escenarios que nos podemos encontrar trabajando con la imagen de CentOS 6.5 es que necesitemos actualizar las versiones de PHP y MySQL. Lo cierto es que hace mucho tiempo que no toco Linux, pero voy a intentar hacerlo lo mejor posible :)

Creamos una máquina virtual con esta imagen y nos conectamos a ella a través de SSH (con Putty.exe por ejemplo). He intentado simplificar los comando a utilizar y queda de la siguiente manera:

sudo rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
sudo yum install httpd mysql mysql-server php55w 
sudo service httpd start
sudo chkconfig httpd on
sudo chkconfig mysqld on

Lo primero que hacemos es añadir los repositorios para recuperar los paquetes de PHP y de MySQL. Para el primero de ellos, después de mucho buscar, voy a utilizar Webtatic y para MySQL dev.mysql.com. Acto seguido, a través del comando yum, instalo todos los paquetes necesarios (httpd para Apache, mysql, mysql-server y php5w). Este proceso puede tardar unos segundos/minutos. Si la instalación ha finalizado con éxito, podemos arrancar nuestro servidor web y configurar tanto el mismo como MySQL para que se inicien de manera automática cuando se arranque el sistema (chkconfig).

Si queremos comprobar que todo ha funcionado correctamente, podemos crear una página de prueba para verificar la información de PHP:

sudo vi /var/www/html/test.php

y añadir algo como esto:

<?php

phpinfo();

?>

Para recuperar la versión de MySQL, desde la consola, podemos lanzar el siguiente comando:

mysql -V

Una vez que hemos comprobado que ambas actualizaciones funcionan correctamente, podemos hacer una captura de la imagen y utilizarla como plantilla para nuestras máquinas virtuales.

Hay que tener en cuenta que esta parte del trabajo con IaaS cae del lado del cliente, es decir que las actualizaciones, repositorios utilizados (la fiabilidad de los mismos), etcétera es algo de lo que el administrador de las máquinas debe responsabilizarse.

¡Saludos!

Fast CGI Web Role y Windows Azure SDK 1.3

En esta última versión del SDK hemos podido encontrar ciertos problemas con las aplicaciones de tipo Fast CGI, como por ejemplo esto:

Este error es debido a que, al crear una nueva aplicación con la nueva plantilla proporcionada por el SDK e intentar configurarla para Full IIS, no es capaz de encontrar el runtime de php y por lo tanto lanza una excepción, lo cual significa que por el momento las aplicaciones de tipo Fast CGI no soportan Full IIS :(

Para solventar este escenario únicamente debemos comentar el elemento Sites del archivo ServiceDefinition.csdef

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="PHPWindowsAzure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebCgiRole_PHP" enableNativeCodeExecution="true">
    <!--<Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>-->
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
  </WebRole>
</ServiceDefinition>

Si ejecutamos de nuevo la aplicación, la misma arranca sin problemas :)

¡Saludos!

Windows Azure Companion

Una de las ventajas más importantes de la plataforma Windows Azure es que no sólo nos permite ejecutar nuestras aplicaciones web en .NET en la nube sino que además podemos desplegar cualquier aplicación web en cualquier lenguaje :D

En este post voy a centrarme en todos aquellos CMS por excelencia implementados en PHP: Drupal, Joomla y WordPress. Si bien podemos adaptarlos de forma manual utilizando el Web role de FastCGI, me gustaría mostraros una forma mucho más sencilla y con un entorno de administración muy útil gracias a Windows Azure Companion :)

¿Qué es Windows Azure Companion?

WAC se trata en realidad de una solución cloud debidamente preparada para la instalación y ejecución de aplicaciones PHP.

Como podemos ver en la imagen, el modo de proceder es bastante simple:

  1. Descargamos el paquete y el archivo de configuración de Windows Azure Companion.
  2. Establecemos los valores de configuración.
  3. Desplegamos el paquete.
  4. Elegimos las aplicaciones que queremos instalar.

Descarga de los paquetes de Windows Azure Companion

Actualmente, con la última release del mes de diciembre, tenemos varios tipos de descargas:

Tanto el primero como el segundo se tratan de los paquetes de despliegue con la única diferencia de que el segundo de ellos tiene configurados los endpoints necesarios para HTTPS. Por otro lado, ambos están pensados para ser ejecutados en una máquina virtual small.

Si necesitáramos cambiar algo más específico o simplemente modificar el tamaño de la máquina virtual por uno mayor, disponemos de un tercer paquete que contiene el código fuente.

En este post vamos a descargar el primero de ellos.

Configuración

Para poder hacer uso de esta aplicación, es necesario tanto un Hosted Service como una Storage Account, además de una o varias bases de datos, dependiendo del número de CMS que queramos instalar. 

Abrimos el archivo ServiceConfiguration.cscfg el cual muestra el siguiente aspecto:

<?xml version="1.0" encoding="utf-8"?>
<!--
  **********************************************************************************************

  This file was generated by a tool from the project file: ServiceConfiguration.cscfg

  Changes to this file may cause incorrect behavior and will be lost if the file is regenerated.

  **********************************************************************************************
-->
<ServiceConfiguration serviceName="WindowsAzureCompanion" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
  <Role name="AdminWebSite">
    <!-- Do not increase the instance count. Windows Azure Companion does not support more than 1 instances -->
    <Instances count="1" />
    <ConfigurationSettings>
      <!-- Application Details. Title and Welcome text -->
      <Setting name="ApplicationTitle" value="Windows Azure Companion" />
      <Setting name="ApplicationDescription" value="&lt;p&gt;The &lt;span class=&quot;textlink&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/windowsazure/windowsazure&quot;&gt;Windows Azure platform&lt;/a&gt;&lt;/span&gt; is a cloud platform that allows applications to &#xD;&#xA;      be hosted and run at Microsoft datacenters. It provides a cloud operating system called Windows Azure that serves as the &#xD;&#xA;      runtime for the applications and provides a set of services that allow development, management and hosting of applications.&lt;/p&gt;&#xD;&#xA;      &#xD;&#xA;      &lt;p&gt;With its standards-based and interoperable approach, the Windows Azure platform supports multiple Internet protocols including &#xD;&#xA;      HTTP, XML, SOAP and REST. As an open platform, the Windows Azure platform allows developers to use multiples languages &#xD;&#xA;      (.NET, Java, and PHP &amp; other dynamic languages ) to build applications which run on Windows Azure and/or consume any of the &#xD;&#xA;      Windows Azure platform offerings.&lt;/p&gt;&#xD;&#xA;      &#xD;&#xA;      &lt;p&gt;The Windows Azure Companion aims to provide a seamless experience for deploying platform-level components as well as applications &#xD;&#xA;      on to Windows Azure. The first community preview of the Windows Azure Companion has been tested with PHP runtimes, frameworks, &#xD;&#xA;      and applications. However, the system may be extended to be used for deploying any component or application that has been tested &#xD;&#xA;      to run on Windows Azure.&lt;/p&gt;" />
      <!-- Windows Azure Storage Account Details. -->
      <Setting name="WindowsAzureStorageAccountName" value="ACCOUNT NAME" />
      <Setting name="WindowsAzureStorageAccountKey" value="PRIMARY ACCESS KEY" />
      <!-- Admin user name, password and e-mail. Please user strong username and password -->
      <Setting name="AdminUserName" value="USERNAME" />
      <Setting name="AdminPassword" value="PASSWORD" />
      <!-- Atom Feed for Product items to be installed. This URL should be internet addressable -->
      <Setting name="ProductListXmlFeed" value="http://wazstorage.blob.core.windows.net/azurecompanion/default/WindowsAzureCompanionFeed.xml" />
      <!-- Settings for Windows Azure Drive used for durability -->
      <Setting name="PHPApplicationsBackupContainerName" value="companionv2" />
      <Setting name="InstallationStatusConfigFileBlob" value="status.xml" />
      <Setting name="ProgressInformationFileBlob" value="progress.xml" />
      <Setting name="XDrivePageBlobName" value="backup.vhd" />
      <Setting name="XDriveSizeInMB" value="2000" />
      <!-- Max value is defined as 500 in ServiceDefinition.csdef file (XDriveLocalCache Local Resource) -->
      <!-- Windows Azure Drive size is defined in ServiceDefinition.csdef. Look for ApplicationsAndRuntimeResource -->
      <Setting name="XDriveCacheSizeInMB" value="500" />
      <!-- Diagnostics and Performance Counter Capture Frequency in minutes -->
      <Setting name="DiagnosticsAndPerformanceCounterCaptureFrequencyInMinutes" value="1" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

Los valores obligatorios que debemos modificar son:

  • Windows Azure Storage Account Name: Podemos localizar este nombre en las propiedades de la storage account que vayamos a utilizar.

  • Windows Azure Storage Account Key: Se refiere a la clave primaria de la cuenta de storage, también en las propiedades en el portal.
  • AdminUserName y AdminPassword para el acceso a la parte de administración.
  • ProductListXMLFeed: Se trata de un XML donde están registrados todos los repositorios que tenemos disponibles para instalarlos a través de la plataforma. Por defecto he dejado indicado el propio del autor pero podemos añadir uno propio.

Despliegue

Para el despliegue, basta con acceder a través del portal de Windows Azure y crear un nuevo deployment en uno de los dos entornos del Hosted Service.

Una vez iniciado el servicio ¡Ya podemos comenzar a instalar CMS :D!

 

Instalación de aplicaciones

Gracias a la nueva característica FullIIS anunciada en el PDC 2010, esta aplicación está configurada poder generar diferentes sitios dentro del mismo role. 

Para poder instalar los CMS,  debemos acceder a nuestra URL a través del puerto 8080, el cual ha sido establecido para las labores de administración. Por ejemplo:

http://serviceName.cloudapp.net:8080

Nos logamos con las credenciales establecidas en el archivo ServiceConfiguration.cscfg para poder acceder a los apartados Platform y Applications.

Espero que sea de utilidad :)

¡Saludos!