Criando meu próprio servidor Linux na “nuvem”

by Cássio R Eskelsen 20. junho 2010 12:08

Como comecei a trabalhar com projetos em Java a pouco tempo comecei a sentir uma certa dificuldade para hospedar meus projetos. Não que não existem bons hosts java, mas estava começando a ficar preocupado com a dispersão das minhas coisas: eu tinha um provedor para os sites em asp.net, tenho projetos hospedados no Google App Engine e pagava um serviço para hospedar meus fontes SVN.

Somado à necessidade de poder fazer alguns testes mais hardcore, resolvi contratar um VPS (virtual private server) em Linux e centralizar nele os sites asp.net, java e os meus fontes SVN.

Você deve estar pensando: “como assim? sites asp.net em Linux?”. Sim, para quem ainda não conhece, isso é possível com o Projeto Mono que hoje é mantido pela Novell.

Vou relatar nesse post um pouco sobre minha aventura.

1a Etapa: escolher um serviço de host VPS

Eu sei que a qualidade dos serviços é diretamente proporcional ao custo da hospedagem, não vou enganar pensando que existe milagre, então o que procurei foi um equilíbrio entre preço e confiabilidade.

Existem muitos serviços de VPS nos Estados Unidos mas não me sentia muito seguro pois sei que alguns são revenda da revenda.

No Brasil eu conhecia o serviço da Locaweb. Eles disponibilizam um serviço que eles classificam como “Cloud Computing”, o que tecnicamente discordo que seja cloud. É apenas o antigo VPS com outro termo. Não é objetivo desse post explicar as diferenças entre VPS e Cloud, mas o que posso adiantar é que hoje os outros serviços de Cloud Computing que seguem a risca a definição são o Microsoft Azure e o Google App Engine.

Procurando por “opiniões cloud locaweb” no Twitter acabei encontrando uma referência ao serviço de “cloud” da tecla.com.br que vim a descobrir é um braço da http://www.alog.com.brALOG que conheço de longa data, desde a época da Comdomonio (o nome era assim mesmo, com “m”). Sempre gostei muito da qualidade do serviço deles e não tive dúvidas em fechar um VPS, ops, “cloud” com eles. Escolhi o pacote mais básico, que contempla 2 processadores de 300 Mhz, 512 de RAM e 40 Gb de disco. Fechei a compra umas 3 da tarde, paguei o boleto, enviei o comprovante via email e no final da tarde já estava com meu server no ar (obrigado ao pessoal do suporte que teve paciência com a minha ansiedade!)

Agora começava a…

2a. Etapa: configurações básicas

Eu escolhi um servidor com Ubuntu 9 pré-instalado, mas sem nenhum pacote adicional.

A primeira coisa que precisei fazer foi entrar no painel de controle deles e conectar via ssh através do applet java que está no painel. Essa é a única forma de se conectar inicialmente já que o server vem bloqueado por questões de segurança e você precisa alterar a senha para liberar o acesso remoto.

Liberado o acesso, pude começar a conectar remotamente via ssh.

Primeiramente instalei o famoso pacote Apache + PHP + MySql. Você pode ver um tutorial básico aqui: http://www.ubuntugeek.com/how-to-install-apache2-webserver-with-phpcgi-and-perl-support-in-ubuntu-server.html e aqui: http://www.vivaolinux.com.br/dica/Instalando-servidor-Apache-+-PHP-+-MySQL-+-phpMyadmin-+-noip-no-Ubuntu-6.10-Server

(nesse post não vou entrar em detalhes, mas vou deixar links com as informações)

Java

Para meus projetos em Java eu instalei o Tomcat, seguindo as dicas deste tutorial:

Installing Tomcat 6 on Ubuntu: http://www.howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu/

3a. Etapa: migrando o servidor de SVN

Até o momento utilizava o serviço da www.codespaces.com . O serviço é excelente, só estou tirando de lá por uma questão de centralização e racionalização de custos com hospedagem.

Para montar um servidor SVN segui os passos descritos nesse link: http://stackoverflow.com/questions/60736/how-to-setup-a-subversion-svn-server-on-gnu-linux-ubuntu. Como não tenho um certificado de segurança recebo sempre uma observação nos clientes de que o certificado não é confiável, vou tentar resolver isso mais adiante.

Servidor instalado, subi o backup dos repositórios do SVN que a codespaces disponibiliza.

Nas estações onde desenvolvo usei o comando Relocate para apontar para a nova localização e fazer uma migração transparente.

Ao fazer o primeiro commit no novo local descobri que a codespaces.com usa um hook de post-commit que acaba gerando um warning no novo local pois ele não vem no backup. Para resolver isso basta entrar em cada repositório no diretório hooks e comentar dentro do arquivo post-commit a linha que chama o hook.

