Por que eu devo ler este artigo:

As soluções de Cloud Computing, ou Computação nas Nuvens, são hoje acessíveis para os desenvolvedores que buscam um espaço para publicação de suas aplicações. Neste artigo iremos conceituar este cenário e conhecer o OpenShift Express, a plataforma gratuita da Red Hat.

A Computação na Nuvem permite aos indivíduos ou empresas ter acesso a ambientes de hardware de alta disponibilidade e escalabilidade, sem a necessidade de grandes investimentos e pagando somente pelo uso, independentemente das tecnologias adotadas (Java, PHP, Ruby, Python, Perl, entre outras).


Guia do artigo:

É fato que o conceito de Cloud Computing, ou Computação nas Nuvens, é tópico recorrente nas publicações de tecnologia atualmente. A oferta de serviços dessa natureza é cada vez maior, e o acesso a ambientes elásticos e de alta disponibilidade já está ao alcance de todos os desenvolvedores e empresas. Publicar uma aplicação na web hoje é fácil, rápido e barato. Este artigo nos dará um panorama geral desse cenário e, utilizando como exemplo prático a plataforma OpenShift, da Red Hat, nos orientará na publicação completa de uma aplicação Java na web. Bom proveito!

Vivemos um período de várias “novas ordens”, seja no âmbito econômico, social, ambiental e cada vez mais também na área de tecnologia. A vida adquire a cada dia nova dinâmica e maior velocidade, e com ela evoluem os processos e ferramentas.

Um desses novos conceitos tecnológicos que vem ganhando destaque é o chamado Cloud Computing, ou Computação nas Nuvens. Este conceito tem adquirido grande maturidade no mercado e, conforme novas soluções vão surgindo, vai se tornando mais acessível para o desenvolvedor a experimentação e até o uso no dia-a-dia.

É dessas novas possibilidades, e de como elas já estão disponíveis para nós, inclusive gratuitamente, que trataremos neste artigo. Utilizando como exemplo prático a plataforma OpenShift, da Red Hat, faremos a publicação completa de uma aplicação Java na internet e daremos subsídios para que o leitor possa ter a Computação nas Nuvens em seu portfólio de conhecimento para futuros (e atuais) projetos.

Colaboração como revolução

Como sociedade, já vivemos diversas eras, a citar: a Era Agrícola, Industrial, da Informação e, mais recentemente, a era da Colaboração. Nunca antes a informação foi tão abundante e acessível, novas soluções de comunicação e interação surgem a toda hora, propostas ora por grandes players já consolidados no mercado, ora por pequenas empresas e startups. Foi assim que aconteceu com o Facebook, Twitter, FourSquare e tantos outros. Imagine estas três empresas tentando lançar suas aplicações há 15 anos? Quanto investimento em infraestrutura elas precisariam, além de banda de internet; e mesmo as possibilidades relacionadas à usabilidade na web – quais eram as capacidades dos dispositivos móveis daquela época? Não é impossível de imaginar que fatalmente (e muito provavelmente) elas não teriam tido o mesmo êxito.

Vivemos ainda várias outras novas demandas: cada vez mais consumidores têm acesso à rede, seja para comprar produtos, seja para operar serviços online de Internet Banking, Serviços do Governo e, é claro, todos os meios de contato e integração que as empresas vêm buscando para criar novos canais de comunicação com as pessoas. Quantas vezes você acessa um portal de notícias, e logo após ler o conteúdo, você tem a opção de “compartilhar”?

Se a audiência das aplicações cresce na escala dos novos consumidores, como podemos ter ambiente suficiente para atender toda esta (nova) demanda? Cloud Computing pode trazer inúmeros benefícios, principalmente para quem tem uma ideia no papel e quer torná-la em realidade com apenas alguns cliques e comandos, sem gastar muito (ou até nenhum) dinheiro.

Cloud: Uma breve introdução

