Hospedar uma aplicação java/MySQL em servidor grátis
Depois de perceber que em Servidores Partilhados (Shared Hostings) não se pode hospedar um WAR diferentemente de Servidores Dedicados (VPS-Virtual Private Server), senti-me obrigado a procurar uma alternativa para colocar a minha aplicação online sem muitos custos.
Em jeito de fuga da despesa de pagar um VPS, pesquisei plataformas grátis para hospedagem de aplicativos na nuvem que me facilitassem também a integração da base de dados em MYSQL e identifiquei alguns como a OpenShift, Cloudbess e Heroku.
Com os dois primeiros não tive sucesso diferentemente do último(Heroku) uma plataforma que considerei simples na qual partilho agora a minha experiência.
Considerando que já temos a aplicação desenvolvida, os passos para hospedar a aplicação no Heroku seriam os seguintes:
1. Uma conta criada no Heroku;
2. Criar o projecto na plataforma, bem como podemos criar através da linha de comando depois da instalação do Heroku CLI(passo 3) digitando “heroku create nome_do_projecto”;
3. Instalar o Heroku CLI que podemo baixar aqui;
4. Aceder a plataforma pela linha de comandos e digitar “heroku login -i” e colocar os seus dados de acesso usados na criação da conta;
5. Instalar o heroku-deploy um plugin através do comando “heroku plugins:install heroku-cli-deploy”;
Até agora temos um ambiente capaz de hospedar a nossa aplicação caso ela não tenha conexão com a base de dados.
Caso tenha uma base de dados a plataforma oferece vários SGDB´s (Sistemas de Gerenciamentos de Banco de Dados). Para o meu caso que é o MYSQL usei o ClearBD que é um Banco de Dados altamente disponível como um serviço MYSQL que é executado na computação em nuvem bem como em outros ambientes.
No nosso projecto iremos adicionar o ClearDB em jeito de um plugin da seguinte maneira:
· Acedemos ao projecto via web e clicando na aba Resources (Recursos) temos acesso a opção Find more add-ons que clicando nos leva a uma página com muitos recursos, que para o nosso caso como queremos integrar um SGDB que suporte MYSQL escolhemos o ClearDB, este recurso oferece-nos 5MB de espaço grátis, o que é muito suficientes numa fase inicial do nosso projecto;
· Com o plugin adicionado, para uma conexão precisaríamos dos dados de acesso como a url, nome da base de dados, utilizador e senha, digitando: heroku config -a <nome_do_projecto>;
· Vai nos retornar algo como: CLEARDB_DATABASE_URL => mysql://[utilizador]:[senha]@[url_do_servidor]/[nome_da_base_de_dados]?reconnect=true donde podemos extrair dados para acedermos remotamente através do MySQLWorkbench ou um outro aplicativo;
· Para a configuração da conexão no Java com o Spring ao ClearDB aconselho a usar o BasicDataSource em vez de DataSource. Abaixo um exemplo de conexão usando o BasicDataSource:
@Bean
public BasicDataSource dataSourceL() throws URISyntaxException {
URI dbUri = new URI(System.getenv(“CLEARDB_DATABASE_URL”));
String utilizador= dbUri.getUserInfo().split(“:”)[0];
String senha= dbUri.getUserInfo().split(“:”)[1];
String dbUrl = “jdbc:mysql://” + dbUri.getHost() + dbUri.getPath();
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setUrl(dbUrl);
basicDataSource.setUsername(utilizador);
basicDataSource.setPassword(senha);
return basicDataSource;
}
6. Com a nossa configuração feita, podemos exportar o WAR e fazer um teste localmente que é do mesmo jeito que é executado no Heroku com o seguinte comando: heroku war:run <caminho_do_war> -a <nome_da_app>
7. Com testes feitos podemos carregar o WAR digitando: “heroku war:deploy <caminho_do_war> — app <nome_do_projecto_criado_na_plataforma>
8. E para abrir a aplicação no browser usamos o comando: heroku open -a nome_do_projecto
Desta forma, podemos colocar a nossa aplicação no ar, grátis. Em dias pouco dormidas, tive o suporte de um colega de profissão Dalton Harvey que me auxiliou bastante em conseguir colocar a minha primeira aplicação no Heroku, o meu Muito Khanimabo pelo suporte.