4a. Etapa: instalando o Mono

Tentei instalar o Mono de várias formas.  O Ubuntu que é instalado pela Alog possui um Mono muito antigo.

Alternativamente pode-se tentar instalar via http://badgerports.org/o que comigo não funcionou muito bem.

Tentei instalar baixando o trunk dos fontes do Mono, mas como era de se esperar, existem muitos erros.

Por último, resolvi baixar os tarballs com fontes estáveis: http://ftp.novell.com/pub/mono/sources-stable/ as instruções para compilar você pode encontrar em “compiling mono from tarball” . Tenha paciência, o processo de compilação pode demorar bastante tempo dependendo da configuração da máquina.

image

5a. Etapa: migrando os sites

Essa etapa irá demorar um pouco. Meus sites atuais estão no BlogEngine e quero mudar para um engine próprio baseado em asp.net MVC e algum banco NoSQL.

Tags: , , ,

asp.net | Web

Report Viewer não renderiza no IIS 7

by Cássio R Eskelsen 26. março 2009 14:24

Se você usa o Report Services e pretende utilizar (ou usa) o Report Viewer  em apliações ASP.Net, pode receber o seguinte erro ao executar a web app em um servidor com IIS: The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

Isso ocorre pois o IIS 7 não possui um handler para Reserved.ReportViewerWebControl.axd . Resolver isso é fácil e existem duas formas:

Via Gerenciador do IIS (Painel de Controle/Ferramentas Adm):


Selecione o seu site e abra a opção Handler Mappings:

image

Depois, no lado direito, selecione Add Managed Handler:

Leia mais...

Tags:

.Net | asp.net

ASP.Net MVC RC 1 e … bug!

by Cássio R Eskelsen 24. fevereiro 2009 00:28

Alguns dias atrás puxeio RC 1 do ASP.NET MVC. Muitas features novas, incluindo a eliminacao da necessidade de haver um arquivo .cs para um view (exemplo clienteupdate.aspx.cs) e um wizard que faz uma espécie de scaffolding do model.

O único detalhe é que em determinadas situações isso não está funcionando, principalmente quando você separa seu sistema em camadas. Por exemplo, suponha que você tenha uma classe Cidade que está no assembly Endereco.DLL e uma classe Cliente no assembly Cadastro.DLL (sim, essas DLL são bizarras, só servem para exemplificação). Digamos que na classe Cliente você tenha uma propriedade do tipo Cidade.
Se você tentar criar um view fortemente tipado da classe Cliente você receberá um belo erro:

image 

Se você resolver não usar o scaffolding mas quiser usar o novo modo que elimina a necessidade do .aspx.cs como abaixo:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
AutoEventWireup="true" Inherits="System.Web.Mvc.ViewPage<Dominio.Cliente>"

Você continuará a ter um problema, ou seja, o RC do MVC não permite carregar uma classe que tenha uma propriedade que esteja em outro assembly.

Para resolver esse problema, por enquanto você pode continuar no esquema antigo, que é possuir um .aspx.cs para cada view:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true"
    CodeBehind="Show.aspx.cs" Inherits="Dominio.Cliente" %>

ScottGu comentou que o problema já foi detectado e que será corrigido na versão final do ASP.NET MVC.

Tags: ,

.Net | .Net | asp.net | asp.net

Convertendo um Website para asp.net MVC

by Cássio R Eskelsen 13. novembro 2008 17:28

A Microsoft jura que não mas ao que tudo indica, para aplicações WEB será adotado o padrão MVC, através do ASP.NET MVC, ficando os Web Forms em segundo plano.

Apesar de ser uma grande quebra de paradigma em relação aos “antigos” Web Forms, a introdução deste padrão traz consigo uma série de vantagens, entre as quais eu destaco a maior facilidade de deixar o site dentro dos webstandards, a testabilidade e uma série de recursos que deixam o trabalho mais produtivo.

Dificilmente alguém irá converter todo um projeto web já pronto em Web Forms de uma só vez para MVC, afinal isso exigiria tempo e dinheiro que ninguém tem.
Felizmente, é possível conviver com os dois tipos de padrões ao mesmo tempo, possibilitando uma conversão gradual e/ou usar o que cada  padrão tem de melhor.

Por outro lado você pode preferir (como eu), usar o tipo de projeto “Website” ao invés do tipo Web Application que vem por default no ASP.Net MVC. As dicas abaixo servirão para esse caso também.

Instalando o Kit-Gás no seu Web Site.

