[{"data":1,"prerenderedAt":162},["ShallowReactive",2],{"seo-verification":3,"blog-how-to-self-host-metabase-on-a-vps-open-source-bi-dashboards-ma-en":6,"promo-bar-likely":113},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-how-to-self-host-metabase-on-a-vps-open-source-bi-dashboards-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":97,"ctaBody":98,"ctaButton":99,"ctaUrl":100,"relatedPosts":101},168,"how-to-self-host-metabase-on-a-vps-open-source-bi-dashboards",{"fr":12,"en":10,"ar":13,"es":14},"self-host-metabase-vps","استضافة-metabase-على-vps-لوحات-ذكاء-أعمال-مفتوحة-المصدر","alojar-metabase-en-un-vps","How to Self-Host Metabase on a VPS: Open-Source BI Dashboards","Deploy Metabase on your VPS: connect any SQL database and build dashboards and charts in the browser, with a companion Postgres, on infrastructure you control.",9,4,false,"2026-07-06T00:00:00+00:00","2026-10-20T23:18:08+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-metabase-vps-poster.svg",{"categorySlug":34,"appSlug":35},"databases","metabase","Metabase (AGPL, ~46k stars) is the easiest way to put self-service dashboards on top of a database you already run — PostgreSQL, MySQL, ClickHouse and dozens more — without a per-seat USD subscription to a foreign BI SaaS. Non-technical users build questions and charts by clicking; analysts drop into raw SQL when they need it. In this guide you deploy Metabase and its companion metadata Postgres as a two-container Docker stack on a VPS, so your entire analytics layer stays on infrastructure you control. The reference version is Metabase 64.1 (LTS, released October 6 2026, supported until December 1 2027) — if you are still on v63, migrate before November 1 2026 when security support ends.",[38,42,53,56,78,81,84,87,90,93],{"type":39,"title":40,"body":41},"h2","Why self-host your BI dashboards","Hosted BI tools are convenient until the per-seat bill arrives — and until you realise your product, revenue and customer data are being copied into a third-party SaaS priced in USD. Metabase flips that: it is open source (AGPL), self-hostable, and connects to a database you already own. Run it on a VPS behind your own domain and your analytics layer never leaves your server. You pay a fixed monthly cost for the VPS, not a growing per-user subscription, and your data stays on infrastructure you control — which for a Moroccan team also means data sovereignty, not a datacenter whose location you don't know.",{"type":43,"title":44,"items":45},"ul","What Metabase gives you",[46,47,48,49,50,51,52],"A visual query builder so non-technical users create charts and questions by clicking — with a full SQL editor for analysts.","Interactive dashboards with filters, drill-through and scheduled refresh.","Connectors for 20+ databases: PostgreSQL, MySQL\u002FMariaDB, SQL Server, ClickHouse, BigQuery, Redshift, Snowflake, MongoDB, Athena, Spark, Druid and more.","Scheduled subscriptions and threshold alerts delivered to email or Slack.","Group- and collection-level permissions plus row\u002Fcolumn controls so each team sees only its own data.","Embedded analytics to drop signed, filtered dashboards into your own app.","AGPL open source — no per-seat fee, its own state stored in a Postgres database you own.",{"type":39,"title":54,"body":55},"Requirements","A VPS with Ubuntu 22.04 (or Debian 12) and Docker installed. Metabase runs on the JVM, so give it room: 2 GB RAM is the realistic minimum and 4 GB is comfortable for a small team. The JVM defaults to a 1 500 MB heap; on a 2 GB VPS cap it at 1 200 MB with `JAVA_OPTS=-Xmx1200m`, or raise it to 2 GB on a 4 GB server (`-Xmx2g`). The deployment is two containers — Metabase itself and a companion `postgres:16` that stores Metabase's own metadata (users, dashboards, saved questions). No domain is strictly required — Metabase answers on port 3000 via your server's IP — but you will want a reverse proxy for HTTPS in production.",{"type":57,"title":58,"steps":59},"steps","Deploy Metabase on your VPS",[60,63,66,69,72,75],{"title":61,"body":62},"Create a docker-compose stack","Metabase should store its own state in a real database, not the default embedded H2 file. Create a `docker-compose.yml` with two services: `metabase\u002Fmetabase:v0.64.1` and a companion `postgres:16`. Wire Metabase to Postgres with `MB_DB_TYPE=postgres`, `MB_DB_HOST=metabase-db`, `MB_DB_DBNAME=metabaseappdb`, `MB_DB_PORT=5432`, `MB_DB_USER=metabase` and a strong `MB_DB_PASS`. Use the same password for the Postgres container's `POSTGRES_PASSWORD`, mount a named volume for `\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata`, and set `restart: unless-stopped` on both. Also add `METABASE_SITE_URL=https:\u002F\u002Fbi.yourdomain.com` and `MB_ENCRYPTION_SECRET_KEY` (a random 32+ character string) to encrypt database credentials at rest — without it passwords are stored in plain text in Postgres.",{"title":64,"body":65},"Tune JVM memory","Add `JAVA_OPTS=-Xmx1500m` to the Metabase service environment if you have 2 GB RAM, or `-Xmx2g` for 4 GB. Without this, the JVM may exceed available memory and trigger an OOM (Out Of Memory) kill that stops the container with no readable error. Check for OOM kills with `docker inspect metabase --format '{{.State.OOMKilled}}'` (returns `true`) or `dmesg | grep -i oom`.",{"title":67,"body":68},"Bring it up and wait for boot","Run `docker compose up -d`. On first start Metabase runs its database migrations against Postgres, which takes 60–120 seconds on a small VPS — this is normal. Poll readiness with `curl -f http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fhealth`; once it returns `{\"status\":\"ok\"}` the app is ready. The compose stack gates Metabase on the Postgres healthcheck so the app never starts before its database is up.",{"title":70,"body":71},"Finish the setup wizard","Open `http:\u002F\u002F\u003Cyour-server-ip>:3000`. Metabase redirects to the setup wizard: create the admin account, then connect the database you actually want to analyse — typically your application's PostgreSQL or MySQL, ideally a read replica so analytics queries never hit your production primary. Metabase scans the schema and your tables are query-ready in seconds.",{"title":73,"body":74},"Build a dashboard","Create a couple of questions with the visual query builder (a count over time, a breakdown by category), save them into a collection, and pin them onto a dashboard with a date filter. Switch any question to the native SQL editor when you need full control. Set up an email or Slack subscription to have the dashboard delivered on a schedule.",{"title":76,"body":77},"Add HTTPS and lock it down","Put Metabase behind a reverse proxy for a real domain and a certificate. With Caddy: `apt install caddy`, then a `\u002Fetc\u002Fcaddy\u002FCaddyfile` containing `bi.yourdomain.com { reverse_proxy localhost:3000 }` and `systemctl reload caddy` for an automatic Let's Encrypt cert. Point the DNS A record for `bi.yourdomain.com` at your VPS first, restrict port 3000 with `ufw allow from \u003Cproxy> to any port 3000`, and set a strong admin password — anyone who can log in can query every connected database.",{"type":39,"title":79,"body":80},"Upgrading to Metabase 64 (LTS)","If you are on v63 or earlier, migrate before November 1 2026 — that is when v63 security support ends. Metabase 64.1 is the recommended LTS branch, supported until December 1 2027. Upgrading with Docker is straightforward: stop the stack (`docker compose down`), replace the image tag with `v0.64.1` in your `docker-compose.yml`, then bring it back up (`docker compose up -d`). Metabase automatically applies schema migrations on startup. Back up your Postgres volume (`docker exec metabase-db pg_dump -U metabase metabaseappdb > backup-before-v64.sql`) before upgrading, and verify the container starts cleanly with `curl -f http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fhealth` before discarding the backup.",{"type":39,"title":82,"body":83},"Alerts, subscriptions and scheduled reports","Metabase can send dashboards by email or Slack on a schedule. For email, configure an SMTP server in Administration → Email settings: set `METABASE_SMTP_HOST`, `METABASE_SMTP_PORT`, `METABASE_SMTP_USER` and `METABASE_SMTP_PASSWORD` as environment variables, or fill in the form directly. Once SMTP is active, every dashboard offers a Subscribe button: choose recipients, frequency (daily, weekly) and format (PNG image or attachment). Threshold alerts work on any numeric question: Metabase evaluates the query on a schedule and sends a notification when the value crosses a threshold — ideal for monitoring KPIs like daily revenue, error rates or conversion rates without opening the dashboard.",{"type":39,"title":85,"body":86},"Supported connectors: well beyond classic SQL","Metabase Open Source connects natively to PostgreSQL, MySQL\u002FMariaDB, SQL Server, SQLite, H2, Redshift, BigQuery, Snowflake, Athena, Druid, ClickHouse, MongoDB (read-only via the official driver), Presto\u002FTrino and SparkSQL. The Pro\u002FEnterprise edition adds certified drivers and official support. For unlisted databases, community JSON drivers are available: drop them in the `\u002Fplugins` directory of the container (mount a volume) and Metabase detects them on startup. The ClickHouse connector is worth highlighting: ClickHouse is increasingly used for high-volume real-time analytics, and Metabase connects to it natively since v44 — a powerful combination for near-real-time dashboards without a dedicated data warehouse.",{"type":39,"title":88,"body":89},"Metabase Open Source vs Pro vs Cloud","The Open Source edition (AGPL) covers all common analytics use cases: dashboards, alerts, subscriptions, basic embedded analytics, group-level access control. The Pro edition (commercial license) adds sub-organization management (multi-tenant), interactive dashboards with session variables for advanced embedded analytics, access audit logs and SAML SSO. The Cloud edition (managed SaaS by Metabase Inc.) removes maintenance overhead but moves your data to third-party servers — which for sensitive data or compliance requirements is reason enough to self-host. On a €8\u002Fmonth VPS, the Open Source edition covers almost all SMB needs with no user limits.",{"type":39,"title":91,"body":92},"Troubleshooting: common errors","**Container restarting in a loop \u002F OOM.** Check `docker inspect metabase --format '{{.State.OOMKilled}}'` — if `true`, increase VPS memory or reduce the heap with `JAVA_OPTS=-Xmx1200m`. A 1 GB RAM VPS is too tight; 2 GB is the minimum. **JDBC connection refused at startup.** Metabase tries to reach Postgres before it is ready. Ensure a `healthcheck` is defined on the Postgres service and that Metabase depends on it (`depends_on: metabase-db: condition: service_healthy`). **Very long startup time (> 5 min).** On a low-CPU VPS, initial migrations can take up to 5 minutes. This is normal on first launch; subsequent starts are fast (15–30 seconds). **Slow dashboards or timeouts.** Connect Metabase to a read replica rather than the primary. If that is not possible, enable query caching with `MB_QUERY_CACHING_TTL_RATIO=10`. **Emails not received.** Check SMTP logs in Administration → Audit logs. Test the connection with Administration → Email settings → Send test email.",{"type":94,"title":95,"body":96},"tip","Point Metabase at a read replica, not your primary","Analytics queries can be heavy. Connect Metabase to a read replica or a dedicated reporting database rather than your production primary, so a slow dashboard query never slows down your live application. On a single VPS you can run a lightweight replica in its own container on the same private Docker network — Metabase reaches it by service name and your primary stays untouched.","Deploy Metabase on your VPS in one click","Stop paying per seat in USD for hosted BI. ServOrbit provisions a ready-to-use Metabase instance — companion Postgres pre-wired, health-checked, and reachable from your browser in minutes — on infrastructure you control.","Deploy Metabase","\u002Fvps-cloud?template=metabase",[102,122,144],{"id":103,"slug":104,"slugs":105,"title":109,"excerpt":110,"readTime":111,"views":112,"isPinned":19,"noindex":113,"publishedAt":114,"updatedAt":115,"category":116,"categories":117,"featuredImage":30,"bgImage":31,"posterImage":119,"relatedSolution":120},157,"how-to-self-host-nocodb-on-a-vps",{"fr":106,"en":104,"ar":107,"es":108},"self-host-nocodb-vps","كيفية-استضافة-nocodb-ذاتيا-على-خادم-vps","como-autoalojar-nocodb-en-un-vps","How to Self-Host NocoDB on a VPS","Deploy NocoDB on your VPS for a self-hosted, open-source Airtable alternative. Turn any database into a smart spreadsheet with REST and GraphQL APIs, via Docker Compose.",3,1,true,"2026-01-20T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[118],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fself-host-nocodb-vps-poster.svg",{"categorySlug":34,"appSlug":121},"nocodb",{"id":123,"slug":124,"slugs":125,"title":129,"excerpt":130,"readTime":17,"views":112,"isPinned":19,"noindex":19,"publishedAt":131,"updatedAt":132,"category":133,"categories":139,"featuredImage":30,"bgImage":31,"posterImage":141,"relatedSolution":142},56,"postgresql-on-a-vps-a-reliable-and-controlled-database",{"fr":126,"en":124,"ar":127,"es":128},"heberger-postgresql-vps","postgresql-على-خادم-vps-قاعدة-بيانات-موثوقة-ومتحكم-بها","alojar-postgresql-en-un-vps","PostgreSQL on a VPS: reliable, controlled database","Host PostgreSQL on a VPS: production config, pgBackRest backups, streaming HA, RDS\u002FSupabase\u002FNeon comparison and OOM troubleshooting.","2026-04-25T00:00:00+00:00","2026-10-21T15:21:37+00:00",{"id":134,"name":135,"slug":136,"color":137,"icon":138},6,"Databases","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[140],{"id":134,"name":135,"slug":136,"color":137,"icon":138},"\u002Fblog\u002Fcovers\u002Fheberger-postgresql-vps-poster.svg",{"categorySlug":34,"appSlug":143},"postgresql-stack",{"id":145,"slug":146,"slugs":147,"title":151,"excerpt":152,"readTime":153,"views":112,"isPinned":19,"noindex":19,"publishedAt":154,"updatedAt":155,"category":156,"categories":157,"featuredImage":30,"bgImage":31,"posterImage":159,"relatedSolution":160},65,"hosting-qdrant-on-a-vps",{"fr":148,"en":146,"ar":149,"es":150},"heberger-qdrant-vps","استضافة-qdrant-على-خادم-vps","alojar-qdrant-en-un-vps","Hosting Qdrant on a VPS","Host Qdrant on your VPS: Docker Compose, API key, TLS, HNSW tuning, quantization, Python v1 client, snapshots and Prometheus monitoring.",8,"2026-04-16T00:00:00+00:00","2026-10-20T23:18:05+00:00",{"id":134,"name":135,"slug":136,"color":137,"icon":138},[158],{"id":134,"name":135,"slug":136,"color":137,"icon":138},"\u002Fblog\u002Fcovers\u002Fheberger-qdrant-vps-poster.svg",{"categorySlug":34,"appSlug":161},"qdrant",1794270431120]