Back to Templates
OpenStatus logo

OpenStatus

ve1a9825

OpenStatus is an open-source synthetic monitoring platform with beautiful status pages, uptime and API monitoring as code, and alerting.

Deploy on Dokploy

Deploy OpenStatus on Dokploy

  1. Install Dokploy on your server if you haven't already.
  2. In your Dokploy panel, open a project and click Create Service → Template.
  3. Search for OpenStatus and click Create — Dokploy configures domains, environment variables, and volumes for you.

Alternatively, create a Compose service, go to Advanced → Import from Base64, and paste this payload:

base64
ewogICJjb21wb3NlIjogInNlcnZpY2VzOlxuICBsaWJzcWw6XG4gICAgaW1hZ2U6IGdoY3IuaW8vdHVyc29kYXRhYmFzZS9saWJzcWwtc2VydmVyOnYwLjI0LjMzXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBleHBvc2U6XG4gICAgICAtIDgwODBcbiAgICB2b2x1bWVzOlxuICAgICAgLSBsaWJzcWwtZGF0YTovdmFyL2xpYi9zcWxkXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIFNRTERfTk9ERT1wcmltYXJ5XG4gICAgICAjIEluY3JlYXNlIGxpbWl0cyB0byBoYW5kbGUgbXVsdGlwbGUgc2VydmljZXMgd2l0aG91dCBjb25uZWN0aW9uIHBvb2xpbmdcbiAgICAgIC0gU1FMRF9NQVhfQ09OQ1VSUkVOVF9DT05ORUNUSU9OUz01MTJcbiAgICAgIC0gU1FMRF9NQVhfQ09OQ1VSUkVOVF9SRVFVRVNUUz0xMDI0XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICBbXG4gICAgICAgICAgXCJDTUQtU0hFTExcIixcbiAgICAgICAgICAncGVybCAtZSAnJ3VzZSBJTzo6U29ja2V0OjpJTkVUOyBleGl0KElPOjpTb2NrZXQ6OklORVQtPm5ldyhQZWVyQWRkcj0+XCIxMjcuMC4wLjE6ODA4MFwiLFRpbWVvdXQ9PjEpID8gMCA6IDEpOycnJyxcbiAgICAgICAgXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDVcbiAgICAgIHN0YXJ0X3BlcmlvZDogMTBzXG5cbiAgIyBPbmUtc2hvdCBtaWdyYXRpb24gcnVubmVyIChpZGVtcG90ZW50IOKAlCBkcml6emxlIHNraXBzIGFwcGxpZWQgbWlncmF0aW9ucykuXG4gICMgTm8gcHVibGlzaGVkIGltYWdlIGV4aXN0cyBmb3IgaXQgdXBzdHJlYW0sIHNvIGl0IGlzIGJ1aWx0IGZyb20gdGhlIHBpbm5lZFxuICAjIGNvbW1pdCB0aGUgZ2hjci5pbyBhcHAgaW1hZ2VzIHdlcmUgYnVpbHQgZnJvbS5cbiAgZGItbWlncmF0ZTpcbiAgICBidWlsZDpcbiAgICAgIGNvbnRleHQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc3RhdHVzSFEvb3BlbnN0YXR1cy5naXQjZTFhOTgyNTVlMzljOWNjOWY2ZDQ4NTNkYmNlMzBjM2Y2YzQyNTE0YVxuICAgICAgZG9ja2VyZmlsZTogcGFja2FnZXMvZGIvRG9ja2VyZmlsZVxuICAgIHJlc3RhcnQ6IG9uLWZhaWx1cmU6M1xuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBEQVRBQkFTRV9VUkw9aHR0cDovL2xpYnNxbDo4MDgwXG4gICAgICAtIERBVEFCQVNFX0FVVEhfVE9LRU49XG4gICAgZGVwZW5kc19vbjpcbiAgICAgIGxpYnNxbDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcblxuICB3b3JrZmxvd3M6XG4gICAgaW1hZ2U6IGdoY3IuaW8vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMtd29ya2Zsb3dzOmUxYTk4MjVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGV4cG9zZTpcbiAgICAgIC0gMzAwMFxuICAgIHZvbHVtZXM6XG4gICAgICAtIHdvcmtmbG93cy1kYXRhOi9hcHAvZGF0YVxuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBOT0RFX0VOVj1wcm9kdWN0aW9uXG4gICAgICAtIFBPUlQ9MzAwMFxuICAgICAgLSBEQVRBQkFTRV9VUkw9aHR0cDovL2xpYnNxbDo4MDgwXG4gICAgICAtIERBVEFCQVNFX0FVVEhfVE9LRU49XG4gICAgICAtIENST05fU0VDUkVUPSR7Q1JPTl9TRUNSRVR9XG4gICAgICAtIFJFU0VORF9BUElfS0VZPSR7UkVTRU5EX0FQSV9LRVk6LXJlX3NlbGZob3N0X3BsYWNlaG9sZGVyfVxuICAgICAgLSBTSVRFX1VSTD1odHRwczovLyR7REFTSEJPQVJEX0hPU1R9XG4gICAgICAtIFRJTllCSVJEX05PT1A9dHJ1ZVxuICAgIGRlcGVuZHNfb246XG4gICAgICBkYi1taWdyYXRlOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseVxuICAgICAgbGlic3FsOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01EXCIsIFwiY3VybFwiLCBcIi1mXCIsIFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL3BpbmdcIl1cbiAgICAgIGludGVydmFsOiAxNXNcbiAgICAgIHRpbWVvdXQ6IDEwc1xuICAgICAgcmV0cmllczogM1xuICAgICAgc3RhcnRfcGVyaW9kOiAzMHNcblxuICBzZXJ2ZXI6XG4gICAgaW1hZ2U6IGdoY3IuaW8vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMtc2VydmVyOmUxYTk4MjVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGV4cG9zZTpcbiAgICAgIC0gMzAwMFxuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBOT0RFX0VOVj1wcm9kdWN0aW9uXG4gICAgICAtIFBPUlQ9MzAwMFxuICAgICAgLSBEQVRBQkFTRV9VUkw9aHR0cDovL2xpYnNxbDo4MDgwXG4gICAgICAtIERBVEFCQVNFX0FVVEhfVE9LRU49XG4gICAgICAtIENST05fU0VDUkVUPSR7Q1JPTl9TRUNSRVR9XG4gICAgICAtIFJFU0VORF9BUElfS0VZPSR7UkVTRU5EX0FQSV9LRVk6LXJlX3NlbGZob3N0X3BsYWNlaG9sZGVyfVxuICAgICAgLSBTVVBFUl9BRE1JTl9UT0tFTj0ke1NVUEVSX0FETUlOX1RPS0VOfVxuICAgICAgLSBTRUxGX0hPU1Q9dHJ1ZVxuICAgICAgLSBGTFlfUkVHSU9OPXNlbGYtaG9zdGVkXG4gICAgICAtIFRJTllCSVJEX05PT1A9dHJ1ZVxuICAgICAgLSBVUFNUQVNIX1JFRElTX1JFU1RfVVJMPWh0dHA6Ly9sb2NhbGhvc3Q6NjM3OVxuICAgICAgLSBVUFNUQVNIX1JFRElTX1JFU1RfVE9LRU49cGxhY2Vob2xkZXJcbiAgICBkZXBlbmRzX29uOlxuICAgICAgZGItbWlncmF0ZTpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbiAgICAgIHdvcmtmbG93czpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICAgIGxpYnNxbDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRFwiLCBcImN1cmxcIiwgXCItZlwiLCBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9waW5nXCJdXG4gICAgICBpbnRlcnZhbDogMTVzXG4gICAgICB0aW1lb3V0OiAxMHNcbiAgICAgIHJldHJpZXM6IDNcbiAgICAgIHN0YXJ0X3BlcmlvZDogMzBzXG5cbiAgZGFzaGJvYXJkOlxuICAgIGltYWdlOiBnaGNyLmlvL29wZW5zdGF0dXNocS9vcGVuc3RhdHVzLWRhc2hib2FyZDplMWE5ODI1XG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBleHBvc2U6XG4gICAgICAtIDMwMDBcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gTk9ERV9FTlY9cHJvZHVjdGlvblxuICAgICAgLSBQT1JUPTMwMDBcbiAgICAgIC0gSE9TVE5BTUU9MC4wLjAuMFxuICAgICAgLSBBVVRIX1RSVVNUX0hPU1Q9dHJ1ZVxuICAgICAgLSBEQVRBQkFTRV9VUkw9aHR0cDovL2xpYnNxbDo4MDgwXG4gICAgICAtIERBVEFCQVNFX0FVVEhfVE9LRU49XG4gICAgICAtIEFVVEhfU0VDUkVUPSR7QVVUSF9TRUNSRVR9XG4gICAgICAtIFNFTEZfSE9TVD10cnVlXG4gICAgICAtIE5FWFRfUFVCTElDX1VSTD1odHRwczovLyR7REFTSEJPQVJEX0hPU1R9XG4gICAgICAtIENST05fU0VDUkVUPSR7Q1JPTl9TRUNSRVR9XG4gICAgICAtIFJFU0VORF9BUElfS0VZPSR7UkVTRU5EX0FQSV9LRVk6LXJlX3NlbGZob3N0X3BsYWNlaG9sZGVyfVxuICAgICAgLSBUSU5ZQklSRF9OT09QPXRydWVcbiAgICAgIC0gVVBTVEFTSF9SRURJU19SRVNUX1VSTD1odHRwOi8vbG9jYWxob3N0OjYzNzlcbiAgICAgIC0gVVBTVEFTSF9SRURJU19SRVNUX1RPS0VOPXBsYWNlaG9sZGVyXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIGRiLW1pZ3JhdGU6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5XG4gICAgICB3b3JrZmxvd3M6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBsaWJzcWw6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBzZXJ2ZXI6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTURcIiwgXCJjdXJsXCIsIFwiLWZcIiwgXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvXCJdXG4gICAgICBpbnRlcnZhbDogMTVzXG4gICAgICB0aW1lb3V0OiAxMHNcbiAgICAgIHJldHJpZXM6IDNcbiAgICAgIHN0YXJ0X3BlcmlvZDogNDVzXG5cbiAgc3RhdHVzLXBhZ2U6XG4gICAgaW1hZ2U6IGdoY3IuaW8vb3BlbnN0YXR1c2hxL29wZW5zdGF0dXMtc3RhdHVzLXBhZ2U6ZTFhOTgyNVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZXhwb3NlOlxuICAgICAgLSAzMDAwXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIE5PREVfRU5WPXByb2R1Y3Rpb25cbiAgICAgIC0gUE9SVD0zMDAwXG4gICAgICAtIEhPU1ROQU1FPTAuMC4wLjBcbiAgICAgIC0gQVVUSF9UUlVTVF9IT1NUPXRydWVcbiAgICAgIC0gREFUQUJBU0VfVVJMPWh0dHA6Ly9saWJzcWw6ODA4MFxuICAgICAgLSBEQVRBQkFTRV9BVVRIX1RPS0VOPVxuICAgICAgLSBBVVRIX1NFQ1JFVD0ke0FVVEhfU0VDUkVUfVxuICAgICAgLSBTRUxGX0hPU1Q9dHJ1ZVxuICAgICAgLSBORVhUX1BVQkxJQ19VUkw9aHR0cHM6Ly8ke0RBU0hCT0FSRF9IT1NUfVxuICAgICAgLSBDUk9OX1NFQ1JFVD0ke0NST05fU0VDUkVUfVxuICAgICAgLSBSRVNFTkRfQVBJX0tFWT0ke1JFU0VORF9BUElfS0VZOi1yZV9zZWxmaG9zdF9wbGFjZWhvbGRlcn1cbiAgICAgIC0gVElOWUJJUkRfTk9PUD10cnVlXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIGRiLW1pZ3JhdGU6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5XG4gICAgICB3b3JrZmxvd3M6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBsaWJzcWw6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBzZXJ2ZXI6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTURcIiwgXCJjdXJsXCIsIFwiLWZcIiwgXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvXCJdXG4gICAgICBpbnRlcnZhbDogMTVzXG4gICAgICB0aW1lb3V0OiAxMHNcbiAgICAgIHJldHJpZXM6IDNcbiAgICAgIHN0YXJ0X3BlcmlvZDogNDVzXG5cbiAgIyBJbmdlc3Qgc2VydmVyIGZvciBwcml2YXRlLWxvY2F0aW9uIHByb2JlcyAodGhlIHByb2JlIGl0c2VsZixcbiAgIyBnaGNyLmlvL29wZW5zdGF0dXNocS9wcml2YXRlLWxvY2F0aW9uLCBydW5zIHdoZXJldmVyIHlvdSBtb25pdG9yIGZyb20pLlxuICBwcml2YXRlLWxvY2F0aW9uOlxuICAgIGltYWdlOiBnaGNyLmlvL29wZW5zdGF0dXNocS9vcGVuc3RhdHVzLXByaXZhdGUtbG9jYXRpb246ZTFhOTgyNVxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZXhwb3NlOlxuICAgICAgLSA4MDgwXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIFBPUlQ9ODA4MFxuICAgICAgLSBHSU5fTU9ERT1yZWxlYXNlXG4gICAgICAtIERCX1VSTD1odHRwOi8vbGlic3FsOjgwODBcbiAgICAgIC0gV09SS0ZMT1dTX1VSTD1odHRwOi8vd29ya2Zsb3dzOjMwMDBcbiAgICAgIC0gQ1JPTl9TRUNSRVQ9JHtDUk9OX1NFQ1JFVH1cbiAgICAgIC0gVElOWUJJUkRfVVJMPSR7VElOWUJJUkRfVVJMfVxuICAgICAgLSBUSU5ZQklSRF9UT0tFTj0ke1RJTllCSVJEX1RPS0VOfVxuICAgIGRlcGVuZHNfb246XG4gICAgICBzZXJ2ZXI6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTURcIiwgXCJ3Z2V0XCIsIFwiLS1zcGlkZXJcIiwgXCItcVwiLCBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9oZWFsdGhcIl1cbiAgICAgIGludGVydmFsOiAxNXNcbiAgICAgIHRpbWVvdXQ6IDEwc1xuICAgICAgcmV0cmllczogM1xuICAgICAgc3RhcnRfcGVyaW9kOiAzMHNcblxudm9sdW1lczpcbiAgbGlic3FsLWRhdGE6XG4gIHdvcmtmbG93cy1kYXRhOiIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxuZGFzaGJvYXJkX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbnN0YXR1c19wYWdlX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbmF1dGhfc2VjcmV0ID0gXCIke2Jhc2U2NDozMn1cIlxuY3Jvbl9zZWNyZXQgPSBcIiR7cGFzc3dvcmQ6MzJ9XCJcbnN1cGVyX2FkbWluX3Rva2VuID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5cbltjb25maWddXG5cbiMgRGFzaGJvYXJkIChhZG1pbiBVSSDigJQgbG9nIGluIGhlcmUpXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJkYXNoYm9hcmRcIlxucG9ydCA9IDMwMDBcbmhvc3QgPSBcIiR7ZGFzaGJvYXJkX2RvbWFpbn1cIlxuXG4jIFB1YmxpYyBzdGF0dXMgcGFnZXMgKHNlcnZlZCBhdCAvPHBhZ2Utc2x1Zz4pXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJzdGF0dXMtcGFnZVwiXG5wb3J0ID0gMzAwMFxuaG9zdCA9IFwiJHtzdGF0dXNfcGFnZV9kb21haW59XCJcblxuW2NvbmZpZy5lbnZdXG5EQVNIQk9BUkRfSE9TVCA9IFwiJHtkYXNoYm9hcmRfZG9tYWlufVwiXG5TVEFUVVNfUEFHRV9IT1NUID0gXCIke3N0YXR1c19wYWdlX2RvbWFpbn1cIlxuQVVUSF9TRUNSRVQgPSBcIiR7YXV0aF9zZWNyZXR9XCJcbkNST05fU0VDUkVUID0gXCIke2Nyb25fc2VjcmV0fVwiXG5TVVBFUl9BRE1JTl9UT0tFTiA9IFwiJHtzdXBlcl9hZG1pbl90b2tlbn1cIlxuIyBPcHRpb25hbDogUmVzZW5kIEFQSSBrZXkgZm9yIG91dGdvaW5nIGUtbWFpbHMuIFdpdGhvdXQgaXQsIG1hZ2ljLWxpbmtcbiMgbG9naW4gVVJMcyBhcmUgcHJpbnRlZCB0byB0aGUgZGFzaGJvYXJkIGNvbnRhaW5lciBsb2dzIGluc3RlYWQuXG5SRVNFTkRfQVBJX0tFWSA9IFwiXCJcbiMgT3B0aW9uYWw6IFRpbnliaXJkIGFuYWx5dGljcyBmb3IgdGhlIHByaXZhdGUtbG9jYXRpb24gaW5nZXN0IHNlcnZlclxuIyAoc2VlIGluc3RydWN0aW9ucyDigJQgYW5hbHl0aWNzIGFyZSBkaXNhYmxlZC9uby1vcCBieSBkZWZhdWx0KVxuVElOWUJJUkRfVVJMID0gXCJcIlxuVElOWUJJUkRfVE9LRU4gPSBcIlwiIgp9

