[{"data":1,"prerenderedAt":216},["ShallowReactive",2],{"seo-verification":3,"blog-migrating-rocket-chat-to-mattermost-on-a-vps-en":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-migrating-rocket-chat-to-mattermost-on-a-vps-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":157,"ctaBody":158,"ctaButton":159,"ctaUrl":160,"relatedPosts":161},356,"migrating-rocket-chat-to-mattermost-on-a-vps",{"fr":12,"en":10,"ar":13,"es":14},"migrer-rocket-chat-vers-mattermost-vps","rocket-chat-mattermost-vps","migrar-rocket-chat-a-mattermost-en-un-vps","Migrating Rocket.Chat to Mattermost on a VPS","Rocket.Chat 9.0 moves LDAP and SAML to the Premium plan. Migrate to Mattermost Community with full history, users and enterprise authentication.",11,0,false,"2026-09-17T00:00:00+00:00","2026-09-17T14:09:37+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\u002Fmigrer-rocket-chat-vers-mattermost-vps-poster.svg",{"categorySlug":34,"appSlug":35},"collaboration-productivity","mattermost","The Rocket.Chat 8.8.0 release notes published on September 3, 2026 officially announced that LDAP and SAML will become Premium-only features starting from version 9.0. If you run a Community self-hosted instance with enterprise authentication, the migration window is now open. This guide covers backing up your existing Rocket.Chat, installing Mattermost on your VPS, migrating history and users with mmetl, and configuring LDAP in Mattermost Community — which includes it without any plan restriction.",[38,42,52,55,71,83,98,110,114,117,154],{"type":39,"title":40,"body":41},"h2","What changes in Rocket.Chat 9.0","Version 8.8.0, released on September 3, 2026, still runs LDAP and SAML on Community instances — but it introduces explicit warnings in the admin panel: from version 9.0, these two modules will require an `ldap-enterprise` or `saml-enterprise` license module. System logs already warn unlicensed workspaces authenticating users through either method.\n\nIn practice: if your enterprise directory (Active Directory, OpenLDAP) or identity provider (Okta, Azure AD, Keycloak) is connected to your current Community Rocket.Chat, that connection will stop working when upgrading to 9.0 without a Premium subscription. For teams that built their workflow around this authentication, the migration window is open.",{"type":43,"title":44,"items":45},"ul","Why Mattermost Community is a solid alternative",[46,47,48,49,50,51],"**LDAP and SAML included without a license** — Mattermost ships Active Directory and SAML authentication in its open source edition, under MIT license for the server (Apache 2.0 for contributions), with no plan requirement.","**Native PostgreSQL** — Mattermost relies on PostgreSQL, well-documented, easy to back up with `pg_dump` and more common than MongoDB in self-hosted Docker environments.","**mmetl, an official migration tool** — the `mmetl` tool from the Mattermost team transforms a Rocket.Chat `mongodump` into a JSONL import file compatible with `mmctl import`, including channels, users and messages.","**Lower memory footprint** — Mattermost can start with 2 GB of RAM for teams of fewer than fifty users; Rocket.Chat requires a MongoDB replica set that consumes more at equivalent volume.","**Official desktop and mobile apps** — iOS, Android, macOS and Windows clients point to your own domain from installation.","**Full message history, no storage quota** — no sliding window, no message volume cutoff, everything is stored on your disk or S3 bucket.",{"type":39,"title":53,"body":54},"Measured prerequisites","Before starting, verify the following.\n\nFor the Mattermost server: a VPS with **2 vCPU and 4 GB RAM minimum** — 2 GB suffices technically for Mattermost alone, but PostgreSQL runs on the same host during the migration, making 4 GB more comfortable. Plan for **40 GB SSD** minimum, more if your Rocket.Chat history contains large file attachments. Docker and Docker Compose must be installed. A dedicated IPv4 and a subdomain `chat.yourdomain.com` with an A record are required.\n\nFor the migration: SSH access to your existing Rocket.Chat server, `mongodump` tools installed on that server (or via Docker), and `mmetl` v0.6.0 (released September 11, 2026) installed on your workstation or the new VPS. A valid TLS certificate for the target domain (Let's Encrypt via Certbot or Caddy).",{"type":56,"title":57,"steps":58},"steps","Back up Rocket.Chat",[59,62,65,68],{"title":60,"body":61},"Put Rocket.Chat in read-only mode","Before any backup, notify your users and put the instance in maintenance mode. In Rocket.Chat administration, go to **Administration → General → Maintenance mode** and enable read-only mode. This prevents messages from being written after the dump and lost at cutover.\n\nAlternatively, if you do not have this mode, simply stop the Rocket.Chat container:\n```bash\ndocker compose stop rocketchat\n```",{"title":63,"body":64},"Export the MongoDB database with mongodump","mmetl expects a directory produced by `mongodump`, not a compressed file. Run the dump from the host or from inside the MongoDB container:\n```bash\n# from the host, if mongodump is installed\nmongodump --uri=\"mongodb:\u002F\u002Flocalhost:27017\u002Frocketchat\" --out \u002Ftmp\u002Frc-dump\n\n# or from the Docker container\ndocker exec \u003Cmongo-container> mongodump \\\n  --db rocketchat --out \u002Fdump\ndocker cp \u003Cmongo-container>:\u002Fdump \u002Ftmp\u002Frc-dump\n```\nVerify that `\u002Ftmp\u002Frc-dump\u002Frocketchat\u002F` contains `.bson` and `.json` files for the `rocketchat_message`, `users`, `rocketchat_room` collections, etc.",{"title":66,"body":67},"Export file attachments (uploads)","File attachments stored in GridFS or the local filesystem are not part of the MongoDB dump — they must be copied separately.\n\nIf you use local storage (default option):\n```bash\ndocker cp \u003Crocketchat-container>:\u002Fapp\u002Fuploads \u002Ftmp\u002Frc-uploads\n```\nIf you use an S3-compatible bucket, note the connection parameters — you will reconfigure them in Mattermost. mmetl references file attachments but does not transfer them: you will push them manually or via `mmctl import` with the `--attachments-dir` option.",{"title":69,"body":70},"Export users via REST API (optional)","For an inventory of accounts before migration, the Rocket.Chat API can export the list of active users. This facilitates cross-checking after the Mattermost import:\n```bash\ncurl -H \"X-Auth-Token: \u003Ctoken>\" \\\n     -H \"X-User-Id: \u003Cadmin-id>\" \\\n     \"https:\u002F\u002Fchat.yourdomain.com\u002Fapi\u002Fv1\u002Fusers.list?count=200\" \\\n  | python3 -c \"import sys,json; [print(u['username'], u.get('emails',[{}])[0].get('address','')) for u in json.load(sys.stdin)['users']]\"\n```\nKeep this list: it serves to verify that all accounts are correctly created in Mattermost after bulk import.",{"type":56,"title":72,"steps":73},"Install Mattermost on your VPS",[74,77,80],{"title":75,"body":76},"Get the official Docker Compose configuration","The Mattermost team maintains a `docker` repository with a ready-to-use Compose configuration:\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmattermost\u002Fdocker \u002Fopt\u002Fmattermost\ncd \u002Fopt\u002Fmattermost\ncp env.example .env\n```\nOpen `.env` and fill in at minimum:\n```bash\nDOMAIN=chat.yourdomain.com\nMM_SERVICESETTINGS_SITEURL=https:\u002F\u002Fchat.yourdomain.com\nPOSTGRES_USER=mmuser\nPOSTGRES_PASSWORD=\u003Cstrong-password>\nPOSTGRES_DB=mattermost\n```",{"title":78,"body":79},"Create volumes and start the stack","Create volume directories before the first startup:\n```bash\nmkdir -p .\u002Fvolumes\u002Fapp\u002Fmattermost\u002F{config,data,logs,plugins,client\u002Fplugins,bleve-indexes}\nsudo chown -R 2000:2000 .\u002Fvolumes\u002Fapp\u002Fmattermost\n```\nStart the full stack (Mattermost + PostgreSQL + nginx with integrated Let's Encrypt certificate):\n```bash\ndocker compose -f docker-compose.yml -f docker-compose.nginx.yml up -d\n```\nWait for the Mattermost container to be `healthy` before continuing:\n```bash\ndocker compose ps\n```",{"title":81,"body":82},"Create the administrator account","Open `https:\u002F\u002Fchat.yourdomain.com` in your browser. On first login, Mattermost prompts for the creation of an admin account. Enter the email, username and password for the initial administrator — this account will be separate from accounts imported from Rocket.Chat.\n\nOnce logged in, go to **System Console → Environment → Site URL** and verify the URL matches exactly what was declared in `.env`.",{"type":56,"title":84,"steps":85},"Migrate history and users with mmetl",[86,89,92,95],{"title":87,"body":88},"Install mmetl","Download the mmetl v0.6.0 binary (released September 11, 2026) from GitHub releases:\n```bash\ncurl -L https:\u002F\u002Fgithub.com\u002Fmattermost\u002Fmmetl\u002Freleases\u002Fdownload\u002Fv0.6.0\u002Fmmetl-linux-amd64 \\\n  -o \u002Fusr\u002Flocal\u002Fbin\u002Fmmetl\nchmod +x \u002Fusr\u002Flocal\u002Fbin\u002Fmmetl\nmmetl version\n```\n**Breaking change in v0.6.0**: the `mmetl check` subcommand has been removed. Use `mmetl transform ... --dry-run` to validate the dump before producing the import file.",{"title":90,"body":91},"Transform the Rocket.Chat dump into a Mattermost import file","Run the transformation pointing to the directory containing the BSON collections exported (the `rocketchat` subfolder of the dump) and the target Mattermost team name:\n```bash\nmmetl transform rocketchat \\\n  --team my-team \\\n  --dump-dir \u002Ftmp\u002Frc-dump\u002Frocketchat \\\n  --output \u002Ftmp\u002Fmattermost-import\n```\nmmetl generates an `import.jsonl` file and a `bulk-export-attachments\u002F` directory. To test without generating output:\n```bash\nmmetl transform rocketchat \\\n  --team my-team \\\n  --dump-dir \u002Ftmp\u002Frc-dump\u002Frocketchat \\\n  --dry-run\n```\nCheck warnings: messages from private channels without a recognized member are skipped; attachments absent from the uploads directory are referenced but not transferred.",{"title":93,"body":94},"Run the import in Mattermost via mmctl","Copy the import file into the Mattermost data directory, then run the bulk import:\n```bash\n# copy into the container\ndocker cp \u002Ftmp\u002Fmattermost-import\u002Fimport.jsonl \\\n  \u003Cmattermost-container>:\u002Fmattermost\u002Fdata\u002Fimport.jsonl\n\n# run import from mmctl (inside the container)\ndocker exec \u003Cmattermost-container> mmctl import bulk \\\n  \u002Fmattermost\u002Fdata\u002Fimport.jsonl --bypass-upload\n```\nTo track progress, check import jobs in **System Console → Bulk Import**. Errors are logged line by line — a partial import does not block the rest.",{"title":96,"body":97},"Verify results and known limitations","After the import, check the following points:\n- Public and private channels should be present in Mattermost with their history.\n- Usernames are imported but passwords are **not** — each user must reset their password or log in via LDAP if the directory is configured.\n- File attachments require a second pass with `--attachments-dir` pointing to the directory copied from Rocket.Chat.\n- Discussion threads (nested replies) are flattened if the structure is not recognized.",{"type":56,"title":99,"steps":100},"Configure LDAP in Mattermost Community",[101,104,107],{"title":102,"body":103},"Enable LDAP in the System Console","In **System Console → Authentication → AD\u002FLDAP**, enable LDAP and fill in the connection parameters:\n```\nLDAP Server: ldap.yourdomain.com (or your domain controller IP)\nPort: 389 (LDAP) or 636 (LDAPS)\nBind Username: cn=mattermost-svc,ou=serviceaccounts,dc=yourdomain,dc=com\nBind Password: \u003Cservice-account-password>\nBase DN: ou=users,dc=yourdomain,dc=com\n```\nEnable **LDAP over TLS (LDAPS)** or **StartTLS** if your infrastructure supports it — do not transmit credentials in clear text over an unencrypted network.",{"title":105,"body":106},"Configure attribute mappings","Mattermost reads LDAP attributes to populate profiles. Common mappings for Active Directory:\n```\nID Attribute:        objectGUID  (or sAMAccountName if GUID is unavailable)\nUsername Attribute:  sAMAccountName\nEmail Attribute:     mail\nFirst Name:          givenName\nLast Name:           sn\n```\nFor OpenLDAP, replace `sAMAccountName` with `uid` and `objectGUID` with `entryUUID`.\n\nIn **User Filter**, restrict synchronization to members of the desired group:\n```\n(memberOf=cn=mattermost-users,ou=groups,dc=yourdomain,dc=com)\n```",{"title":108,"body":109},"Test the connection and synchronize","Click **AD\u002FLDAP Test** at the bottom of the page to validate the connection and bind. If you get `LDAP Result Code 49 'Invalid Credentials'`, check the service account DN and password.\n\nTrigger a first manual synchronization via **AD\u002FLDAP Synchronize Now**. Users whose email attribute matches an account already imported via mmetl will be linked automatically — they will then log in with their LDAP credentials without resetting their password.",{"type":111,"title":112,"body":113},"tip","Cutover plan: keep Rocket.Chat in read-only mode during migration","Do not cut Rocket.Chat before validating the Mattermost import under real conditions. The recommended strategy is to run both instances in parallel for 48 to 72 hours:\n\n1. Enable maintenance \u002F read-only mode on Rocket.Chat as soon as the dump is done.\n2. Configure Mattermost on a separate subdomain (`chat-new.yourdomain.com`) during validation.\n3. Invite a pilot group (5 to 10 people) to use Mattermost and report missing channels or messages.\n4. Once validated, switch the DNS for `chat.yourdomain.com` to the new Mattermost VPS.\n5. Keep the Rocket.Chat instance in read-only mode for another 30 days so users can retrieve previously shared links.\n\nCloudflare DNS switches in seconds with a short TTL (60 s) — prepare the modification in advance to avoid working under pressure.",{"type":39,"title":115,"body":116},"Common troubleshooting","**mmetl: `unexpected end of JSON input`** — the directory passed to `--dump-dir` must be the `rocketchat\u002F` subfolder containing `.bson` files, not the parent dump directory. Check with `ls \u002Ftmp\u002Frc-dump\u002Frocketchat\u002F*.bson`.\n\n**Partial import, missing channels** — mmetl skips private channels whose owner is not found in the `users` collection. Check that the affected users are present in the dump with `bsondump \u002Ftmp\u002Frc-dump\u002Frocketchat\u002Fusers.bson | grep '\u003Cusername>'`.\n\n**LDAP Bind Failure (code 49)** — the most common cause is a malformed DN for the service account. Test the connection from the VPS with `ldapsearch` before configuring Mattermost:\n```bash\nldapsearch -x -H ldap:\u002F\u002Fldap.yourdomain.com \\\n  -D \"cn=mattermost-svc,ou=serviceaccounts,dc=yourdomain,dc=com\" \\\n  -W -b \"ou=users,dc=yourdomain,dc=com\" \"(uid=testuser)\"\n```\n\n**Unstable WebSocket connections** — if Mattermost shows frequent disconnections, verify your reverse proxy correctly passes `Upgrade` and `Connection` headers. Nginx must include:\n```bash\nproxy_http_version 1.1;\nproxy_set_header Upgrade $http_upgrade;\nproxy_set_header Connection \"upgrade\";\n```\n\n**Missing file attachments** — running `mmctl import bulk` without `--attachments-dir` creates messages but leaves file attachments in error. Re-run with the `bulk-export-attachments\u002F` directory produced by mmetl.",{"type":118,"title":119,"headers":120,"rows":124},"comparison","Rocket.Chat Community 9.0 vs Mattermost Community",[121,122,123],"Criteria","Rocket.Chat Community 9.0","Mattermost Community",[125,129,131,135,139,143,147,150],[126,127,128],"LDAP \u002F Active Directory","Premium (from 9.0)","Included, no restriction",[130,127,128],"SAML SSO",[132,133,134],"Database","MongoDB (replica set required)","PostgreSQL",[136,137,138],"Minimum RAM","4 GB (MongoDB replica set)","2 GB (team \u003C 50 users)",[140,141,142],"License","AGPL-3.0","MIT (server) \u002F Apache 2.0",[144,145,146],"Migration tool","Native JSON\u002FCSV export","mmetl + mmctl bulk import",[148,149,149],"Full history","Yes",[151,152,153],"Omnichannel (livechat, email)","Yes (native)","Limited (extensions)",{"type":39,"title":155,"body":156},"Mattermost Community, a stable long-term platform","Migrating from Rocket.Chat to Mattermost is a structural decision, not a workaround. By moving LDAP and SAML authentication behind a Premium license, Rocket.Chat signals where its business model is heading — which is its right. Mattermost has made the opposite choice by keeping these features in its open source edition, including for organizations without a subscription budget.\n\nOn a VPS with PostgreSQL, Mattermost offers a predictable foundation: backups are simple `pg_dump` operations, updates go through Docker Compose, and the documented REST API allows integrating your infrastructure tools — CI, monitoring, alerts — without plan restrictions. Your team's communication history stays on your disk, exportable and auditable at any time.\n\nSee also: \u003Ca href=\"\u002Fblog\u002Fheberger-mattermost\">Mattermost installation guide on VPS\u003C\u002Fa>, \u003Ca href=\"\u002Fblog\u002Fmattermost-vs-rocketchat-self-hosted-slack-2026\">Mattermost vs Rocket.Chat comparison 2026\u003C\u002Fa> and \u003Ca href=\"\u002Fblog\u002Fheberger-rocket-chat\">hosting Rocket.Chat on VPS\u003C\u002Fa>.","Deploy Mattermost on a ServOrbit Cloud VPS","A VPS with root access, dedicated IPv4 and NVMe SSD — the foundation for hosting Mattermost with PostgreSQL and managing your own LDAP authentication.","Launch my Cloud VPS","\u002Fvps-cloud",[162,180,197],{"id":163,"slug":164,"slugs":165,"title":169,"excerpt":170,"readTime":171,"views":172,"isPinned":19,"publishedAt":173,"updatedAt":174,"category":175,"categories":176,"featuredImage":30,"bgImage":31,"posterImage":178,"relatedSolution":179},76,"host-mattermost-on-your-own-vps",{"fr":166,"en":164,"ar":167,"es":168},"heberger-mattermost","استضافة-mattermost-على-خادم-vps-الخاص-بك","alojar-mattermost-en-un-vps","Host Mattermost on your own VPS","Complete 2026 guide: deploy Mattermost v10\u002Fv11 on VPS with Docker, PostgreSQL, SSL, integrations and backups. Self-hosted alternative to Slack.",9,2,"2026-04-05T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[177],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-mattermost-poster.svg",{"categorySlug":25,"appSlug":35},{"id":181,"slug":182,"slugs":183,"title":187,"excerpt":188,"readTime":171,"views":189,"isPinned":19,"publishedAt":190,"updatedAt":174,"category":191,"categories":192,"featuredImage":30,"bgImage":31,"posterImage":194,"relatedSolution":195},77,"host-rocketchat-on-your-own-vps",{"fr":184,"en":182,"ar":185,"es":186},"heberger-rocket-chat","استضافة-rocketchat-على-خادم-vps-الخاص-بك","alojar-rocket-chat-en-un-vps","Host Rocket.Chat on your own VPS","Install Rocket.Chat on your VPS with Docker, MongoDB and SSL. Full guide: omnichannel, administration, updates, monitoring and SSO.",1,"2026-04-04T00:00:00+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[193],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-rocket-chat-poster.svg",{"categorySlug":25,"appSlug":196},"rocket-chat",{"id":198,"slug":199,"slugs":200,"title":204,"excerpt":205,"readTime":23,"views":18,"isPinned":19,"publishedAt":206,"updatedAt":207,"category":208,"categories":213,"featuredImage":30,"bgImage":31,"posterImage":215,"relatedSolution":30},304,"mattermost-vs-rocketchat-which-to-choose-in-2026",{"fr":201,"en":199,"ar":202,"es":203},"mattermost-vs-rocketchat-self-hosted-slack-2026","mattermost-أم-rocketchat-أيهما-تختار-في-2026","mattermost-vs-rocketchat-cual-elegir-en-2026","Mattermost vs Rocket.Chat: which to choose in 2026?","Slack raised prices 20% in 2026: Mattermost or Rocket.Chat? Two radically different architectures, a concrete comparison to help you decide.","2026-08-26T00:00:00+00:00","2026-09-07T19:17:14+00:00",{"id":209,"name":210,"slug":211,"color":212,"icon":211},5,"Comparison","comparatif","bg-info\u002F10 text-info",[214],{"id":209,"name":210,"slug":211,"color":212,"icon":211},"\u002Fblog\u002Fcovers\u002Fmattermost-vs-rocketchat-self-hosted-slack-2026-poster.svg",1789664979600]