This stack provides a self-hosted Parse backend with MongoDB storage and Parse Dashboard for management.
flowchart LR
App([Application]) -->|:1337 /parse| ParseServer[Parse Server]
ParseServer --> MongoDB[(MongoDB)]
Admin([Admin]) -->|:4040| Dashboard[Parse Dashboard]
parse-dbruns MongoDB for Parse data persistence.parse-serverexposes the Parse API at/parse.parse-dashboardprovides a web UI to inspect classes, data, and app settings.
- Services:
parse-db(mongo:7)parse-server(parseplatform/parse-server:latest)parse-dashboard(parseplatform/parse-dashboard:latest)
- Ports:
- Parse API:
http://localhost:1337/parse - Parse Dashboard:
http://localhost:4040
- Parse API:
- Persistent data:
parse_db_data:/data/db
Set via .env (copy from .env.example):
MONGO_ROOT_USERNAMEMONGO_ROOT_PASSWORDPARSE_DB_NAMEPARSE_APP_IDPARSE_MASTER_KEYPARSE_APP_NAMEPARSE_ALLOW_CLIENT_CLASS_CREATIONPARSE_SERVER_PORTPARSE_SERVER_URLPARSE_PUBLIC_SERVER_URLPARSE_MASTER_KEY_IPSPARSE_DASHBOARD_PORTPARSE_DASHBOARD_USERPARSE_DASHBOARD_PASSPARSE_DASHBOARD_ALLOW_INSECURE_HTTPPARSE_DASHBOARD_SERVER_URL
From the repository root:
cd parse-server+mongodb
cp .env.example .env
docker compose up -dOpen:
- Parse API:
http://localhost:1337/parse - Parse Dashboard:
http://localhost:4040
Log in to Dashboard using:
- Username:
PARSE_DASHBOARD_USER - Password:
PARSE_DASHBOARD_PASS
Create object:
curl -X POST "http://localhost:1337/parse/classes/Todo" \
-H "X-Parse-Application-Id: myAppId" \
-H "X-Parse-Master-Key: myMasterKey" \
-H "Content-Type: application/json" \
-d "{\"title\":\"first item\",\"done\":false}"List objects:
curl -X GET "http://localhost:1337/parse/classes/Todo" \
-H "X-Parse-Application-Id: myAppId" \
-H "X-Parse-Master-Key: myMasterKey"Useful commands:
docker compose ps
docker compose logs -f
docker compose down
docker compose down -v- For production, set strong values for
PARSE_MASTER_KEY, dashboard credentials, and use HTTPS/reverse proxy. - If you change app ID or master key after data already exists, old clients must be updated with new values.
- If Dashboard shows "Parse Server failed to fetch", set
PARSE_DASHBOARD_SERVER_URLto a URL reachable by your browser (for local host usage, keephttp://localhost:1337/parse). - If Dashboard shows "unauthorized", ensure
PARSE_MASTER_KEYmatches in both services and allow dashboard source IPs viaPARSE_MASTER_KEY_IPS(local dev default:0.0.0.0/0,::/0).