---
title: "Deploy OpenMetadata"
description: "OpenMetadata with search, PostgreSQL, and managed ingestion workflows."
category: "Analytics"
url: https://railway.com/deploy/openmetadata
---

# Deploy OpenMetadata

OpenMetadata with search, PostgreSQL, and managed ingestion workflows.

**[Deploy OpenMetadata on Railway](https://railway.com/template/openmetadata)**

- **Creator:** Anton Orel's Projects
- **Category:** Analytics

## Template content

### PostgreSQL

- **Image:** openmetadata/postgresql@sha256:5ce479f417601dbc288bec8fae48312beec03c56847d9f5bb706f871b4e0853a
- **Start command:** `postgres --work_mem=20MB`

### Elasticsearch

- **Image:** elasticsearch@sha256:d6dbcf006047aafb87719e6e0b673c2067a760c902bd207059e84b27b22e2bb2
- **Start command:** `/bin/bash -ec 'chown 1000:0 /usr/share/elasticsearch/data && exec /usr/sbin/chroot --userspec=1000:0 / /usr/local/bin/docker-entrypoint.sh eswrapper'`
- **Health check:** /_cluster/health

### OpenMetadata

- **Image:** openmetadata/server@sha256:eaa318584c52d4a492a2c56c95818b5564c6ea28b2e9695ac532c856b2c61bc9
- **Start command:** `/bin/bash -ec "if [[ ! -s /data/private_key.der || ! -s /data/public_key.der ]]; then printf '%s' 'aW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CmltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CmltcG9ydCBqYXZhLnNlY3VyaXR5LktleVBhaXJHZW5lcmF0b3I7CgpwdWJsaWMgZmluYWwgY2xhc3MgR2VuZXJhdGVLZXlzIHsKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgIEtleVBhaXJHZW5lcmF0b3IgZ2VuZXJhdG9yID0gS2V5UGFpckdlbmVyYXRvci5nZXRJbnN0YW5jZSgiUlNBIik7CiAgICBnZW5lcmF0b3IuaW5pdGlhbGl6ZSgyMDQ4KTsKICAgIHZhciBrZXlzID0gZ2VuZXJhdG9yLmdlbmVyYXRlS2V5UGFpcigpOwogICAgRmlsZXMud3JpdGUoUGF0aC5vZihhcmdzWzBdKSwga2V5cy5nZXRQcml2YXRlKCkuZ2V0RW5jb2RlZCgpKTsKICAgIEZpbGVzLndyaXRlKFBhdGgub2YoYXJnc1sxXSksIGtleXMuZ2V0UHVibGljKCkuZ2V0RW5jb2RlZCgpKTsKICB9Cn0K' | base64 -d > /tmp/GenerateKeys.java; java /tmp/GenerateKeys.java /data/private_key.der /data/public_key.der; chown 1000:1000 /data/private_key.der /data/public_key.der; chmod 600 /data/private_key.der; chmod 644 /data/public_key.der; fi; printf '%s' 'aW1wb3J0IGphdmEubmV0LlVSSTsKaW1wb3J0IGphdmEubmV0Lmh0dHAuSHR0cENsaWVudDsKaW1wb3J0IGphdmEubmV0Lmh0dHAuSHR0cFJlcXVlc3Q7CmltcG9ydCBqYXZhLm5ldC5odHRwLkh0dHBSZXNwb25zZTsKaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKaW1wb3J0IGphdmEudGltZS5EdXJhdGlvbjsKaW1wb3J0IGphdmEudXRpbC5CYXNlNjQ7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwoKY2xhc3MgUm90YXRlQWRtaW4gewogIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQVNFX1VSTCA9CiAgICAgIFN5c3RlbS5nZXRlbnYoKS5nZXRPckRlZmF1bHQoCiAgICAgICAgICAiT1BFTk1FVEFEQVRBX1JPVEFUSU9OX0JBU0VfVVJMIiwgImh0dHA6Ly9sb2NhbGhvc3Q6ODU4NSIpOwogIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBRE1JTl9FTUFJTCA9ICJhZG1pbkBvcGVuLW1ldGFkYXRhLm9yZyI7CiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBBQ0NFU1NfVE9LRU4gPQogICAgICBQYXR0ZXJuLmNvbXBpbGUoIlwiYWNjZXNzVG9rZW5cIlxccyo6XFxzKlwiKFteXCJdKylcIiIpOwogIHByaXZhdGUgc3RhdGljIGZpbmFsIEh0dHBDbGllbnQgSFRUUCA9CiAgICAgIEh0dHBDbGllbnQubmV3QnVpbGRlcigpLmNvbm5lY3RUaW1lb3V0KER1cmF0aW9uLm9mU2Vjb25kcyg1KSkuYnVpbGQoKTsKCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICBTdHJpbmcgdGFyZ2V0UGFzc3dvcmQgPSBTeXN0ZW0uZ2V0ZW52KCJPUEVOTUVUQURBVEFfQURNSU5fUEFTU1dPUkQiKTsKICAgIGlmICh0YXJnZXRQYXNzd29yZCA9PSBudWxsIHx8IHRhcmdldFBhc3N3b3JkLmxlbmd0aCgpIDwgOCB8fCB0YXJnZXRQYXNzd29yZC5sZW5ndGgoKSA+IDU2KSB7CiAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCiAgICAgICAgICAiT1BFTk1FVEFEQVRBX0FETUlOX1BBU1NXT1JEIG11c3QgY29udGFpbiA4IHRvIDU2IGNoYXJhY3RlcnMiKTsKICAgIH0KCiAgICB3YWl0Rm9yQXBpKCk7CgogICAgU3RyaW5nIGRlZmF1bHRUb2tlbiA9IGxvZ2luKCJhZG1pbiIpOwogICAgaWYgKGRlZmF1bHRUb2tlbiAhPSBudWxsKSB7CiAgICAgIGNoYW5nZVBhc3N3b3JkKGRlZmF1bHRUb2tlbiwgdGFyZ2V0UGFzc3dvcmQpOwogICAgfQoKICAgIGlmIChsb2dpbih0YXJnZXRQYXNzd29yZCkgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAogICAgICAgICAgIlRoZSBnZW5lcmF0ZWQgYWRtaW4gcGFzc3dvcmQgd2FzIG5vdCBhY2NlcHRlZCBhZnRlciByb3RhdGlvbiIpOwogICAgfQoKICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3Blbk1ldGFkYXRhIGRlZmF1bHQgYWRtaW5pc3RyYXRvciBwYXNzd29yZCBpcyByb3RhdGVkLiIpOwogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB3YWl0Rm9yQXBpKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICBIdHRwUmVxdWVzdCByZXF1ZXN0ID0KICAgICAgICBIdHRwUmVxdWVzdC5uZXdCdWlsZGVyKFVSSS5jcmVhdGUoQkFTRV9VUkwgKyAiL2FwaS92MS9zeXN0ZW0vdmVyc2lvbiIpKQogICAgICAgICAgICAudGltZW91dChEdXJhdGlvbi5vZlNlY29uZHMoNSkpCiAgICAgICAgICAgIC5HRVQoKQogICAgICAgICAgICAuYnVpbGQoKTsKCiAgICBmb3IgKGludCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDMwMDsgYXR0ZW1wdCsrKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKEhUVFAuc2VuZChyZXF1ZXN0LCBIdHRwUmVzcG9uc2UuQm9keUhhbmRsZXJzLmRpc2NhcmRpbmcoKSkuc3RhdHVzQ29kZSgpID09IDIwMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKICAgICAgICAvLyBUaGUgc2VydmVyIGlzIHN0aWxsIHN0YXJ0aW5nLgogICAgICB9CiAgICAgIFRocmVhZC5zbGVlcCgyXzAwMCk7CiAgICB9CgogICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiT3Blbk1ldGFkYXRhIEFQSSBkaWQgbm90IGJlY29tZSByZWFkeSBmb3IgYWRtaW4gcm90YXRpb24iKTsKICB9CgogIHByaXZhdGUgc3RhdGljIFN0cmluZyBsb2dpbihTdHJpbmcgcGFzc3dvcmQpIHRocm93cyBFeGNlcHRpb24gewogICAgU3RyaW5nIGVuY29kZWRQYXNzd29yZCA9CiAgICAgICAgQmFzZTY0LmdldEVuY29kZXIoKS5lbmNvZGVUb1N0cmluZyhwYXNzd29yZC5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVURl84KSk7CiAgICBTdHJpbmcgYm9keSA9CiAgICAgICAgIntcImVtYWlsXCI6XCIiCiAgICAgICAgICAgICsgQURNSU5fRU1BSUwKICAgICAgICAgICAgKyAiXCIsXCJwYXNzd29yZFwiOlwiIgogICAgICAgICAgICArIGVuY29kZWRQYXNzd29yZAogICAgICAgICAgICArICJcIn0iOwogICAgSHR0cFJlcXVlc3QgcmVxdWVzdCA9CiAgICAgICAgSHR0cFJlcXVlc3QubmV3QnVpbGRlcihVUkkuY3JlYXRlKEJBU0VfVVJMICsgIi9hcGkvdjEvdXNlcnMvbG9naW4iKSkKICAgICAgICAgICAgLnRpbWVvdXQoRHVyYXRpb24ub2ZTZWNvbmRzKDEwKSkKICAgICAgICAgICAgLmhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKQogICAgICAgICAgICAuUE9TVChIdHRwUmVxdWVzdC5Cb2R5UHVibGlzaGVycy5vZlN0cmluZyhib2R5KSkKICAgICAgICAgICAgLmJ1aWxkKCk7CiAgICBIdHRwUmVzcG9uc2U8U3RyaW5nPiByZXNwb25zZSA9IEhUVFAuc2VuZChyZXF1ZXN0LCBIdHRwUmVzcG9uc2UuQm9keUhhbmRsZXJzLm9mU3RyaW5nKCkpOwoKICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlKCkgIT0gMjAwKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIE1hdGNoZXIgdG9rZW4gPSBBQ0NFU1NfVE9LRU4ubWF0Y2hlcihyZXNwb25zZS5ib2R5KCkpOwogICAgcmV0dXJuIHRva2VuLmZpbmQoKSA/IHRva2VuLmdyb3VwKDEpIDogbnVsbDsKICB9CgogIHByaXZhdGUgc3RhdGljIHZvaWQgY2hhbmdlUGFzc3dvcmQoU3RyaW5nIHRva2VuLCBTdHJpbmcgdGFyZ2V0UGFzc3dvcmQpIHRocm93cyBFeGNlcHRpb24gewogICAgU3RyaW5nIGVzY2FwZWRQYXNzd29yZCA9IGpzb25Fc2NhcGUodGFyZ2V0UGFzc3dvcmQpOwogICAgU3RyaW5nIGJvZHkgPQogICAgICAgICJ7XCJ1c2VybmFtZVwiOlwiYWRtaW5cIixcIm9sZFBhc3N3b3JkXCI6XCJhZG1pblwiLFwibmV3UGFzc3dvcmRcIjpcIiIKICAgICAgICAgICAgKyBlc2NhcGVkUGFzc3dvcmQKICAgICAgICAgICAgKyAiXCIsXCJjb25maXJtUGFzc3dvcmRcIjpcIiIKICAgICAgICAgICAgKyBlc2NhcGVkUGFzc3dvcmQKICAgICAgICAgICAgKyAiXCIsXCJyZXF1ZXN0VHlwZVwiOlwiVVNFUlwifSI7CiAgICBIdHRwUmVxdWVzdCByZXF1ZXN0ID0KICAgICAgICBIdHRwUmVxdWVzdC5uZXdCdWlsZGVyKFVSSS5jcmVhdGUoQkFTRV9VUkwgKyAiL2FwaS92MS91c2Vycy9jaGFuZ2VQYXNzd29yZCIpKQogICAgICAgICAgICAudGltZW91dChEdXJhdGlvbi5vZlNlY29uZHMoMTApKQogICAgICAgICAgICAuaGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpCiAgICAgICAgICAgIC5oZWFkZXIoIkF1dGhvcml6YXRpb24iLCAiQmVhcmVyICIgKyB0b2tlbikKICAgICAgICAgICAgLlBVVChIdHRwUmVxdWVzdC5Cb2R5UHVibGlzaGVycy5vZlN0cmluZyhib2R5KSkKICAgICAgICAgICAgLmJ1aWxkKCk7CiAgICBIdHRwUmVzcG9uc2U8U3RyaW5nPiByZXNwb25zZSA9IEhUVFAuc2VuZChyZXF1ZXN0LCBIdHRwUmVzcG9uc2UuQm9keUhhbmRsZXJzLm9mU3RyaW5nKCkpOwoKICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlKCkgIT0gMjAwKSB7CiAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCiAgICAgICAgICAiT3Blbk1ldGFkYXRhIHJlamVjdGVkIHRoZSBhZG1pbmlzdHJhdG9yIHBhc3N3b3JkIHJvdGF0aW9uIHdpdGggSFRUUCAiCiAgICAgICAgICAgICAgKyByZXNwb25zZS5zdGF0dXNDb2RlKCkpOwogICAgfQogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGpzb25Fc2NhcGUoU3RyaW5nIHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUKICAgICAgICAucmVwbGFjZSgiXFwiLCAiXFxcXCIpCiAgICAgICAgLnJlcGxhY2UoIlwiIiwgIlxcXCIiKQogICAgICAgIC5yZXBsYWNlKCJcbiIsICJcXG4iKQogICAgICAgIC5yZXBsYWNlKCJcciIsICJcXHIiKQogICAgICAgIC5yZXBsYWNlKCJcdCIsICJcXHQiKTsKICB9Cn0K' | base64 -d > /tmp/RotateAdmin.java; printf '%s' 'aW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CmltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CmltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOwppbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKCnB1YmxpYyBmaW5hbCBjbGFzcyBCb290c3RyYXBGbG93YWJsZSB7CiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0aCBGTE9XQUJMRV9TQ0hFTUEgPQogICAgICBQYXRoLm9mKAogICAgICAgICAgIi9vcHQvb3Blbm1ldGFkYXRhL2Jvb3RzdHJhcC9zcWwvbWlncmF0aW9ucy9uYXRpdmUvMS42LjAvcG9zdGdyZXMvc2NoZW1hQ2hhbmdlcy5zcWwiKTsKICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXRoIEZMT1dBQkxFX0JBVENIX1NDSEVNQSA9CiAgICAgIFBhdGgub2YoCiAgICAgICAgICAiL29wdC9vcGVubWV0YWRhdGEvYm9vdHN0cmFwL3NxbC9taWdyYXRpb25zL25hdGl2ZS8xLjExLjEvcG9zdGdyZXMvc2NoZW1hQ2hhbmdlcy5zcWwiKTsKICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkxPV0FCTEVfU1RBUlQgPSAiLS0gRmxvd2FibGUgUmVsYXRlZCBUYWJsZXMiOwogIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGTE9XQUJMRV9FTkQgPQogICAgICAiLS0gQ2xlYW4gZGFuZ2xpbmcgd29ya2Zsb3dzIG5vdCByZW1vdmVkIGFmdGVyIHRlc3QgY29ubmVjdGlvbiI7CiAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZMT1dBQkxFX0JBVENIX0VORCA9CiAgICAgICItLSBVcGRhdGUgd29ya2Zsb3cgc2V0dGluZ3Mgd2l0aCBuZXcgaGlzdG9yeSBjbGVhbnVwIGNvbmZpZ3VyYXRpb24gZmllbGRzIjsKCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICBTdHJpbmcgamRiY1VybCA9CiAgICAgICAgImpkYmM6cG9zdGdyZXNxbDovLyIKICAgICAgICAgICAgKyByZXF1aXJlZCgiREJfSE9TVCIpCiAgICAgICAgICAgICsgIjoiCiAgICAgICAgICAgICsgcmVxdWlyZWQoIkRCX1BPUlQiKQogICAgICAgICAgICArICIvIgogICAgICAgICAgICArIHJlcXVpcmVkKCJPTV9EQVRBQkFTRSIpOwoKICAgIHRyeSAoQ29ubmVjdGlvbiBjb25uZWN0aW9uID0KICAgICAgICBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oCiAgICAgICAgICAgIGpkYmNVcmwsIHJlcXVpcmVkKCJEQl9VU0VSIiksIHJlcXVpcmVkKCJEQl9VU0VSX1BBU1NXT1JEIikpKSB7CiAgICAgIGNvbm5lY3Rpb24uc2V0QXV0b0NvbW1pdChmYWxzZSk7CgogICAgICBpZiAoYXJncy5sZW5ndGggPT0gMSAmJiBhcmdzWzBdLmVxdWFscygiY29yZS1zY2hlbWEtZXhpc3RzIikpIHsKICAgICAgICBTeXN0ZW0uZXhpdCh0YWJsZUV4aXN0cyhjb25uZWN0aW9uLCAib3Blbm1ldGFkYXRhX3NldHRpbmdzIikgPyAwIDogMTApOwogICAgICB9CgogICAgICBpZiAoIXRhYmxlRXhpc3RzKGNvbm5lY3Rpb24sICJhY3RfZ2VfcHJvcGVydHkiKSkgewogICAgICAgIFN0cmluZyBtaWdyYXRpb24gPSBGaWxlcy5yZWFkU3RyaW5nKEZMT1dBQkxFX1NDSEVNQSk7CiAgICAgICAgaW50IHN0YXJ0ID0gbWlncmF0aW9uLmluZGV4T2YoRkxPV0FCTEVfU1RBUlQpOwogICAgICAgIGludCBlbmQgPSBtaWdyYXRpb24uaW5kZXhPZihGTE9XQUJMRV9FTkQsIHN0YXJ0KTsKICAgICAgICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA8IDApIHsKICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgdGhlIHVwc3RyZWFtIEZsb3dhYmxlIHNjaGVtYSBibG9jayIpOwogICAgICAgIH0KICAgICAgICBleGVjdXRlKGNvbm5lY3Rpb24sIG1pZ3JhdGlvbi5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpOwogICAgICB9CgogICAgICBpZiAoIXRhYmxlRXhpc3RzKGNvbm5lY3Rpb24sICJmbHdfcnVfYmF0Y2giKSkgewogICAgICAgIFN0cmluZyBiYXRjaE1pZ3JhdGlvbiA9IEZpbGVzLnJlYWRTdHJpbmcoRkxPV0FCTEVfQkFUQ0hfU0NIRU1BKTsKICAgICAgICBpbnQgZW5kID0gYmF0Y2hNaWdyYXRpb24uaW5kZXhPZihGTE9XQUJMRV9CQVRDSF9FTkQpOwogICAgICAgIGlmIChlbmQgPCAwKSB7CiAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIHRoZSB1cHN0cmVhbSBGbG93YWJsZSBiYXRjaCBzY2hlbWEgYmxvY2siKTsKICAgICAgICB9CiAgICAgICAgZXhlY3V0ZShjb25uZWN0aW9uLCBiYXRjaE1pZ3JhdGlvbi5zdWJzdHJpbmcoMCwgZW5kKSk7CiAgICAgIH0KCiAgICAgIGNvbm5lY3Rpb24uY29tbWl0KCk7CiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRmxvd2FibGUgd29ya2Zsb3cgc2NoZW1hIGlzIHJlYWR5LiIpOwogICAgfQogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB0YWJsZUV4aXN0cyhDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFN0cmluZyB0YWJsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICB0cnkgKFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBjb25uZWN0aW9uLmNyZWF0ZVN0YXRlbWVudCgpOwogICAgICAgIFJlc3VsdFNldCByZXN1bHQgPQogICAgICAgICAgICBzdGF0ZW1lbnQuZXhlY3V0ZVF1ZXJ5KAogICAgICAgICAgICAgICAgInNlbGVjdCB0b19yZWdjbGFzcygncHVibGljLiIgKyB0YWJsZS5yZXBsYWNlKCInIiwgIicnIikgKyAiJykgaXMgbm90IG51bGwiKSkgewogICAgICByZXR1cm4gcmVzdWx0Lm5leHQoKSAmJiByZXN1bHQuZ2V0Qm9vbGVhbigxKTsKICAgIH0KICB9CgogIHByaXZhdGUgc3RhdGljIHZvaWQgZXhlY3V0ZShDb25uZWN0aW9uIGNvbm5lY3Rpb24sIFN0cmluZyBzcWwpIHRocm93cyBFeGNlcHRpb24gewogICAgdHJ5IChTdGF0ZW1lbnQgc3RhdGVtZW50ID0gY29ubmVjdGlvbi5jcmVhdGVTdGF0ZW1lbnQoKSkgewogICAgICBzdGF0ZW1lbnQuZXhlY3V0ZShzcWwpOwogICAgfQogIH0KCiAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHJlcXVpcmVkKFN0cmluZyBuYW1lKSB7CiAgICBTdHJpbmcgdmFsdWUgPSBTeXN0ZW0uZ2V0ZW52KG5hbWUpOwogICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUuaXNCbGFuaygpKSB7CiAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk1pc3NpbmcgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgIiArIG5hbWUpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KfQo=' | base64 -d > /tmp/BootstrapFlowable.java; printf '%s' 'IyEvdXNyL2Jpbi9lbnYgYmFzaApzZXQgLWV1byBwaXBlZmFpbAoKYWRtaW5fcm90YXRvcl9wYXRoPSIke0FETUlOX1JPVEFUT1JfUEFUSDotL3RtcC9Sb3RhdGVBZG1pbi5qYXZhfSIKZmxvd2FibGVfYm9vdHN0cmFwX3BhdGg9IiR7RkxPV0FCTEVfQk9PVFNUUkFQX1BBVEg6LS90bXAvQm9vdHN0cmFwRmxvd2FibGUuamF2YX0iCgppZiBqYXZhIC0tY2xhc3MtcGF0aCAiL29wdC9vcGVubWV0YWRhdGEvbGlicy8qIiBcCiAgIiR7Zmxvd2FibGVfYm9vdHN0cmFwX3BhdGh9IiBjb3JlLXNjaGVtYS1leGlzdHM7IHRoZW4KICAuL2Jvb3RzdHJhcC9vcGVubWV0YWRhdGEtb3BzLnNoIG1pZ3JhdGUKZWxzZQogIHByaW50ZiAnREVMRVRFXG4nIHwgLi9ib290c3RyYXAvb3Blbm1ldGFkYXRhLW9wcy5zaCBkcm9wLWNyZWF0ZQpmaQpqYXZhIC0tY2xhc3MtcGF0aCAiL29wdC9vcGVubWV0YWRhdGEvbGlicy8qIiAiJHtmbG93YWJsZV9ib290c3RyYXBfcGF0aH0iClNFUlZFUl9QT1JUPTE4NTg1IFNFUlZFUl9BRE1JTl9QT1JUPTE4NTg2IC9vcGVubWV0YWRhdGEtc3RhcnQuc2ggJgpib290c3RyYXBfcGlkPSQhCgpzdG9wX2Jvb3RzdHJhcF9zZXJ2ZXIoKSB7CiAga2lsbCAiJHtib290c3RyYXBfcGlkfSIgMj4vZGV2L251bGwgfHwgdHJ1ZQp9CnRyYXAgc3RvcF9ib290c3RyYXBfc2VydmVyIElOVCBURVJNCgppZiAhIE9QRU5NRVRBREFUQV9ST1RBVElPTl9CQVNFX1VSTD1odHRwOi8vbG9jYWxob3N0OjE4NTg1IGphdmEgIiR7YWRtaW5fcm90YXRvcl9wYXRofSI7IHRoZW4KICBzdG9wX2Jvb3RzdHJhcF9zZXJ2ZXIKICB3YWl0ICIke2Jvb3RzdHJhcF9waWR9IiB8fCB0cnVlCiAgZXhpdCAxCmZpCgpzdG9wX2Jvb3RzdHJhcF9zZXJ2ZXIKd2FpdCAiJHtib290c3RyYXBfcGlkfSIgfHwgdHJ1ZQp0cmFwIC0gSU5UIFRFUk0KCmV4ZWMgL29wZW5tZXRhZGF0YS1zdGFydC5zaAo=' | base64 -d > /tmp/start-openmetadata.sh; chown 1000:1000 /tmp/RotateAdmin.java /tmp/BootstrapFlowable.java /tmp/start-openmetadata.sh; exec su -s /bin/bash openmetadata -c 'exec /bin/bash /tmp/start-openmetadata.sh'"`
- **Health check:** /healthcheck
- **Public domain:** Yes

### OpenMetadata Ingestion

- **Image:** openmetadata/ingestion@sha256:12e0cde89ecebdfa046bfbbb54d22c841f24e502159f82ece0062bf176f4088d
- **Start command:** `/bin/bash -ec 'mkdir -p /data/dag_generated_configs /data/dags /data/tmp && chown -R 50000:0 /data && chmod 0775 /data/dag_generated_configs /data/dags && chmod 1777 /data/tmp && rm -rf /opt/airflow/dag_generated_configs /opt/airflow/dags && ln -s /data/dag_generated_configs /opt/airflow/dag_generated_configs && ln -s /data/dags /opt/airflow/dags && exec runuser -u airflow -- /bin/bash /opt/airflow/ingestion_dependency.sh'`
- **Health check:** /api/v2/monitor/health

## Documentation

# Deploy and Host OpenMetadata with Railway

OpenMetadata is a data catalog and governance platform for discovering data assets, capturing lineage, managing ownership and glossary terms, and running metadata ingestion. This community template deploys the OpenMetadata 1.13.1 server and UI with its PostgreSQL, Elasticsearch, and Airflow ingestion dependencies. The server is Apache-2.0, while the ingestion component uses the source-available Collate Community License 1.0 and cannot be used to offer a service that competes with Collate.

## About Hosting OpenMetadata

This template translates OpenMetadata's supported PostgreSQL Docker topology into four Railway services connected over private networking. PostgreSQL and Elasticsearch receive persistent volumes, Airflow receives persistent DAG and generated-configuration volumes, and only the OpenMetadata UI/API is public. The stack is sized and documented for evaluation or small internal teams. OpenMetadata recommends externally managed database and search services for production, so users with availability or compliance requirements should migrate those dependencies before relying on the catalog.

## Common Use Cases

- Evaluate OpenMetadata against existing warehouses, BI tools, and pipelines.
- Run an internal catalog for a small data team.
- Explore lineage, ownership, glossary, and data-quality workflows.
- Test OpenMetadata APIs, connectors, and MCP integrations.

## Dependencies for OpenMetadata Hosting

- PostgreSQL stores OpenMetadata and Airflow state.
- Elasticsearch 9.3 provides catalog search.
- OpenMetadata Ingestion provides the Airflow-based workflow service.
- Four Railway volumes persist database, search, JWT keys, and a consolidated ingestion data directory containing DAGs, generated configuration, and temporary workflow state.

### Deployment Dependencies

The template uses immutable image digests from OpenMetadata `1.13.1-release` and Elasticsearch 9.3.0. OpenMetadata and Elasticsearch start with 512 MiB JVM heaps, but this topology does not fit Railway's 1 GiB-per-service Trial limit: Elasticsearch reached the memory ceiling after initially passing its smoke test. Use a plan that permits at least 2 GiB for Elasticsearch, and follow OpenMetadata's larger resource recommendations for real ingestion workloads. Startup rotates the upstream administrator password before opening the public listener; create a named administrator and remove the bootstrap `admin@open-metadata.org` account before connecting real data.

### Why Deploy OpenMetadata on Railway?

Railway gives the stack one private service network, persistent volumes, deployment health checks, and centralized logs without requiring a Kubernetes cluster. This makes the complete upstream topology easier to evaluate while keeping its operational and availability limits visible.


## Similar templates

- [Matomo Analytics + MariaDB](https://railway.com/deploy/matomo-analytics-mariadb) — Privacy-friendly analytics with MariaDB and persistent volumes.
- [Bugsink](https://railway.com/deploy/bugsink) — Self-hosted Error Tracking. Sentry-SDK compatible
- [SubTrackr](https://railway.com/deploy/bscottsubtrackr) — Self-hosted Subscription Tracker

Open this page in a browser: https://railway.com/deploy/openmetadata