É extremamente simples deixar seu site preparado para trabalhar de forma híbrida:

Leia mais...

Tags:

asp.net

Design Patterns – Parte 3 - Post/Redirect/Get (PRG)

by Cássio R Eskelsen 10. novembro 2008 16:16

Em aplicações asp.net (webforms), uma das dúvidas freqüentes é o que fazer após uma ação, como por exemplo, gravar um novo registro. Acredito que seja comum a simples exibição de uma mensagem “Registro salvo com sucesso”, na mesma página onde os registros foram salvos.
Alguns problemas podem ocorrer com essa prática: caso o usuário submeta o formulário novamente, o registro poderá ser duplicado. Se pressionar atualizar, será exibida uma mensagem como a abaixo (a mensagem pode variar de acordo com o browser):

para exibir essa  página novamente o internet explorer necessita reenviar as informações 

Para evitar esse tipo de problema deve-se procurar utilizar o Design Pattern PRG, onde após um post (submit), respondemos com um redirect para uma nova página, ao invés de simplesmente retornar um HTML, ou seja, no caso do asp.net, utilizamos o comando Response.Redirect(“pagina_sucesso.aspx”) para direcionar à uma nova página onde informaremos que o registro foi salvo com sucesso.

Tags: ,

Design Pattern | asp.net

Windows Live ID Web Authentication

by Cássio R Eskelsen 20. setembro 2008 14:15

Talvez uma das coisas que mais perturbam os usuários da web seja a necessidade de decorar vários logins e senhas para os diversos sites onde eles possuam uma conta.

Para solucionar isso existem várias iniciativas de se criar “passaportes universais”, como por exemplo, o OpenId.

A Microsoft disponibiliza também uma solução para isso, o Windows Live ID Web Authentication com o qual os usuários podem se logar nos sites usando a mesma conta do Hotmail/MSN. Para os desenvolvedores é uma solução interessante pois traz agilidade na autenticação para milhões de pessoas que já possuem uma conta no MSN.

O WLIWA (abreviando) é um serviço altamente escalável pois fornece, segundo a Microsoft, mais de 22 bilhões de autenticações/mês (cada vez que uma pessoa entra no MSN ela está se autenticando pelo WLIWA). A segurança dele é auditada constantemente o que nos dá uma segurança a mais. Considerando as preocupações que temos com segurança, deixar a autenticação com um especialista já nos poupa muito trabalho.

Veja no diagrama abaixo  como funciona  o processo de autenticação:

untitled

Perceba pelos ítens 3 a 7 que o usuário passa seus dados de autenticação DIRETO para o Windows Live Id. Seu site não toma conhecimento dos dados de login do usuário (o que é uma segurança para o seu usuário).
Assim que a autenticação for concluída com sucesso, o WLIWA retorna para o seu site um token com o identificador único do usuário. Esse token você irá usar para autenticar o usuário em sua aplicação.

 

Leia mais...

Tags: , , ,

.Net | asp.net

TextBox com busca incremental em ASP.NET

by Cássio R Eskelsen 5. agosto 2008 21:40

(publicado originalmente em 2005)

O GMail popularizou um recurso que andava meio escondido nos browsers, que é a possibilidade de enviar e buscar dados do servidor HTTP sem necessidade de refresh da página. Isso é feito com o uso de DHTML, através da função XMLHTTP
 
A utilização do XMLHTTP requer no mínimo dois componentes: a página com o código DHTML(que normalmente está em um .js) e um código que ficará no servidor respondendo as solicitações vindas da página com o DHTML. Esse código poderá ser uma página em php, cgi, aspx, etc. Você pode encontrar informações sobre a utilização em http://developer.apple.com/internet/webcontent/xmlhttpreq.html

Achei esse recurso muito útil, principalmente quando você precisa procurar informações em outra tabela, como por exemplo, em um cadastro de pedidos você precisa procurar o nome do cliente, mas a quantidade de informações é muito grande para você popular um dropdown, sem contar que o dropdown não permite ao usuário digitar caracteres (apenas selecionar).

Como aprender Javascript e DOM não está nos meus objetivos de curto prazo, pedi uma ajuda ao São Google. Não há muita coisa pronta na net, mas encontrei um exemplo muito interessante na página de Mircho Mirev. Vale a pena uma visita à toda página dele pois há muito código interessante.

A solução do Mircho é muito interessante pois permite a busca de resultados tanto remotamente como através de valor já passados para página em uma Array em Java Script ou ainda diretamente no próprio controle, o que é definido facilmente com parâmetros passados na tag Input. Permite ainda a busca incremental em dropdown tradicionais.

Leia mais...

Tags:

.Net | asp.net