Instalando o Parse Server em um servidor AWS

Vou aqui atualizar o post que fiz para migrar o Parse e acrescentar alguns passos antes para instalar o parse server em um servidor Ubuntu.

Os passos a serem seguidos são os seguintes:

Instalação do MongoDB

Execute os seguintes comandos

echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
sudo service mongod start

Para criar uma instância, basta executar

mongo
use parsedb_exemplo

Instalação do Node 4.x

curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install nodejs node-gyp -y
sudo apt-get install build-essential -y

Intalação do Git

sudo apt-get install git -y

Vamos criar o backend app

mkdir parse-server-app
cd parse-server-app
git init
npm init
npm install --save express 
npm install --save path
npm install --save parse-server
npm install --save underscore

Agora é necessário criar o index.js

var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var path = require('path');
var api = new ParseServer({
databaseURI: 'mongodb://localhost:27017/parsedb_exemplo',
appId: '<SUA_APP_ID>',
//se vc utilizad o Cloud code, é preciso indicar onde está o js
cloud: '/mydata/parse-server-app/cloud/main.js",
masterKey: '<SUA_MASTER_KEY>',
serverURL: 'http://localhost:1341/parse_server'
});
var app = express();

var parseApiPath = '/parse_server'; //mude para seu path aqui
app.use(parseApiPath, api);

app.get('/', function(req, res) {
res.status(200).send('Make sure to star the parse-server repo on GitHub!');
});
var port = 1341;//coloque sua porta que desejar
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
console.log('parse-server-example running on port ' + port + '.');
});

Se for usar o cloud code, crie o diretório cloud e o arquivo main.js

mkdir parse-server-app/cloud
nano parse-server-app/cloud/main.js

E depois edite o seu main.js

//exemplo de uma definição de uma funcionalidade
Parse.Cloud.define('hello', function(req, res) { res.success('Olá');});

PM2

Agora é só iniciar o serviço utilizando o pm2

//para instalar o pm2, caso não tenha feito
npm install pm2 -g
//execute para iniciar o serviço
pm2 start index.js — name parseServer
;

A partir disso, o serviço está rodando em seu servidor. Mas não tem como acessar http://seudominio.com:1341/parse_server porque a porta não está liberada para acesso externo. Vamos então para o próximo passo: instalar e configurar o Nginx.

Nginx

É necessário configurar uma rota para tudo que chegar em http://seudominio.com/parse_server ser direcionado para o serviço node que está rodando localmente.

Para isso, instale o Nginx da seguinte forma:

//atualizar a lista de pacotes do apt-get 
sudo apt-get update
//instalar o ngin
sudo apt-get install nginx

Agora abra o arquivo de configuração

sudo nano /etc/nginx/sites-available/default

E modifique para a rota desejada

server {
listen 80;

server_name example.com; //pode ser somente o ip tbm

location /parse_server {
proxy_pass http://127.0.0.1:1341;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

Isso fará com que todas as requisições que cheguem no seu domínio /parse_server seja redirecinado para localhost:1341 — que é o seu serviço parse server que está rodando.

Reinicie o Nginx

sudo service nginx restart

Pronto (ufa)! São muitos detalhes mesmo. Agora vc está apto para fazer o seguinte em seus códigos:

Para Android

Parse.initialize(new Parse.Configuration.Builder(myContext)
.applicationId("YOUR_APP_ID")
.clientKey(null)
.server("http://<seuip>/parse_server/") //o slash (/) aqui é importante
    ...
    .build()
);

Para PHP

ParseClient::initialize('YOUR_APP_ID', 'YOUR_CLIENT_KEY', 'YOUR_MASTER_KEY');
ParseClient::setServerURL('http://<seuip>/parse_server');

Para JavaScript

Parse.initialize("YOUR_APP_ID");
Parse.serverURL = 'http://<seuip>/parse_server'

Para Swift

let configuration = ParseClientConfiguration {
$0.applicationId = "YOUR_APP_ID"
$0.clientKey = ""
$0.server = "http://<seuip>/parse_server"
}
Parse.initializeWithConfiguration(configuration)

Considerações sobre o push

Algumas limitações do serviço de push do parse server.

  • Para utilizar uma alta taxa de envios de push é necessário criar uma fila de job que execute essas rotinas. Antes, pelo dashboard do parse isso era tranquilo de se fazer.
  • Não suporta o push de cliente. Se sua aplicação utiliza essa funcionalidade, vai ser necessário implementar uma solução para resolver esse requisito.
  • Os relatórios de entrega de push não funcionam.
  • E o agendamento de envio também não funciona. É necessário criar uma rotina que execute em tempos — talvez usando o crontab.

Conclusão

São vários passos para colocar o parse serve rem produção. Mas depois que é feito um, fica simples adicionar outro. Para os próximos posts, vou colocar algumas dicas para manter o ambiente rodando os serviços sem maiores problemas.

O NodeJs é uma ferramenta fantástica! Sua utilização é simples e atende as necessidades de vários serviços comuns a aplicações. Muito importante estudar essa tecnologia.

Até a próxima!

Fontes:

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-14-04

https://medium.com/@championswimmer/rolling-your-own-parse-server-on-ubuntu-15-10-on-digitalocean-636d4cd77907#.h0ujylavn