Desplegar website en PHP con PHP Tools for Visual Studio 2013 en Microsoft Azure Websites

Si queremos trabajar con PHP en Visual Studio existe una extensión llamada PHP Tools for Visual Studio 2013 (de pago), la cual nos proporciona plantillas para el IDE:

PHP Tools for Visual Studio 2013 templates

De esta forma permitimos que los desarrolladores de PHP puedan beneficiarse del mismo entorno y características que mejoran la experiencia con Microsoft Azure.

Sin embargo, cuando trabajamos con este tipo de proyectos no disponemos del mismo asistente para la subida del la solución al cloud como ocurre con los proyectos en .NET:

Publish PHP Web

Para recuperar los parámetros necesarios para Microsoft Azure Websites basta con acceder al DASHBOARD del sitio y copiarlos del apartado quick glance:

quick glance FTP info

El único valor que no aparece en este apartado es el directorio (Site path) sobre el cual debemos hacer el despliegue para que funcione de manera correcta. Podemos comprobar que el nombre del directorio, si accedemos a través de un cliente FTP, es /site/wwwroot.

Publish PHP Web filled

Por otro lado, debemos asegurarnos que nuestro sitio tiene habilitada la versión de PHP correcta en el apartado CONFIGURE -> General -> PHP Version:

PHP version

Espero que sea de utilidad.

Happy clouding!

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!