Definir Cloud é algo delicado, uma vez que você vai achar no Google mais de 50 definições que, além de totalmente válidas, são muitas vezes complementares. Dependendo da perspectiva, Cloud pode ter diferentes nuances: para um Administrador de Infraestrutura com foco em Sistema Operacional, Cloud pode ser uma máquina virtual provida e gerenciada por uma ferramenta de virtualização. Já para um Desenvolvedor de Software, Cloud pode ser também um modelo elástico, que visa dar mais recursos de processamento quando eles forem necessários, e é claro, também menos recursos conforme eles não forem mais tão necessários. Para um Profissional de Negócios, Cloud pode dar uma tranquilidade “não-técnica” resumida em “atender bem e sempre”.

Embora tenhamos coberto algumas perspectivas, vale ressaltar que também existe o conceito de “pagar pelo que se consome” (pay-as-you-go), ou seja, se você tem alto número de usuários, vai precisar de mais recursos (processamento, memória, storage, etc.), logo vai de alguma maneira pagar mais por isso; ao passo que se sua aplicação não consumir tantos recursos, você não vai ocupar tanto o ambiente, logo pagará de alguma forma menos por isto.

Quando falamos desta perspectiva em Cloud, é impossível não associarmos ao fornecimento, por exemplo, de energia elétrica. Em geral, os consumidores não têm a mínima ideia de por onde os cabos passam, quantas linhas a eletricidade atravessou até chegar a seus lares ou mesmo de onde sua energia elétrica vem. Em resumo, querem simplesmente ligar a luz, que isto funcione sempre que for desejado, e que se possa pagar pelo consumido. Os fornecedores de Cloud emulam o mesmo comportamento e, por mais que ocorram falhas, estas devem permanecer escondidas e contornadas, para que o consumidor sempre tenha seus serviços contratados disponíveis de forma transparente.

Modelos de implantação de Cloud

Os modelos de Cloud disponíveis no mercado em maior volume são, em geral:

  • Private Cloud (Nuvem Privada): Geralmente é o primeiro modelo a ser adotado quando as empresas começam suas primeiras iniciativas em Cloud Computing. A fim de maximizar o uso de seus servidores físicos (muitas vezes investimentos já antigos, mas que ainda não se pagaram), as empresas começam a dividi-los em porções lógicas, em outras palavras, em máquinas virtuais sendo gerenciadas por uma ferramenta de virtualização. Estas máquinas podem estar fisicamente na própria empresa, ou ainda podem estar em outro local através de um modelo de co-location – um datacenter garante que algumas máquinas físicas são dedicadas para atender as demandas do contratante, sendo estas máquinas de uso exclusivo de quem as contratou; por sua vez, a empresa que adere a este serviço também pode começar a virtualizar/particionar estas máquinas, para melhor atender a suas demandas;
  • Public Cloud (Nuvem Pública): Esse é o modelo mais comumente disponível no mercado hoje em dia. É o modelo onde o fornecedor de Nuvem Pública dispõe de um ambiente que chamamos de “multi-inquilinos”. Neste tipo de ambiente cada “inquilino” tem uma máquina virtual isolada e protegida, compartilhando uma máquina física com vários outros contratantes. Esta máquina virtual pode ter uma capacidade elástica, podendo aumentar ou reduzir o poder de processamento conforme a demanda através de ferramentas de administração;
  • Hybrid Cloud (Nuvem Híbrida): Quando sua capacidade de Cloud Privada não for suficiente para atender a suas demandas, você pode provisionar seu ambiente conforme a necessidade. Isto significa que você vai combinar o poder da sua Nuvem Privada com uma ou mais Nuvens Públicas, dando-lhe maior elasticidade. Esta possibilidade é interessante não somente em casos de demanda sazonal, mas também por questões de economia ou até maior agilidade. Sempre que necessário, pode contar com esta combinação como uma “carta na manga”, para proporcionar maior capacidade de atendimento do seu ambiente. Quando temos este cenário, podemos dizer então que temos uma Nuvem Híbrida – a composição de uma Nuvem Privada com uma ou mais Nuvens Públicas.

Tipos de ofertas de serviços Cloud