Configuration

The exact Docker Compose and template configuration this template deploys.

Instructions

OpenStatus

OpenStatus is deployed here in self-hosted mode following the official Docker setup (DOCKER.md / docker-compose.github-packages.yaml upstream), with all app images pinned to the same upstream commit (e1a9825).

Services

ServicePurpose
dashboardAdmin UI (your first domain)
status-pagePublic status pages (your second domain, pages served at /<slug>)
serverAPI backend (tRPC / public API)
workflowsBackground jobs / alerting
libsqlLocal libSQL (Turso) database — no cloud account needed
db-migrateOne-shot migration runner (built from the pinned upstream commit, exits after applying)
private-locationIngest server that receives check results from your monitoring probes

Database migrations run automatically on every deploy (the one-shot db-migrate service is idempotent).

Note: db-migrate is built from source (upstream publishes no image for it), so the first deployment takes a few extra minutes while it builds.

First login

  1. Open the dashboard domain and choose magic link login with your e-mail.
  2. If you did not configure RESEND_API_KEY, the magic link is not e-mailed — it is printed to the dashboard service logs. Open the dashboard container logs in Dokploy and copy the >>> Magic Link: ... URL into your browser. If the printed link starts with http://0.0.0.0:3000, replace that host with your dashboard domain before opening it. (Optionally, once HTTPS is enabled on your dashboard domain, you can add AUTH_URL=https://<your-dashboard-domain> to the dashboard service in the compose file so links are generated with the right host — do not set it to an empty value or a plain-HTTP domain, as that breaks the auth flow.)
  3. Create a workspace and a status page with a slug; it becomes available at https://<status-page-domain>/<slug>.

Running checks (probes)

Self-hosted OpenStatus runs monitors through private location probes (ghcr.io/openstatushq/private-location) that you deploy wherever you want to monitor from. Point the probe at this stack's ingest server:

  • Expose the private-location service (port 8080) on a domain in Dokploy, and
  • set OPENSTATUS_INGEST_URL on the probe to that URL, together with the OPENSTATUS_KEY you create in the dashboard.

See the upstream guide: https://www.openstatus.dev/docs (Guides → How to Self-Host openstatus).

Analytics (optional)

Tinybird analytics are disabled by default (TINYBIRD_NOOP=true), so charts show no data but everything else works. To enable analytics, run a Tinybird Local container or use Tinybird Cloud, deploy the packages/tinybird project with the tb CLI, and set TINYBIRD_URL / TINYBIRD_TOKEN in the environment (plus TINY_BIRD_API_KEY and remove TINYBIRD_NOOP) — see the upstream self-hosting guide.

Related Templates

Self-host OpenStatus in minutes

Dokploy is a free, open source deployment platform. Deploy OpenStatus and 532+ other templates on your own infrastructure with a single click.