Will one server carry your whole team?
Yes, for most teams. Rocket.Chat is two programs working together: the chat application your browser and phone talk to, and MongoDB, the database that stores every message, channel and user. The project's own requirements page sizes each one separately for up to 500 people connected at the same time:
| Part | Cores | Speed per core | Memory | Disk |
|---|---|---|---|---|
| Chat application | 2 | 3.5 to 5.0 GHz | 4 GiB | 20 GiB |
| MongoDB database | 2 | 3.0 GHz | 4 GiB | 10 GiB |
Put both on one dedicated server and you are looking at roughly 4 cores, 8 GiB of memory and 30 GiB of disk. That total is our sum, not the docs', and it assumes a single copy of the database, where the docs' table pairs the application with three MongoDB copies. The docs call these figures minimums. Their next scenario, for more than 500 people online at once, belongs to Rocket.Chat's paid tiers (Commercial, Government, Defense) with high availability: 4 faster cores and 8 to 12 GiB for the application alone, with more memory and disk for each database copy.
Files people share in chat are stored inside the database unless you change it. The docs recommend moving them to S3-style storage for real use. You can run that yourself too: see our page on a MinIO server.
The database underneath, and the version it must be
Rocket.Chat 8 will only run against MongoDB 8.0 or later, and the docs say it has been checked with 8.2. Older chat releases needed older databases, so if you ever move an existing 7.x workspace across, the database has to be upgraded first.
MongoDB also has to run as a replica set, a group of database copies that keep each other in step. The official Docker files set that up for you with a single copy, which is all one server can hold. It works, but it is not a safety net: the docs strongly recommend three copies on separate machines if chat must survive a hardware failure.
The install guide warns that MongoDB 8 may not start on Ubuntu 26.04 yet, because of a problem on MongoDB's side. Choose Ubuntu 24.04 LTS when you set up the server.
The server that fits
Every machine in our dedicated server catalogue comes whole, with no other customer on it, root access and an unmetered port, so a busy day of file sharing never turns into a bandwidth bill. For team chat, three kinds stand out:
- A small team: an E3-1585L v5 Xeon cartridge: four 3 GHz cores, 16 to 64 GB of memory, NVMe storage. It has the fastest cores among the small servers.
- Room for lots of shared files: the Intel Xeon D-1587, 16 slower cores and up to 128 GB of memory with a 1.92 TB NVMe disk.
- Chat plus storage, monitoring and backups on one box: a two-processor Xeon E5-2630L v3 server, 16 cores, with a console screen and power button you can reach even when the system will not boot.
None of these reaches the 3.5 GHz per core the docs mention, so if your team is sensitive to small delays, favour the faster cores over more of them. Ready servers are handed over within 30 minutes of payment approval, and it is month to month, so you can try a size and move up later.
Up and running in an evening
Start from a clean Linux server on Ubuntu 24.04 and point your domain, say chat.example.com, at its address. Then work through these steps in order.
- Turn on the firewall with only SSH, 80 and 443 open, before anything else listens.
- Install Docker with the official script, plus git, Nginx and certbot.
- Download Rocket.Chat's official Docker files and copy the sample settings to
.env. - In
.env, setRELEASEto one exact version number, setROOT_URLto your https address, and addBIND_IP=127.0.0.1. - Get a free Let's Encrypt certificate for your domain.
- Start the database, the chat application and its message broker.
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
curl -L https://get.docker.com | sh
sudo apt install git nginx certbot
git clone --depth 1 https://github.com/RocketChat/rocketchat-compose.git
cd rocketchat-compose
cp .env.example .env
nano .env
sudo certbot certonly --standalone -d chat.example.com --email you@example.com \
--pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
sudo docker compose -f compose.database.yml -f compose.yml -f compose.nats.yml up -d
Why BIND_IP=127.0.0.1? It is our setting, not the guide's, and the sample .env does not list it, but the official compose.yml reads it. Left out, Docker opens two ports, 3000 for chat and 9458 for metrics, to the whole internet, over IPv4 and IPv6, and skips your firewall rules while doing it. With it, both ports answer only inside the server. Pointing ROOT_URL at your https address is our choice as well; the guide's Nginx instructions keep the http://localhost value. Starting only three files is our shortcut too: the guide's command adds a monitoring file and a healthcheck file, and if you add monitoring, change its sample Grafana password before the first start. The two certbot hooks are our addition; they pause Nginx for a moment so the certificate can renew itself every few months.
Make sure the first admin is you
Whoever finishes the setup wizard first becomes the admin, and the docs tell you to do it straight after deployment, before you share the address. Because the chat port only answers inside the server, nobody else can reach the wizard yet. Reach it yourself through SSH from your own computer:
- Run
ssh -L 8000:localhost:3000 your-user@chat.example.comand leave that window open. - Visit
http://localhost:8000in your browser and fill in the admin name, username, email and password. - Add your organisation details and link the workspace to Rocket.Chat Cloud; phone notifications and Marketplace apps rely on that.
Putting HTTPS in front
Now let Nginx carry the public traffic. Chat keeps a live connection open, a websocket, so Nginx has to pass the upgrade headers through. This config follows the one in the official guide, with the old TLS versions dropped, IPv6 added, a larger upload limit, since Nginx otherwise refuses anything over 1 MB, and an X-Forwarded-Proto: https header, because HTTPS ends at Nginx (the guide sends http). Those four changes are ours. Save it as /etc/nginx/sites-available/default, check it with sudo nginx -t, then sudo systemctl restart nginx.
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name chat.example.com;
ssl_certificate /etc/letsencrypt/live/chat.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/chat.example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
client_max_body_size 100m;
location / {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_redirect off;
}
}
server {
listen 80;
listen [::]:80;
server_name chat.example.com;
return 301 https://$host$request_uri;
}
What the free plan gives you, and when you outgrow it
Every new workspace starts on Starter. It costs nothing, you host it yourself, and it includes many of the paid features, from single sign-on to end-to-end encryption, with no cap on phone notifications. The catch is the size: up to 50 users. When you reach it, you simply cannot add anyone new; the people already there and all their messages stay put.
- Community: the open-source edition under the MIT licence. It counts up to 100 people online at the same time, keeps to basic messaging, and caps phone notifications at 10,000 a month. Rocket.Chat itself pitches it at very basic setups that are not in production, and warns against it for anything business-critical.
- Paid plans: Commercial, Government and Defense, priced by Rocket.Chat's sales team. Moving up needs no data migration.
Keeping it running
- Back it up: MongoDB holds everything, and the database image MongoDB publishes ships
mongodump. The commands below reach the database through its Compose service rather than a container name, write a dated file only root can read, and work from cron too, where each % has to be written as \%. Keep a copy somewhere other than the server. - Update on purpose: change
RELEASEin.envand run the same start command again with all the files you started with. Take a backup first. - Stay inside the support window: an ordinary release is supported for six months and an LTS release for twelve. After that, phone notifications and Marketplace apps stop for that version.
- If you prefer another chat server: we also cover self-hosting Mattermost.
sudo install -d -m 700 /root/backups
sudo -i
cd /home/your-user/rocketchat-compose && umask 077 && docker compose -f compose.database.yml -f compose.yml -f compose.nats.yml exec -T mongodb mongodump --archive > /root/backups/chat-$(date +%F).dump
# to restore, stop the chat app, replace the data, start it again:
cd /home/your-user/rocketchat-compose
docker compose -f compose.database.yml -f compose.yml -f compose.nats.yml stop rocketchat
docker compose -f compose.database.yml -f compose.yml -f compose.nats.yml exec -T mongodb mongorestore --drop --archive < /root/backups/chat-2026-10-23.dump
docker compose -f compose.database.yml -f compose.yml -f compose.nats.yml start rocketchat
# every night at 03:30, as a line in root's crontab (% becomes \%):
30 3 * * * cd /home/your-user/rocketchat-compose && umask 077 && docker compose -f compose.database.yml -f compose.yml -f compose.nats.yml exec -T mongodb mongodump --archive > /root/backups/chat-$(date +\%F).dump
Questions people ask
- Can I run Rocket.Chat on my own server for free?
- Yes. The software is free to run, and every fresh workspace begins on the Starter plan, which allows up to 50 users at no cost. You pay only for the server it runs on. Bigger teams either move to the open-source Community edition, which Rocket.Chat only recommends for very basic setups outside production, or buy a paid plan.
- How many people can use a free Rocket.Chat workspace?
- Starter allows up to 50 users in the workspace. Community counts differently: up to 100 people connected at the same moment. Once Starter is full, existing people keep working but you cannot add new ones.
- Do I have to install MongoDB separately?
- Not with the official Docker setup: it starts a MongoDB container for you and turns it into the replica set Rocket.Chat expects. You do have to keep its version right, 8.0 or later for Rocket.Chat 8, and back it up yourself.
- Will the phone apps get notifications from my own server?
- Yes, once you register the workspace with Rocket.Chat Cloud during setup and the server can reach gateway.rocket.chat over the internet. Keep the server on a supported release, because notifications stop for versions past their support window.
- Is a VPS enough, or do I need a whole server?
- A small workspace can run on less, but our sum of the documentation's smallest figures comes to about 4 cores and 8 GiB, with fast cores preferred. A dedicated server gives the application and database all of its cores and memory, with no other customer competing for them.