Published

Mattermost

Team chat in the style of Slack: channels, direct messages, threads, file sharing, search, webhooks and slash commands, with desktop and mobile apps. Team Edition is the free MIT-licensed build for small teams: up to 250 activated users and no single sign-on. The stack is Mattermost and PostgreSQL, with files on local disk.

Resources by load level

What the app itself needs at each level, next to what we recommend for a server that runs only this app.

LevelWhat it meansApp requirementsRecommended
LightEstimateUp to 25 users (one small team), about 500 messages a day, up to 25 MB of files per user a month.1.5 vCPU · 2 GiB RAM · 16 GiB disk1.92 vCPU · 3.9 GiB RAM · 27.83 GiB disk
MediumEstimateUp to 100 users in a few teams, about 3,000 messages a day, screenshots and documents up to 25 MB per user a month.2 vCPU · 3 GiB RAM · 36.5 GiB disk2.52 vCPU · 5.1 GiB RAM · 51.405 GiB disk
HeavyEstimateUp to 250 users (Team Edition's limit), up to 200 online at once, about 12,500 messages a day, up to 25 MB of files per user a month.4 vCPU · 8 GiB RAM · 123.5 GiB disk4.92 vCPU · 11.1 GiB RAM · 151.455 GiB disk

Recommended = app requirements + system baseline + safety headroom, under sizing policy 2026.10.0. Options stay at their defaults. “Estimate” means the sources give no number for that case, so it is worked out from them by the method stated under Components. How the numbers are built

Size it in the Stack Sizer

Ready-to-run files

Support level Supported

Compose template from the official sources; not yet verified by a run.

Create docker-compose

Components

What each component needs at each load level, before baseline and headroom.

vCPU / GiB RAM / GiB disk
ComponentLightMediumHeavySources
Mattermost Team Edition (web app, API, WebSockets, jobs) (app)0.5 / 1 / 9.51 / 2 / 302 / 4 / 72[8][12][14][24][26]
PostgreSQL (database)1 / 1 / 6.51 / 1 / 6.52 / 4 / 51.5[14][18][29][30][31][32][33][34][35]
How the estimates are worked out
  • Mattermost Team Edition (web app, API, WebSockets, jobs) · Light: The docs size a whole single server for up to 1,000 users at 1 vCPU and 2 GB RAM, database included; with PostgreSQL as its own container, Mattermost gets half of each (ANAROQ split). Disk: Image 448,271,026 B compressed (0.417 GiB) + 649,274,368 B unpacked (0.605 GiB), both kept by the containerd store = 1.022 GiB. Files: 25 users × 25 MB a month (top of the docs' medium-usage band) × 12 months = 6.985 GiB. + 1 GiB for unpacked plugins, config and logs (assumption) = 9.007, rounded up to 9.5.
  • Mattermost Team Edition (web app, API, WebSockets, jobs) · Medium: Twice the light figures, half of the 2 vCPU / 4 GiB app node the docs give for 200 concurrent users: more open WebSockets, uploads and image previews (file uploads up to 100 MB drive memory). Disk: Image 448,271,026 B compressed (0.417 GiB) + 649,274,368 B unpacked (0.605 GiB), both kept by the containerd store = 1.022 GiB. Files: 100 users × 25 MB a month (top of the docs' medium-usage band) × 12 months = 27.940 GiB. + 1 GiB plugins, config and logs = 29.962, rounded up to 30.
  • Mattermost Team Edition (web app, API, WebSockets, jobs) · Heavy: vCPU and RAM: the app node of the docs' reference architecture for up to 200 concurrent users (2 vCPU, 4 GiB). Disk: Image 448,271,026 B compressed (0.417 GiB) + 649,274,368 B unpacked (0.605 GiB), both kept by the containerd store = 1.022 GiB. Files: 250 users × 25 MB a month (top of the docs' medium-usage band) × 12 months = 69.849 GiB. + 1 GiB plugins, config and logs = 71.871, rounded up to 72.
  • PostgreSQL · Light: Messages, channels, users and the full-text index live in PostgreSQL: 500 messages a day × an assumed 2 KB per post with indexes ≈ 0.4 GB a year, inside the light envelope (≤ 5 GB). The pool may open up to 100 connections (MaxOpenConns), but 25 users keep far fewer than 20 busy. Light method: shared_buffers 25% of RAM, worst-case work_mem budget, 0.5 GiB image + 5 GiB data + 1 GiB WAL.
  • PostgreSQL · Medium: 3,000 messages a day × an assumed 2 KB per post with indexes ≈ 2.2 GB a year, inside the light envelope (≤ 5 GB) for about two years; 100 users keep under 20 connections busy although the pool may open 100. Light method: shared_buffers 25% of RAM, worst-case work_mem budget, 0.5 GiB image + 5 GiB data + 1 GiB WAL.
  • PostgreSQL · Heavy: 12,500 messages a day × an assumed 2 KB per post with indexes ≈ 9 GB a year, beyond the 5 GB sidecar envelope, and up to 200 users online can keep more than 20 of the pool's 100 connections busy: the PostgreSQL profile's medium preset (≤ 50 GB, ≤ 100 connections). Medium method: shared_buffers 1 GiB = 25%, worst-case work_mem budget, 0.5 GiB image + 50 GiB data + 1 GiB WAL.

Ports

Public ports are meant to be reached from outside the stack, usually through a reverse proxy; internal ones stay on the stack's own network.

ComponentPortExposurePurposeSources
Mattermost Team Edition (web app, API, WebSockets, jobs)8065/tcpPublic, through a proxyWeb app, REST API and WebSockets (HTTP); put behind TLS[3][7][8]
PostgreSQL5432/tcpInternal onlyPostgreSQL connections from Mattermost[4][34]

Every port in the catalog, with conflicts between apps

User and permissions (UID/GID)

The user each container's process runs as, and the paths it writes to. A bind mount for one of these paths must be writable by that UID:GID.

ComponentUID:GIDUserStarts as rootWrites toSources
Mattermost Team Edition (web app, API, WebSockets, jobs)2000:2000mattermostNo/mattermost/config/mattermost/data/mattermost/logs/mattermost/plugins/mattermost/client/plugins/var/tmp[4][6][7]
PostgreSQL999:999postgresYes, prepares its directories, then drops to this user/var/lib/postgresql/var/run/postgresql[27][28][34]

Storage growth

How much each component's data grows per month at each load level, on top of the disk in the profile. A value marked Assumption is ANAROQ's stated assumption, not a figure from the sources; the notes say what it rests on.

GiB per month
ComponentLightMediumHeavySources
Mattermost Team Edition (web app, API, WebSockets, jobs)Derived0.5822.3285.821[14][15]
PostgreSQLAssumption0.030.170.7[15]
What the growth figures rest on
  • Mattermost Team Edition (web app, API, WebSockets, jobs): Uploaded files in /mattermost/data at the top of the docs' medium-usage band, 25 MB per user a month: 25, 100 and 250 users = 625, 2,500 and 6,250 MB a month. Data retention is a compliance feature of the paid plans (not even in the free Entry mode), so nothing is deleted automatically; logs in /mattermost/logs come on top.
  • PostgreSQL: 500, 3,000 and 12,500 messages a day × 30 days × an assumed 2 KB per post with its indexes = 30, 180 and 750 MB a month. Posts are kept forever: data retention is a compliance feature of the paid plans. Mattermost publishes no per-post figure.

Upgrade and rollback

How to move to a new version safely, and how to go back if it fails.

Back up first

With Mattermost stopped: pg_dump of the mattermost database, plus copies of the config volume (config.json) and the data volume (uploaded files). [20][22]

Upgrade steps

  1. Read the important upgrade notes for every version between yours and the target, check that PostgreSQL meets the new minimum, and move from one ESR to the next (for example 10.11 → 11.7); jumping two ESRs is supported but untested. [12][17][18]
  2. Back up the database, config and data (see backup), set the new pinned tag of mattermost/mattermost-team-edition in the Compose file, then run docker compose pull and docker compose up -d. [5][20]DerivedThe Docker guide says to set MATTERMOST_IMAGE_TAG to a specific version and redeploy; pull and up -d is how Compose applies a new tag.
  3. Schema migrations run when the new server starts; wait until the container is healthy (mmctl system status) and check docker compose logs mattermost before inviting users back. [6][10][18]

Roll back

Stop the stack, restore the database dump and the config and data copies taken before the upgrade, pin the previous tag and start it again. Downgrading in place needs mattermost db downgrade run with the newer binary, and users who signed in on v11+ may need a password reset on v10. [16][18][21]DerivedThe release policy says to restore the database and the previous version to revert an upgrade; the downgrade guide's schema downgrade inside a container is not documented for Docker, so the restore is the rollback here.

Known breaking changes

  • In 12.0.0: The minimum PostgreSQL version becomes 15 (the template's sidecar runs 18). RHEL 7 and 8 are no longer supported hosts; containers are unaffected. [12]
  • In 11.7.3: Do not upgrade from 10.11.17 or later to 11.7.2 or earlier: a bug breaks the database migration numbers. It is fixed in 11.7.3, so go straight to the current 11.7 patch. [18]
  • In 11.0.0: MySQL is no longer supported and PostgreSQL 14 is the minimum. Team Edition is limited to 250 users and loses GitLab SSO, and Playbooks stops working in it. Bleve search is removed: set DisableDatabaseSearch to false before upgrading if Bleve was on. [18][19][20]
  • In 11.0.0: Passwords move from bcrypt to PBKDF2 at each sign-in, so after a downgrade to 10.x those users need a password reset. The server refuses to start with ExperimentalViewArchivedChannels=false or ClientSideCertEnable=true. Manually installed plugins are no longer supported; MaxOpenConns drops from 300 to 100. [18]

Limits

  • Team Edition stops at 250 activated users and has no single sign-on (GitLab SSO was removed in v11.0). Beyond that, the Enterprise image runs free as Mattermost Entry (best under 50 users, with a 10,000-message history limit) or with a paid license; this template doesn't cover it. [15][18][19]
  • Calls (1:1 calls and screen sharing, up to 40 minutes in Team Edition) send media over UDP 8443 (TCP 8443 as fallback) straight to the server, never through the reverse proxy. The template does not publish 8443, so calls from other machines fail until you open it yourself. [3][11]
  • A team holds 50 users by default (MaxUsersPerTeam); raise it in the System Console for larger teams. Search runs in PostgreSQL: email addresses and terms with dashes are not found, and only the first 1 MB of a file's text is indexed. [8][12]
  • The 11.7 Extended Support Release gets security and major bug fixes until 2027-05-15 but no new features; newer monthly releases (11.11, then 12.0) add features and are each supported for three months. [16][17]

Security

  • Create the first account right after the first start: it becomes the system admin. Open sign-up is off by default, so everyone after that joins through an invite link or an admin. [5][8]
  • Serve Mattermost only over HTTPS through the reverse proxy. Behind it the template sets the Site URL to https://<domain>; it must match the address users open, or links, OAuth and the mobile apps break. [4][5]
  • The image enables local mode: a socket in /var/tmp gives full mmctl admin access, without a password, to anyone who can run commands in the container (the healthcheck uses it). Keep access to the Docker host limited to admins. [6][8]
  • Team Edition is meant for small teams, hobbyists and personal use; Mattermost does not recommend it for government or sensitive commercial workloads. The process runs as uid 2000 on a distroless image with no shell. [6][15]

Backup

  • Back up three things together: a pg_dump of PostgreSQL (messages, users, channels), the config volume (config.json and any certificates) and the data volume (uploaded files). Stop Mattermost during the backup, or the database and files can drift apart. [22]
  • To restore, put the database, config.json and the files back where they were backed up from, then start the same image tag that made the backup; upgrade only after the restore works. [20][22]

Latest release

Newest upstream release
Mattermost 12.0.0 [12][25]
This profile was checked against

Mattermost 11.7.12

A newer release exists than the one this profile was checked against.

Checked on
14 Oct 2026
State
Checked within the last 90 days
Where releases are published
Docker Hub tags

Latest releases of every app

Version

Profile status
Published
Checked against release
Mattermost 11.7.12
Profile version
1.0.0
Figures verified
14 Oct 2026
Catalog release
2026.10.10
Sizing policy
2026.10.0
Compose file
Unverified
Official site
mattermost.com

Sources

  1. Docker Docs: Control startup order in Compose (pg_isready healthcheck, service_healthy) (Official docs · read 11 Oct 2026)
  2. mattermost/docker docker-compose.yml (main at 4974146; the repo has no tags): postgres at /var/lib/postgresql, mattermost with config, data, logs, plugins, client/plugins and bleve-indexes volumes (Official Compose · read 14 Oct 2026)
  3. mattermost/docker docker-compose.without-nginx.yml: publishes APP_PORT:8065 and the Calls port 8443 over udp and tcp (Official Compose · read 14 Oct 2026)
  4. mattermost/docker env.example: postgres 18-alpine, mmuser/mattermost, DATASOURCE with sslmode=disable&connect_timeout=10, SITEURL https://${DOMAIN}, uid 2000, tag 11.7.0 (latest ESR) (Official Compose · read 14 Oct 2026)
  5. Mattermost docs: Deploy Mattermost on Docker (clone mattermost/docker, chown 2000:2000 for bind mounts, without-nginx file, pin specific version tags, create the first system admin) (Official docs · read 14 Oct 2026)
  6. mattermost repository: server/build/Dockerfile at v11.7.12 (distroless, USER mattermost 2000, HEALTHCHECK mmctl system status --local every 30 s, EXPOSE 8065, five VOLUMEs, local mode on) (Official repository · read 14 Oct 2026)
  7. Registry config of mattermost-team-edition:11.7.12 (amd64): User mattermost, ports 8065 8067 8074 8075, 5 Volumes, Healthcheck mmctl system status --local 30 s; dirs owned 2000:2000 (Measurement · read 14 Oct 2026)
  8. mattermost repository: model/config.go at v11.7.12 (ListenAddress :8065, SiteURL http://localhost:8065, MaxOpenConns 100, MaxUsersPerTeam 50, EnableOpenServer false, socket in /var/tmp) (Official repository · read 14 Oct 2026)
  9. mattermost repository: channels/api4/system.go at v11.7.12 (GET /api/v4/system/ping) (Official repository · read 14 Oct 2026)
  10. mattermost repository: mmctl system status at v11.7.12 (full ping; non-zero exit when the server, database or file store is unhealthy) (Official repository · read 14 Oct 2026)
  11. Mattermost docs: Calls deployment guide (media on 8443 UDP, TCP fallback, opened directly on the server, not through NGINX; Team Edition: 1-1 calls and screen share up to 40 minutes) (Official docs · read 14 Oct 2026)
  12. Mattermost docs: Software and hardware requirements (PostgreSQL 14.0+; v12.0 needs 15+; single server 1–1,000 users: 1 vCPU, 2 GB RAM; 1,000–2,000: 2 vCPU, 4 GB) (Official docs · read 14 Oct 2026)
  13. Mattermost docs: Scaling for Enterprise (reference architectures by concurrent users; Enterprise search required beyond 5 million posts) (Official docs · read 14 Oct 2026)
  14. Mattermost docs: Scale up to 200 users (app node 2 vCPU/4 GiB; files 1–5, 5–25 or 25–100 MB per user per month; start from 600–800 MB) (Official docs · read 14 Oct 2026)
  15. Mattermost docs: Editions and offerings (Team Edition: MIT-licensed binary, under 250 activated users, no SSO; source under AGPLv3; Entry is a free mode of the Enterprise binary) (Official docs · read 14 Oct 2026)
  16. Mattermost docs: Release policy (monthly feature releases; ESR every 9 months, supported 12 months; v11.7 ESR supported until 2027-05-15) (Official docs · read 14 Oct 2026)
  17. Mattermost docs: Server releases (v11.11 newest listed, support to 2026-12-15; v11.7 Extended until 2027-05-15; upgrade ESR to ESR; v12.0 not listed on 2026-10-14) (Official docs · read 14 Oct 2026)
  18. Mattermost docs: Important upgrade notes (v11.0: MySQL ended, PostgreSQL 14+, Bleve and GitLab SSO in Team Edition removed, PBKDF2 hashing, MaxOpenConns 100; v10.11.17+ to ≤ v11.7.2 blocked) (Release notes · read 14 Oct 2026)
  19. Mattermost docs: v11 changelog (v11.0: user limit lowered to the final threshold of 250 for Team Edition; v11.7 is the Extended Support Release) (Release notes · read 14 Oct 2026)
  20. Mattermost docs: Upgrade Mattermost Server (full backup of database and application first; config, logs, plugins, client/plugins and data are preserved) (Official docs · read 14 Oct 2026)
  21. Mattermost docs: Downgrade Mattermost Server (back up first; mattermost db downgrade with the newer binary; not more than one major version back) (Official docs · read 14 Oct 2026)
  22. Mattermost docs: Backup and disaster recovery (database dump, the config directory and the ./data files; stop Mattermost for a clean backup) (Official docs · read 14 Oct 2026)
  23. Mattermost: Pricing (FAQ: Mattermost Cloud Enterprise, a single-tenant managed service run by Mattermost, Inc., through sales) (Official docs · read 14 Oct 2026)
  24. Docker Hub manifest of mattermost/mattermost-team-edition:11.7.12 (linux/amd64): 448,271,026 B compressed; 31 layers decompressed and counted: 649,274,368 B (Measurement · read 14 Oct 2026)
  25. Docker Hub tags of mattermost/mattermost-team-edition (11.7.12 pushed 2026-10-08; 11.11.1 is latest; 12.0.0 pushed 2026-10-14 after rc5) (Official repository · read 14 Oct 2026)
  26. Docker: the containerd image store keeps image layers both compressed and uncompressed (Official docs · read 14 Oct 2026)
  27. docker-library/postgres: 18/trixie Dockerfile (postgres uid/gid 999, VOLUME /var/lib/postgresql) (Official repository · read 14 Oct 2026)
  28. docker-library/postgres: 18/trixie docker-entrypoint.sh (chown PGDATA, then gosu postgres) (Official repository · read 14 Oct 2026)
  29. PostgreSQL 18 documentation: 19.4 Resource Consumption (Official docs · read 10 Oct 2026)
  30. PostgreSQL 18 documentation: 19.3 Connections and Authentication (Official docs · read 10 Oct 2026)
  31. PostgreSQL 18 documentation: 19.10 Vacuuming (autovacuum settings) (Official docs · read 10 Oct 2026)
  32. PostgreSQL 18 documentation: 19.5 Write Ahead Log (max_wal_size) (Official docs · read 10 Oct 2026)
  33. PostgreSQL 18 documentation: 51.2 How Connections Are Established (Official docs · read 10 Oct 2026)
  34. Docker Official Image postgres: documentation (docker-library/docs) (Official docs · read 10 Oct 2026)
  35. Docker Hub: library/postgres tag 18.6 (compressed image sizes) (Official repository · read 10 Oct 2026)

All self-hosted apps