Deploy Metabase Permissions
collection and data permissions in Metabase
Just deployed
/var/lib/postgresql/data
metabase/metabase
Just deployed
Deploy and Host self hosted Metabase Permissions (Open-Source BI) on Railway
Running Metabase without thinking through permissions is how a curious intern accidentally emails a sales forecast to the whole company. The OSS version gives you real, working collection and data sandboxes, but the moment someone asks for SSO or row-level restrictions tied to user attributes, you hit the AGPL ceiling and start reading Pro pricing pages. This guide walks through what the self-hosted permission model actually does on Railway, where it breaks, and how to run it without locking yourself into a managed contract.
About Hosting Metabase Permissions open-source software on Railway (self hosted Metabase template)
You deploy the same metabase/metabase image you would run anywhere else. Railway just removes the part where you babysit a VPS, patch Docker, and wonder if your Postgres backups actually restore. The template pairs the Metabase container with a dedicated Postgres service for the application database, not for your analytics data. That distinction matters more than most people expect: the app DB stores users, collections, dashboards, and permission graphs, while the actual warehouse stays wherever it already lives.
Railway's environment variable editor is where the permission-relevant settings live. MB_ENCRYPTION_SECRET_KEY has to stay stable across redeploys or Metabase can no longer decrypt stored connection details and sandbox settings. I have seen that exact mistake turn a routine deploy into a 2 a.m. incident where every database connection shows a cryptic "encryption key wrong" error. Set it once, store it somewhere safe, and never rotate it casually.
The app listens on port 3000 and Railway uses the health check at /api/health. That endpoint returns 200 when Metabase is up but does not tell you whether migrations are still running. During first boot the container runs schema migrations against the app Postgres before the web UI accepts logins. If you hit the health check too early during a cold start, it looks alive while the setup wizard is still mid-migration.
Why Deploy Metabase Permissions, the Tableau alternative on Railway (Railway Free Trial)
Tableau licenses make finance teams flinch, and Tableau Cloud puts your permission model behind a login you do not control. Self-hosted Metabase gives you the opposite trade: you own the server, the user table, the collection tree, and the database credentials. For a small analytics team that needs to say "marketing sees only marketing dashboards" without a procurement cycle, that control is the whole point.
The OSS permission system covers collection-level access and database-level sandboxing. You can create groups, add users to them, and set "view" or "edit" on specific collections. You can also restrict a group to only query certain tables in a connected Postgres or MySQL database. That handles most internal BI use cases without paying a cent in software fees.
Railway's GitHub student or free trial gives you $5 of credit to test the stack before committing. A small Metabase container plus the companion Postgres typically lands in the $5 to $15 per month range on Hobby, depending on RAM and whether you enable scheduled refreshes. Compare that to Tableau Creator at $75 per user per month and the math stops being theoretical.
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Metabase Permissions on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
Railway vs Other Hosting Providers and VPS for Metabase Permissions self hosting
Railway's advantage is that you do not configure an OS, a reverse proxy, or Postgres replication yourself. DigitalOcean and Hetzner give you raw VPS capacity and charge less at scale, but you become the sysadmin. AWS gives you IAM, VPC, and a thousand knobs, most of which you do not need for a single-node BI tool.
| Provider | Setup effort | Permission control surface | Ongoing maintenance | Cost profile |
|---|---|---|---|---|
| DigitalOcean | Medium: Droplet + Docker + Postgres | You manage OS users and Metabase groups | You patch everything | Predictable, low at small scale |
| AWS | High: VPC, RDS, ECS, IAM, ALB | Very broad but complex | High unless you automate | Scales with services, easy to overprovision |
| Hetzner | Medium: dedicated or cloud VM | Same as DO, cheaper at scale | You own all updates | Lowest raw compute cost |
| Railway | Low: template + env vars | Metabase groups plus Railway service tokens | Railway handles infra patching | $5–15/mo typical small stack |
Railway wins when you want the permission project to be about Metabase, not about Linux. The VPS options win when you already have an infrastructure team or need to run Metabase in a region Railway does not serve.
Common Use Cases for hosted Metabase Permissions
A SaaS company with a dozen internal teams is the classic case. Product wants event data, support wants ticket metrics, and finance wants revenue. One Metabase instance with collection permissions keeps each team inside their folder tree without provisioning three separate BI tools.
Data consultancies use self-hosted Metabase as a client-reporting portal. Each client gets a group, a collection, and a database sandbox that limits them to their own schema. The OSS version supports this as long as you do not need per-client SSO domains or row-level filtering based on the logged-in user's email domain.
Startups that outgrew spreadsheets but refuse to pay per-seat BI pricing deploy Metabase on Railway and connect their production Postgres read replica. Collection permissions stop the marketing manager from seeing salary tables in the HR schema, while data sandboxes restrict what SQL the support group can run against the customer database.
A second use case is embedded analytics prototypes. Developers test Metabase's public embed and signed embed endpoints with a self-hosted instance before deciding whether the Pro interactive embedding features justify the upgrade.
Dependencies for Metabase Permissions Docker hosted on Railway
The only hard dependency is a Postgres database for the Metabase application state. You can run Metabase with the embedded H2 file database, and the container will happily start that way, but the first redeploy wipes every user, collection, dashboard, and permission group you created. H2 is a demo mode. Treat it as such.
The template expects the companion Postgres service to be reachable over Railway's internal networking. Metabase connects using the standard MB_DB_TYPE=postgres plus host, port, user, password, and database name variables. Railway's template pre-fills these from the attached Postgres service, so you usually do not have to hand-edit connection strings.
Analytics databases are separate. After the setup wizard creates your admin user, you go to Admin → Databases and add each warehouse or application database you want to query. Those connections have their own credentials and their own permission sandboxes, independent of the app Postgres that stores Metabase's internal metadata.
Deployment Dependencies for Managed Metabase Permissions Service (Business Intelligence)
The Railway template deploys two services: the Metabase container from the official Docker image and a Postgres instance from the ghcr.io/railwayapp-templates/postgres-ssl image. Postgres 17 is a reasonable current choice, though Metabase supports several major versions back. The Postgres service stores everything about your Metabase installation: users, groups, collection trees, dashboards, pulses, and the settings table that holds MB_ENCRYPTION_SECRET_KEY and site configuration.
A volume must be attached to the Postgres service. Railway handles this automatically in the template, but if you are building manually, a Postgres service without a volume is just as ephemeral as H2. The volume is what makes your permission model survive redeploys and container restarts.
Implementation Details for Metabase Permissions (Using Metabase official docker image)
The official image is metabase/metabase, with tags like v0.63.x or latest. Pinning a specific minor version is the safer move for production because Metabase migrations run on boot and a surprise major bump can change permission behavior. I have seen teams pin latest, wake up to a new navigation structure, and spend a morning explaining to users why the "Save" button moved.
The container needs port 3000 exposed. Railway maps this to a public HTTPS URL automatically. Set MB_SITE_URL to that public URL. If you leave it blank, password reset links, dashboard email subscriptions, and embedded iframes will point to localhost:3000, which is not useful for anyone but the person sitting on the server.
MB_ENCRYPTION_SECRET_KEY should be a long random string. Metabase uses it to encrypt database connection passwords and other secrets at rest in the app Postgres. Losing the key means re-entering every database connection and re-saving every sandbox rule.
How does Metabase Permissions compare against other Business Intelligence platforms
Permission models are where BI tools reveal their philosophy. Tableau and Looker assume a centralized admin who manages content and access. Power BI ties permissions to the Microsoft identity stack. Superset gives you granular security but expects you to configure it. Metabase splits the difference: collections are intuitive enough for a non-admin to understand, while data sandboxes require SQL-level thinking.
Metabase Permissions vs Tableau (Tableau Alternative)
Tableau's permission model is deeper and more flexible than Metabase OSS. You get project-level permission
Template Content
metabase/metabase
metabase/metabase