Uma vez que entendemos os modelos de adoção, é importante também definir os tipos de ofertas de serviços que temos disponíveis. Enquanto na Nuvem Privada as ferramentas podem ser definidas conforme as próprias políticas dos clientes, nas Clouds Públicas temos alguns tipos de serviços pré-estabelecidos. Para fazer você entender o que podemos encontrar na prateleira hoje em dia, vamos apresentá-los a seguir:

  • IaaS (Infrastructure as a Service) – Infraestrutura como Serviço: Este é o modelo onde você tem controle total do recurso de máquina virtual que lhe é disponibilizada. Da mesma forma que você tem todo o poder e direito do usuário Administrador (root), você também tem a responsabilidade de instalar tudo que é necessário para atender a sua aplicação – desde o banco de dados, servidor de aplicações, entre outros – e também cuidar de todas as questões e aspectos de segurança. Como exemplo de fornecedores destes serviços de IaaS, podemos citar: Amazon EC2, RackSpace e alguns fornecedores brasileiros;
  • PaaS (Platform as a Service) – Plataforma como Serviço: Quando o fornecedor dispõe de parte dos serviços e softwares que você precisa já instalados e em execução. Se uma vez no modelo IaaS você deveria se preocupar em instalar tudo partindo do zero, no PaaS você tem algumas combinações já pré-construídas, fazendo com que você se preocupe muito mais com o negócio e implementação da sua aplicação propriamente do que com a instalação de um servidor de aplicações, banco de dados e assim por diante. Em resumo, PaaS já lhe oferece o ambiente preparado para você instalar (“deployar”) as aplicações sem grandes preocupações. Entre os fornecedores desta categoria de soluções, podemos citar o Microsoft Azure, Heroku e o OpenShift da Red Hat, que será o PaaS que iremos nos aprofundar neste artigo;
  • SaaS (Software as a Service) – Software como Serviço: Nesta modalidade você não se preocupa nem em instalar seu software, uma vez que o fornecedor já lhe entrega tudo pronto. Toda a questão de bancos de dados, segurança e a própria aplicação é oferecida em um único contrato ou acordo. Neste modelo, ao mesmo tempo em que dispõe de maior comodidade, você recebe também quase nenhum controle além de algumas parametrizações ou customizações, uma vez que você tem que confiar que seu fornecedor irá cuidar bem das informações de seus usuários, seus dados e garantir a disponibilidade da aplicação. Neste modelo temos fornecedores como SalesForce, que oferece um dos CRMs mais utilizados no mercado, e Google, com suas soluções de colaboração como Google Docs e Google Apps.

Se fossemos criar uma pirâmide que simbolizasse o controle que você tem sobre o ambiente em cada uma destas ofertas, teríamos algo semelhante à Figura 1.

Controle que você tem
em cada um dos tipos de serviços de Cloud
Figura 1. Controle que você tem em cada um dos tipos de serviços de Cloud.

Se levarmos em consideração exatamente o fato de você não querer se preocupar com infraestrutura, mas ter a possibilidade da gestão sobre sua aplicação e dados na nuvem, então o modelo SaaS é o que lhe dará essa tranquilidade de forma mais assertiva.

A escolha de um destes modelos de serviço leva em consideração vários fatores, portanto você deve avaliar qual melhor cenário se encaixa na sua empresa e/ou projeto. Neste artigo, vamos nos aprofundar no Red Hat OpenShift, que é um PaaS com suporte ao ambiente de desenvolvimento Java EE 6.0 através do JBoss AS 7. O intuito é que ao final deste artigo você seja capaz de desenvolver suas aplicações e publicá-las para o mundo, através de nuvem!

OpenShift: Breve histórico

Com a aquisição da empresa californiana Makara no ano de 2010 e a contratação de novos funcionários com experiência em cloud computing, a Red Hat acelerou a sua entrada no mercado de PaaS. No evento anual da empresa, realizado em Boston no início de 2011 (o Red Hat Summit), foi lançado oficialmente o OpenShift. De lá para cá, esta plataforma só vem ganhando mais e mais adeptos, usuários e funcionalidades.

Primeiro contato com o OpenShift

Para iniciar, você precisa se registrar no OpenShift através do site http://openshift.redhat.com, acessando a opção Sign In. Caso você já tenha uma conta, basta entrar com o usuário e senha, do contrário, escolha a opção Click here to register. Veja a Figura 2.

Janela de autenticação ou criação de nova conta
Figura 2. Janela de autenticação ou criação de nova conta, em openshift.redhat.com.

