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.');


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": [

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

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.


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

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

| improve this answer | |
  • @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 '18 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?

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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