I have deployed 2 Ubuntu servers on Azure. First, I have installed the Parse Server and the second, I installed MongoDB. (I have also put a ready db there)

Everything works fine! Both Parse Server and MongoDB server. They also communicate well. The thing is, when I try to connect to my dashboard - http://IP:4040/dashboard - it throws the error Server not reachable: unable to connect to server.

Here's what I have on my index.js:

var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var ParseDashboard = require('parse-dashboard');
var allowInsecureHTTP = true;
var path = require('path');

var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI;

if (!databaseUri) {
  console.log('DATABASE_URI not specified, falling back to localhost.');
}

//process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

var api = new ParseServer({
  databaseURI: databaseUri || 'mongodb://IP:27017/db',
  cloud: './cloud/main.js',
  appId: process.env.APP_ID || 'xxx',
  masterKey: process.env.MASTER_KEY || 'xxx', //Add your master key here. Keep it secret!
  fileKey: 'xxx',  
  serverURL: process.env.SERVER_URL || 'http://localhost:1337/parse',  // Don't forget to change to https if needed

  // Enable email verification
  verifyUserEmails: false,

  // The public URL of your app.
  // This will appear in the link that is used to verify email addresses and reset passwords.
  // Set the mount path as it is in serverURL
  publicServerURL: 'http://localhost:1337/parse',
});

// Client-keys like the javascript key or the .NET key are not necessary with parse-server
// If you wish you require them, you can set them as options in the initialization above:
// javascriptKey, restAPIKey, dotNetKey, clientKey

var app = express();

// Serve static assets from the /public folder
app.use('/public', express.static(path.join(__dirname, '/public')));

// Serve the Parse API on the /parse URL prefix
var mountPath = process.env.PARSE_MOUNT || '/parse';
app.use(mountPath, api);

// Parse Server plays nicely with the rest of your web routes
app.get('/', function(req, res) {
  res.status(200).send('Make sure to star the parse-server repo on GitHub!');
});

// There will be a test page available on the /test path of your server url
// Remove this before launching your app
app.get('/test', function(req, res) {
  res.sendFile(path.join(__dirname, '/public/test.html'));
});

var port = process.env.PORT || 1337;
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
    console.log('parse-server-example running on port ' + port + '.');
});

// Set up parse dashboard
var config = {
  "allowInsecureHTTP": true,
  "apps": [
    {
      "serverURL": "http://localhost:1337/parse",
      "appId": "xxx",
      "masterKey": "xxx",
      "appName": "name",
      "production": true
    }
  ],
  "users": [
    {
      "user":"username",
      "pass":"pass"
    }
  ]
};

var dashboard = new ParseDashboard(config, config.allowInsecureHTTP);
var dashApp = express();

// make the Parse Dashboard available at /dashboard
dashApp.use('/dashboard', dashboard);  

// Parse Server plays nicely with the rest of your web routes
dashApp.get('/', function(req, res) {  
  res.status(200).send('Parse Dashboard App');
});

var httpServerDash = require('http').createServer(dashApp);  
httpServerDash.listen(4040, function() {  
    console.log('dashboard-server running on port 4040.');
});

// This will enable the Live Query real-time server
ParseServer.createLiveQueryServer(httpServer);

And this is my package.json:

{
  "name": "parse-server-example",
  "version": "1.4.0",
  "description": "An example Parse API server using the parse-server module",
  "main": "index.js",
  "repository": {
    "type": "git",
    "url": "https://github.com/ParsePlatform/parse-server-example"
  },
  "license": "MIT",
  "dependencies": {
    "express": "~4.11.x",
    "kerberos": "~0.0.x",
    "parse": "~1.8.0",
    "parse-server": "~2.6.3",
    "parse-dashboard": "~1.1.0"
  },
  "scripts": {
    "start": "node index.js"
  },
  "engines": {
    "node": ">=4.3"
  }
}

I also have opened the ports needed from Azure dashboard. Any ideas on what's wrong? I've searched and searched, but without luck.

up vote 1 down vote accepted

By default, we should binding to "serverURL": "http://localhost:1337/parse", but in Azure, we recommend to binding to 10.0.0.4 (Azure VM private VM) .

In Azure, Public IP network traffic will route to Azure private IP address first.

  • Everything works nicely now! Thanks! – Sotiris Kaniras Oct 24 '17 at 11:46
  • @SotirisKaniras If this answer was helpful to you, please mark it as the accepted answer. (As it stands, you have marked your own answer as accepted, even though you have raised another question in the process of answering your question.) – JonathanDavidArndt Feb 2 at 2:19

I just changed my serverURL inside the dashboard config, from http://localhost:1337/parse to http://ip:1337/parse and it worked! Why is that?

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.