Ao registrar-se você receberá, no e-mail informado, todas as informações pertinentes a sua conta, além do link de ativação da mesma. Lembre-se: você não precisa pagar absolutamente nada para isto. As contas no OpenShift até o momento não têm nenhum custo ou mesmo previsão para isto.

Modalidades do OpenShift

O OpenShift tem como objetivo ofertar três modalidades de uso para os consumidores. Destas, duas já estão disponíveis atualmente:

  • OpenShift Express: As aplicações no modelo Express possuem algumas limitações de espaço em disco (atualmente 512Mb) e de recursos de hardware (memória, processamento), uma vez que este é um ambiente multi-inquilino, gratuito, e uma boa convivência entre os ambientes de aplicação deve existir. Entretanto estas limitações não impedem que você crie aplicações ricas, com acesso a bancos de dados como SQLite e até MySQL, ou até faça com que a sua aplicação acesse um banco de dados ou solução NoSQL disponível na internet. A democracia é um fator importante no OpenShift Express, uma vez que várias tecnologias são suportadas, assim como seus frameworks que facilitam o desenvolvimento e uso das mesmas. A seguir explicitamos as linguagens suportadas e alguns de seus frameworks:
  • Java
  • CDI;
  • Seam;
  • Spring;
  • Java EE 6.0.
  • Ruby
  • Rails;
  • Sinatra
  • Python
  • Pylons;
  • Django;
  • TurboGears
  • Perl
  • PerlDancer
  • PHP
  • Zend
  • Cake
  • Symfony
  • CodeIgniter

O ambiente OpenShift Express oferece um repositório Git para suas aplicações, que são publicadas automaticamente quando seu código é enviado para esse repositório. Assim, simplesmente escolha sua linguagem e framework preferidos, desenvolva sua aplicação local, e faça com que ela esteja disponível em instantes para qualquer usuário com acesso à internet com um simples git push!

  • OpenShift Flex: Como o próprio nome já diz, esta é a opção adequada para o momento que você precisar de maior flexibilidade. Nesta modalidade você dispõe de um Console de Administração mais avançado, totalmente na web, onde poderá definir um ambiente exclusivo para sua aplicação, alocando o número de servidores desejado, load balancers, bases de dados e uma série de outros parâmetros. Para oferecer este ambiente, atualmente o OpenShift Flex utiliza a Amazon EC2 como provedor de IaaS, sendo assim, você precisará ter uma conta paga na Amazon Web Services, apesar de não pagar nada pelo uso do OpenShift. No futuro, a ideia é que o Flex possa gerar este ambiente exclusivo em diversos fornecedores de IaaS, e não em uma Cloud Pública somente, mas também no seu Private Cloud.

Dessa forma, neste artigo vamos nos aprofundar no OpenShift Express, que além de ser 100% gratuito, permite que tenhamos uma aplicação totalmente funcional na internet, com suporte ao desenvolvimento Java e baseado no padrão Java EE 6.

Instalando as ferramentas cliente

No OpenShift Express utilizamos ferramentas de linha de comando. Por mais que a equipe do OpenShift esteja desenvolvendo plugins para o Eclipse/JBoss Developer Studio e painéis de administração na web, estas ferramentas de console ainda são as mais apreciadas por muitos desenvolvedores.

Para não influenciar nenhum leitor com a questão de sistema operacional, o OpenShift oferece um conteúdo com todas as informações de instalação das ferramentas de linha de comando no seguinte endereço: https://openshift.redhat.com/app/express#install_client_tools.

As ferramentas cliente do OpenShift são escritas em Ruby, então entre os itens que serão instalados estará o Ruby, além do mais famoso controlador de versão da atualidade, o Git.

A instalação, apesar de bastante simples, requer a execução de algumas ações em linha de comando e também permissão para instalação de pacotes; desta forma é fundamental que o leitor conheça alguns conceitos básicos do seu Sistema Operacional (Windows, Linux ou Mac OS X).

Vamos agora descrever a instalação em cada uma das plataformas mais utilizadas do mercado:

a) Red Hat Enterprise Linux ou Fedora

  1. Pré-requisitos:
  2. RHEL 6 ou superior;
  3. Fedora 14 ou superior.
  4. Faça o download do arquivo de repositório openshift.repo no endereço: https://openshift.redhat.com/app/repo/openshift.repo;
  5. Mova o arquivo baixado (openshift.repo) para a pasta destino /etc/yum.repos.d/;
  6. Execute o comando sudo no seu terminal:
$ sudo yum install rhc

Caso você não queira usar o sudo, execute o seguinte comando como usuário root:

$ yum install rhc

b) Outras distribuições Linux

  1. Pré-requisitos:
  2. Acesso root;
  3. Ruby 1.8 ou superior instalado ou disponível para ser instalado.
  4. Instale os seguintes pacotes:
  5. git;
  6. ruby;
  7. rubygems;
  8. ruby1.8 development package.

Instale o gem do RHC com o seguinte comando:

$ su -c 'gem install rhc'

c) Mac OS X

  1. Pré-requisitos:
  2. Controlador de Versão Git:
  3. Disponível na suíte XCode Full;
  4. Ou realizar o download do seguinte link: http://code.google.com/p/git-osx-installer/.
  5. Nas versões mais recentes do Mac OS X o Ruby já vem disponível, então apenas digite os seguintes comandos:
    $ sudo gem install json_pure
      $ sudo gem install rhc

    d) Windows

  6. Pré-requisitos:
  7. Instale o Cygwin, que está disponível no endereço: www.cygwin.com/.

  8. Os seguintes subcomponentes devem estar disponíveis na instalação:
  9. openssh;
  10. ruby;
  11. make;
  12. gcc;
  13. git.
  14. Baixe da seguinte url: http://rubyforge.org/projects/rubygems o rubygems e descompacte o arquivo;
  15. Execute o Cygwin e dentro dele execute o comando:
  16. $ ruby <caminho-do-gems-descompactado>/setup.rb install
  17. Instale o gem do RHC executando o comando:
$ gem install rhc

Uma das ferramentas com as quais você terá bastante contato durante o desenvolvimento no OpenShift Express é o Git (http://git-scm.com/), um sistema controlador de versão similar ao CVS, Subversion, Mercurial e outros. Toda a interação com o OpenShift é feita usando esta ferramenta como um dos pontos chave. Um dos grandes exemplos de uso do Git na atualidade é o portal GitHub (https://github.com/), do qual você já deve ter ouvido falar: trata-se de uma espécie de “rede social de compartilhamento de códigos”. Este ambiente utiliza o Git como controlador de versão, e é nos dias de hoje um dos portais mais acessados pelos desenvolvedores no mundo todo.

Cygwin: É uma ferramenta que faz com que o Windows possa suportar operações comuns do Linux, mesmo sem ter o Linux propriamente instalado.

Mergulhando no OpenShift

Criar uma aplicação no OpenShift Express é uma tarefa simples e fácil. Pensando nisso, vamos agora guiá-lo através de alguns passos para transformar sua aplicação local em um serviço disponível no Cloud da Red Hat.

Além disso, iremos realizar a publicação de uma aplicação de demonstração, com o código já pronto (disponível no GitHub), em seu ambiente OpenShift Express. A aplicação em questão pode ser acessada para testes no endereço http://roland-deschain.rhcloud.com/ e visualizada na Figura 3.

Aplicação de demonstração rodando no ambiente OpenShift Express
Figura 3. Aplicação de demonstração rodando no ambiente OpenShift Express.

Entendo a URL das aplicações

No OpenShift Express, as URLs das aplicações publicadas são subdomínios do domínio rhcloud.com, e são compostas por dois identificadores através de uma regra muito simples:

http://<nome-da-aplicacao>-<dominio>.rhcloud.com

Neste padrão, <dominio> é um identificador único para a sua conta no OpenShift, e precisa ser definido somente uma vez. Já <nome-da-aplicacao> é o identificador da aplicação propriamente, sendo definido para cada uma das aplicações publicadas em sua conta. Neste artigo iremos criar uma aplicação chamada jm10anos.

Criando o Domínio

Para criar um nome de domínio para nossas aplicações, o comando utilizado é o seguinte:

$ rhc-create-domain -n <dominio> -l <e-mail-registrado-no-openshift>

Onde -n (name) é o nome do domínio e -l (login) o endereço de e-mail associado à sua conta no OpenShift. Sua senha será solicitada neste comando.

Para mais informações sobre o comando de criação de domínio, utilize rhc-create-app -h.

Criando o Nome da Aplicação

No próximo passo, criaremos o nome e o espaço para a aplicação, isto é, o ambiente e o repositório onde seu código será deployado. Para isso usamos o seguinte comando:

$ rhc-create-app -a jm10anos -t jbossas-7.0

Neste comando, -a (app) especifica o nome da aplicação e -t (type) especifica o tipo de framework ou container onde a aplicação será instalada. Esta opção é muito importante porque define a infraestrutura do ambiente que você terá disponível para esta aplicação. No exemplo estamos utilizando o JBoss Application Server 7.0, que suporta a especificação Java EE 6, mas além dele temos disponíveis opções como: php-5.3 (para PHP), perl-5.10 (para Perl), wsgi-3.2 (Web Server Gateway Interface) e rack-1.1 (Ruby Webserver Interface).

Observe que o comando anterior criou automaticamente um diretório local em sua máquina com o mesmo nome especificado para sua aplicação, no caso jm10anos. Este diretório já conta com uma estrutura básica de projeto (pom.xml e diretório src, por exemplo) e já está automaticamente vinculado ao repositório remoto da sua aplicação. Isso significa que já temos tudo pronto para começar a codificar: um repositório Git onde iremos desenvolver nossa aplicação e o suporte remoto a deploy através deste repositório no container e/ou framework especificado.

Dito isso, que tal testar se tudo está funcionando corretamente? Para obter esta resposta, digite a URL conforme o padrão baseado em seu domínio e nome da aplicação para visualizar a tela padrão do cartucho JBoss AS 7:

http://jm10anos-<dominio>.rhcloud.com/

O resultado será semelhante ao apresentado na Figura 4.

Index padrão do JBoss AS 7 no OpenShift Express
Figura 4. Index padrão do JBoss AS 7 no OpenShift Express.

Partiremos agora da aplicação “em branco” para algo mais significativo: o deploy da sua própria aplicação. Existem duas formas de fazê-lo: com aplicações já pré-empacotadas (na forma de arquivos war, ear, jar ou sar), ou através de código-fonte estruturado no formato padrão do Maven.

Publicando uma aplicação pré-empacotada

A primeira opção de deploy, bastante simples, consiste unicamente em copiar um arquivo previamente empacotado (no formato war, ear, jar ou sar) para o diretório deployments/, criado automaticamente no comando rhc-create-app. Depois disso basta enviar o arquivo para o seu repositório para que o deploy comece automaticamente. É importante que neste modelo de deploy você apague o arquivo pom.xml e o diretório src/ que foram gerados, pois caso contrário o OpenShift vai interpretar como uma tentativa de deploy via código-fonte, sobrescrevendo o pacote dentro de deployments/. Se desejar, faça um backup da pasta inteira, para uso posteriormente.

Para facilitar o processo de aprendizado neste artigo, já disponibilizamos um arquivo para testes. Assim, realize o download do .war do link a seguir e copie para o diretório deployments/ dentro de jm10anos/:

https://github.com/fabianofranz/roland-deschain/raw/master/dist/ROOT.war

Copiado? Então prepare-se pois o deploy vai começar! Digite, na raiz do diretório jm10anos/, o comando:


  $ git add .
  $ git commit -a -m "Meu primeiro deploy no OpenShift, yay! \o/"
  $ git push

Observe que utilizamos ROOT.war como nome do arquivo. Isto não é obrigatório, mas permite que sua aplicação seja acessada pela raiz do subdomínio. Feito isso, você já pode acessá-la pela mesma URL anterior:

http://jm10anos-<dominio>.rhcloud.com/

Publicando uma aplicação a partir de seu próprio código-fonte

No exemplo anterior realizamos a publicação de uma aplicação previamente empacotada em um arquivo .war. A segunda forma de realizar deploy no OpenShift é através do código-fonte, pois o próprio serviço se encarrega de empacotar a aplicação (desde que os fontes estejam na estrutura sugerida pelo Maven) antes do deploy. Justamente por este motivo o comando de criação da aplicação realizado anteriormente já cria uma estrutura padrão de diretórios, no seguinte formato:


  jm10anos/
    +-deployments/
    +-src/
    +-pom.xml

O procedimento para deploy a partir do código-fonte é o mesmo, sendo assim, execute os comandos git add/commit/push conforme exemplificado no tópico “Publicando uma aplicação pré-empacotada”.

Publicando uma aplicação a partir de código-fonte disponível no GitHub

O GitHub (http://github.com), serviço Git bastante conhecido entre os desenvolvedores, é uma espécie de repositório “social” que disponibiliza espaço e ferramentas gratuitamente para projetos que sejam de código aberto. Nele estão hospedados alguns projetos bastante importantes, como por exemplo, o Ruby on Rails, Groovy, jQuery, o próprio JBoss Application Server, dentre muitos outros.

Por ser um repositório Git, a mesma tecnologia utilizada pelo OpenShift, podemos fazer uso do comando git remote, que basicamente permite sincronizar dois repositórios e, com isso, tornar muito simples o deploy no OpenShift de aplicações que estejam em repositórios no GitHub.

Deste modo, faremos o deploy da mesma aplicação que utilizamos no formato pré-empacotado, mas desta vez utilizando o código fonte sincronizado com o repositório original no GitHub.

Para isso, inicialmente execute os seguintes comandos, a partir da raiz do diretório jm10anos/:


  $ git remote add upstream -m master git://github.com/fabianofranz/roland-deschain.git
  $ git pull -s recursive -X theirs upstream master

Aqui o comando git remote sincroniza os dois repositórios, enquanto git pull atualiza seu repositório local com os arquivos remotos. Ao fim destes comandos você deve ter toda a estrutura de arquivos localmente, conforme o repositório no GitHub.

Se desejar, você pode realizar alguma modificação no código-fonte e, por fim, utilizamos o comando git push para deploy no OpenShift!

$ git push

Para verificar o resultado, acesse sua aplicação recém deployada em:

http://jm10anos-<dominio>.rhcloud.com/

Enriquecendo seu ambiente com “cartuchos”: MySQL na nuvem!

É bastante comum que sua aplicação necessite de soluções adicionais e/ou complementares ao container, como por exemplo, uma base de dados, ferramentas complementares de administração do seu container, utilitários de linha de comando, entre outros. Estes complementos no OpenShift levam o nome de cartuchos. A lista de cartuchos atualmente disponível no OpenShift Express ainda é pequena, mas está crescendo gradualmente e deve em breve comportar diversas soluções úteis como o Infinispan, Jenkins, MongoDB, Memcached, MRG Messaging, entre outros. Felizmente, um dos cartuchos mais úteis para os tipos mais comuns de aplicação já está disponível: o cartucho MySQL.

Deste modo, para adicionar suporte ao MySQL 5.1 à sua aplicação, digite:

$ rhc-ctl-app -a jm10anos -e add-mysql-5.1

Ao habilitar este cartucho, o OpenShift automaticamente criará um banco de dados com o mesmo nome de sua aplicação (neste caso, jm10anos).

Para conhecer todos os cartuchos disponíveis, execute:

$ rhc-ctl-app -L

Aplicações “quick-start” disponíveis no repositório GitHub do OpenShift

O time de desenvolvimento do OpenShift disponibiliza um repositório aberto no GitHub que já possui uma série de aplicações de exemplo ou “esqueletos” básicos prontos para você utilizar, independentemente do framework ou necessidade. Por exemplo, existem instalações prontas para soluções muito conhecidas, como o Joomla, Redmine, Wordpress, Drupal, Sugar CRM, JBoss Seam, Sinatra, Django, Cake PHP, Ruby on Rails e muitos outros.

Para pesquisar a lista de quick-starters disponíveis, acesse o endereço abaixo:

https://github.com/openshift

Outros comandos: listando dados do seu usuário e de todas as suas aplicações

Um comando bastante importante é o que permite verificar, além dos dados básicos da sua conta no OpenShift Express, também a lista de todas as aplicações instaladas, dos frameworks utilizados, localização do repositório Git, dentre outras informações. Exemplo:

$ rhc-user-info -l <email-registrado-no-openshift>

Outros comandos: Iniciando, parando ou reiniciando sua aplicação

Apesar de o OpenShift Express se tratar de um ambiente multi-inquilino, conforme citado anteriormente, é sempre importante que o desenvolvedor tenha alguma capacidade de gerência sobre o servidor onde sua aplicação está sendo executada. Para isto são disponibilizados também alguns comandos adicionais, que permitem parar, iniciar, reiniciar ou mesmo destruir seu ambiente sem afetar o espaço dos demais usuários. Os comandos são:

$ rhc-ctl-app -a jm10anos -c <comando>

Onde <comando> pode ser:

  • start (inicia a aplicação);
  • stop (para a aplicação caso esteja rodando);
  • restart (reinicia a aplicação);
  • reload (recarrega a aplicação);
  • status (exibe o status atual da aplicação na nuvem);
  • destroy (remove completamente uma aplicação do seu domínio).

Para facilitar seu trabalho daqui em diante, criamos a Tabela 1, “OpenShift Express: Guia de Consulta Rápida”, uma espécie de cheatsheet que engloba os principais comandos listados até aqui, e mais alguns. O site do projeto conta ainda com uma documentação avançada bastante detalhada, para maior aprimoramento na plataforma. Bom proveito!

Padrão das URLs

http://<nome-da-aplicacao>-<dominio>.rhcloud.com

Criação do domínio

$ rhc-create-domain -n <dominio> -l <e-mail-registrado-no-openshift>

Criação do nome da aplicação

$ rhc-create-app -a <nome-da-aplicacao> -t jbossas-7.0

Enviando para o repositório Git e fazendo deploy

$ git add .

$ git commit -a -m "<comentário-do-commit>"

$ git push

Sincronizando com um repositório no GitHub

$ git remote add upstream -m master git://github.com/<repositorio>.git

$ git pull -s recursive -X theirs upstream master

Adicionando suporte ao cartucho MySQL

$ rhc-ctl-app -a <nome-da-aplicacao> -e add-mysql-5.1

Listando outros cartuchos disponíveis

$ rhc-ctl-app -L

Listando seus dados de usuários e aplicações

$ rhc-user-info -l <e-mail-registrado-no-openshift>

Iniciar, parar, reiniciar e outros comandos

$ rhc-ctl-app -a <nome-da-aplicacao> -c <start|stop|restart|reload|status|destroy>

Acompanhar o log (comando tail)

rhc-tail-files -a <nome-da-aplicacao> -o '-f'

Tabela 1. OpenShift Express: Guia de Consulta Rápida.

Conclusões

A plataforma OpenShift, o PaaS (Platform as a Service) da Red Hat, mostra-se como uma excelente alternativa para desenvolvedores que queiram iniciar seus experimentos em ambientes de Cloud Computing. Simples, objetiva e gratuita na versão Express, procura integrar ferramentas já conhecidas dos desenvolvedores, como repositórios Git, Maven, JBoss Application Server 7, MySQL, entre outras.

Aproveite o presente momento, em que a plataforma encontra-se em pleno desenvolvimento e evolução, para contribuir com sugestões e ideias que possam fortalecê-la e facilitar seu uso. O feedback dos desenvolvedores é muito importante e pode ser feito através dos fóruns do OpenShift (https://www.redhat.com/openshift/forums), da conta oficial no Twitter (http://twitter.com/openshift), do e-mail openshift@redhat.com ou do canal #openshift nos servidores IRC da freenode. Aguardamos sua contribuição!

Confira também

Links

http://pt.wikipedia.org/wiki/Cloud_computing
Definições para Cloud Computing.

http://openshift.redhat.com
OpenShift, PaaS (Platform as a Service) da Red Hat.

https://openshift.redhat.com/app/express
Site do OpenShift Express.

https://openshift.redhat.com/app/flex
Site do OpenShift Flex.

http://github.com
GitHub, repositório Git e rede social para desenvolvedores.

http://git-scm.com/documentation
Documentação sobre Git.