Cara Menjalankan Rocket.Chat di VPS dengan Docker Compose
Panduan lengkap self-host Rocket.Chat di VPS dengan Docker Compose, termasuk replica set MongoDB satu node, TLS, pencadangan, dan solusi error umum.
Yang akan Anda bangun
Chat tim privat yang sepenuhnya Anda miliki: Rocket.Chat yang berjalan di VPS milik Anda sendiri menggunakan Docker Compose, dengan terminasi TLS, serta seluruh pesan tersimpan dalam database MongoDB yang dapat Anda cadangkan dan pindahkan. Rocket.Chat adalah alternatif open-source yang matang untuk Slack dan Teams, dengan channel, pesan langsung, thread, berbagi file, serta komunikasi suara dan video. Semua komponen berjalan pada perangkat keras yang Anda sewa dan kendalikan. Aplikasi ini hanya menggunakan satu container dan dapat aktif dalam hitungan menit. Hampir semua masalah yang benar-benar terjadi berada di database di sebelahnya. Karena itu, sebagian besar panduan ini membahas MongoDB, khususnya satu persyaratan yang sering mengejutkan pengguna saat pertama kali mengetahuinya: Rocket.Chat tidak dapat berjalan pada MongoDB standalone. Rocket.Chat memerlukan replica set, meskipun "set" tersebut hanya terdiri atas satu node.
Prasyarat dan perhitungan RAM yang sering tidak dijelaskan
Tentukan spesifikasi server secara realistis. Batas minimum yang realistis untuk tim kecil adalah 2 vCPU dan 4 GB RAM. Proses Node.js milik Rocket.Chat memerlukan sekitar 1 hingga 1.5 GB RAM, sedangkan cache WiredTiger milik MongoDB secara default menggunakan sekitar setengah RAM yang tersisa. Pada VPS dengan 2 GB RAM, keduanya dapat berjalan saat boot, tetapi akan berebut sumber daya begitu trafik nyata masuk: MongoDB memperbesar cache-nya, Node memperbesar heap-nya, kernel kehabisan halaman memori, lalu out-of-memory killer menghentikan proses yang paling besar, biasanya mongod. Container menampilkan Killed, Docker me-restart-nya, dan server chat Anda terputus setiap beberapa menit saat menerima beban yang seharusnya dapat ditanganinya dengan mudah. 2 GB cukup untuk uji coba dengan dua orang, tetapi tidak cukup untuk server tim. Mulailah dengan 4 GB, dan gunakan 8 GB jika Anda memperkirakan puluhan pengguna secara bersamaan, panggilan video, atau riwayat upload yang terus bertambah.
Sebelum memulai, Anda juga perlu menyiapkan tiga hal. Nama domain dengan A record yang mengarah ke IP publik VPS. Fitur real-time Rocket.Chat dan klien seluler memerlukan hostname yang stabil, bukan IP tanpa nama domain. Port 80 dan 443 terbuka pada firewall server dan firewall jaringan provider. Pada sebagian besar panel, firewall jaringan provider merupakan kontrol yang terpisah. Anda juga memerlukan VPS KVM Ubuntu 24.04 yang masih baru, dengan akses root atau sudo. Jika Anda masih menentukan apakah server chat merupakan layanan pertama yang tepat untuk dijalankan, panduan tentang layanan yang layak di-self-host pada 2026 menjelaskan berbagai pertimbangannya.
Instal engine Docker dan plugin Compose
Gunakan repositori apt milik Docker, bukan paket docker.io yang disediakan Ubuntu dan bukan biner Python standalone docker-compose yang sudah usang. Compose modern adalah plugin Docker yang dipanggil sebagai docker compose, dengan spasi, bukan tanda hubung. docker-compose v1 yang lama sudah tidak didukung dan tidak menangani sintaks healthcheck serta dependensi di bawah ini dengan benar.
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginPastikan kedua komponen tersedia:
sudo docker version
sudo docker compose versiondocker compose version yang mencetak keluaran seperti Docker Compose version v2.x adalah pemeriksaan yang diperlukan. Jika muncul error docker: 'compose' is not a docker command, plugin belum terinstal dan Anda akan mengalami kegagalan yang membingungkan nanti. Perbaiki masalah ini sekarang.
File compose: MongoDB sebagai replica set satu node
Bagian ini sering keliru, jadi baca perlahan. Rocket.Chat menggunakan change streams MongoDB untuk mengirim pesan baru ke klien yang terhubung secara real time. Fitur change streams hanya tersedia pada replica set. Jika Rocket.Chat diarahkan ke mongod standalone biasa, aplikasi akan terhubung, gagal membuka change stream, lalu terus-menerus melakukan restart loop. Perbaikannya sederhana: jalankan satu container MongoDB biasa, tetapi mulai dengan --replSet, lalu inisialisasi set yang terdiri dari satu anggota.
Buat direktori kerja dan sebuah compose.yml:
services:
mongodb:
image: mongo:8.0
restart: always
command: ["mongod", "--replSet", "rs0", "--bind_ip_all", "--oplogSize", "128"]
volumes:
- mongodb_data:/data/db
- mongodb_config:/data/configdb
healthcheck:
test: ["CMD", "mongosh", "--quiet", "--eval", "db.adminCommand('ping')"]
interval: 10s
timeout: 10s
retries: 12
rocketchat:
image: registry.rocket.chat/rocketchat/rocket.chat:8.5.1
restart: always
depends_on:
mongodb:
condition: service_healthy
environment:
MONGO_URL: "mongodb://mongodb:27017/rocketchat?replicaSet=rs0"
MONGO_OPLOG_URL: "mongodb://mongodb:27017/local?replicaSet=rs0"
ROOT_URL: "https://chat.example.com"
PORT: "3000"
ports:
- "127.0.0.1:3000:3000"
volumes:
mongodb_data:
mongodb_config:Beberapa pilihan di sini memang disengaja. Port Rocket.Chat dipublikasikan ke 127.0.0.1:3000, bukan 0.0.0.0. Aplikasi tidak menggunakan TLS, jadi hanya reverse proxy pada server yang sama yang boleh mengaksesnya. Jika di-bind ke semua interface, halaman login tanpa enkripsi akan langsung terekspos ke Internet publik. MongoDB sama sekali tidak dipublikasikan ke host. MongoDB hanya dapat diakses melalui jaringan internal Compose dengan nama mongodb, yaitu hostname yang digunakan oleh MONGO_URL. MONGO_URL membawa ?replicaSet=rs0. Jika opsi itu dihilangkan, driver akan menganggap server sebagai standalone meskipun sebenarnya merupakan replica set, sehingga change streams tetap gagal. MONGO_OPLOG_URL menunjuk ke database local tempat oplog berada. Rocket.Chat versi modern lebih mengutamakan change streams, tetapi menetapkan opsi ini tidak berbahaya dan menjaga agar jalur kode lama tetap berfungsi. depends_on menggunakan condition: service_healthy, sehingga Compose menunggu hingga MongoDB merespons ping sebelum memulai Rocket.Chat. Itulah fungsi healthcheck.
Tetapkan tag versi yang pasti pada kedua image, mongo:8.0 dan rilis Rocket.Chat yang eksplisit seperti 8.5.1 di sini, dan jangan pernah gunakan :latest karena hal itu mengubah docker pull tanpa pengawasan menjadi upgrade tidak sengaja yang tidak dapat dimigrasikan. Periksa rilis stabil Rocket.Chat saat ini dan versi MongoDB yang didukungnya sebelum menetapkan pin. Rocket.Chat menerbitkan dokumen informasi yang dapat dibaca mesin untuk setiap rilis: curl -s https://releases.rocket.chat/8.5.1/info | jq '{compatibleMongoVersions, lts}' mengembalikan compatibleMongoVersions: ["8.0"] untuk 8.5.1, sehingga mongo:8.0 adalah satu-satunya engine yang didukung, ditambah flag lts yang menunjukkan apakah rilis tersebut merupakan build dukungan jangka panjang yang layak dipin untuk server yang tidak ingin terus diawasi. Tidak semua proyek menerbitkan image berversi. Dalam kasus tersebut, pin diterapkan pada source: self-hosting pelacak latihan openGym berarti melakukan checkout pada tag git tertentu dan melakukan build dari tag tersebut, bukan mengikuti branch yang terus berubah.
Inisialisasi replica set
Jalankan stack:
sudo docker compose up -dRocket.Chat akan langsung mengalami crash, dan Docker akan terus me-restart-nya. Hal ini diharapkan karena replica set belum ada. Buat replica set satu kali secara manual:
sudo docker compose exec mongodb mongosh --eval 'rs.initiate({_id: "rs0", members: [{_id: 0, host: "mongodb:27017"}]})'Hasil yang benar adalah { ok: 1 }. Dalam beberapa detik, node tunggal akan memilih dirinya sendiri sebagai primary. Konfirmasikan dengan:
sudo docker compose exec mongodb mongosh --quiet --eval 'rs.status().members[0].stateStr'Anda harus melihat PRIMARY. Detail terpenting pada seluruh halaman ini adalah argumen host: "mongodb:27017". Jika Anda menjalankan rs.initiate() tanpa daftar members, MongoDB akan mengumumkan replica set menggunakan hostname internal container, yaitu hash acak seperti a1b2c3d4e5f6. Rocket.Chat, yang terhubung dari container-nya sendiri, tidak dapat me-resolve nama tersebut. Akibatnya, driver MongoDB gagal melakukan resolusi DNS dan terus mengulang sambil mencatat MongoServerSelectionError: getaddrinfo ENOTFOUND a1b2c3d4e5f6. Selalu lakukan inisialisasi dengan nama service eksplisit yang sesuai dengan MONGO_URL Anda.
Boot pertama: pantau proses startup
Setelah set berstatus primary, Rocket.Chat akan terhubung dengan benar saat restart berikutnya dan memulai migrasi pada proses pertama. Pantau log:
sudo docker compose logs -f rocketchatBaris yang Anda tunggu adalah banner startup:
+--------------------------------------------+
SERVER RUNNING
Rocket.Chat Version: 8.5.1
NodeJS Version: 22.22.3 - x64
+--------------------------------------------+Boot pertama berlangsung lambat. Aplikasi menjalankan migrasi database dan membuat indeks, jadi tunggu satu atau dua menit sebelum memeriksa masalah. Jika log justru terus menampilkan MongoServerSelectionError: Server selection timed out after 30000 ms dengan deskripsi topologi bertipe ReplicaSetNoPrimary, replica set belum diinisialisasi. Jika log terus menampilkan getaddrinfo ENOTFOUND pada hash acak, replica set diinisialisasi dengan host yang salah. Dalam kedua kasus tersebut, kembali ke langkah sebelumnya. Setelah Anda melihat SERVER RUNNING, Rocket.Chat mendengarkan pada 127.0.0.1:3000 dan saatnya memasang hostname nyata serta TLS di depannya.
Lindungi dengan TLS
Jangan pernah mengekspos Rocket.Chat melalui HTTP biasa. Setelah masuk melalui http:// satu kali, Anda telah memberikan kata sandi admin kepada siapa pun yang dapat menyadap jalur tersebut. Hentikan TLS pada reverse proxy di server yang sama, lalu teruskan koneksi ke 127.0.0.1:3000. Ada dua hal yang penting: proxy harus meneruskan header upgrade WebSocket karena Rocket.Chat beroperasi secara real-time dan akan gagal tanpa header tersebut, serta ROOT_URL pada container harus sama persis dengan alamat HTTPS publik yang diketik pengguna.
Mulai dengan server block nginx HTTP biasa yang melakukan proxy ke aplikasi dan meneruskan header upgrade. Simpan sebagai /etc/nginx/sites-available/rocketchat, buat symlink ke dalam sites-enabled, lalu reload:
server {
listen 80;
server_name chat.example.com;
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 $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Biarkan pada port 80 untuk sementara. Block dengan listen 443 ssl; tanpa sertifikat bahkan tidak akan lolos sudo nginx -t. Reload nginx (sudo nginx -t && sudo systemctl reload nginx), lalu terbitkan sertifikat. Cara paling praktis di Ubuntu adalah Sertifikat TLS Let's Encrypt dengan Certbot dan nginx: certbot --nginx menulis ulang block di atas secara langsung dengan menambahkan listen 443 ssl;, baris ssl_certificate, dan redirect otomatis dari 80 ke 443, lalu menjadwalkan renewal untuk Anda. Jika Anda sudah menjalankan beberapa container di belakang satu proxy, Traefik dengan TLS otomatis untuk banyak aplikasi Docker adalah pilihan yang lebih rapi. Tambahkan label router dan service ke service rocketchat, lalu Traefik akan meminta dan memperbarui sertifikat untuk Anda tanpa nginx block. Apa pun pilihannya, atur ROOT_URL ke https://chat.example.com di compose.yml, lalu jalankan kembali sudo docker compose up -d agar container menerapkan perubahan tersebut. Jika Anda ingin server hanya dapat dijangkau dari jaringan internal Anda, bukan dari Internet publik, tempatkan VPN WireGuard yang di-host sendiri pada VPS di depannya dan bind proxy ke alamat tunnel.
Panduan penyiapan saat pertama kali dijalankan
Buka https://chat.example.com dan Rocket.Chat akan memandu Anda melalui panduan singkat. Pertama, isi akun admin, nama lengkap, nama pengguna, email, dan kata sandi yang kuat. Ini satu-satunya akun yang tersedia, jadi jangan sampai kehilangan kredensialnya. Berikutnya, isi informasi organisasi dan server: nama, industri, ukuran, nama situs, dan bahasa default. Pengaturan ini hanya bersifat tampilan, jadi isi lalu lanjutkan. Setelah itu, pilih opsi yang paling penting: daftarkan workspace ini ke Rocket.Chat Cloud, atau tetap mandiri.
Pendaftaran mengaktifkan notifikasi push pada perangkat seluler melalui gateway Rocket.Chat dan marketplace add-on. Konsekuensinya, server memiliki hubungan control plane dengan cloud Rocket.Chat. Mode mandiri menjaga server tetap sepenuhnya privat dan bebas dependensi. Namun, notifikasi push pada iOS dan Android tidak akan berfungsi karena Apple dan Google tidak mengizinkan aplikasi yang dibuat sendiri menyimpan sertifikat push. Aplikasi resmi meneruskan notifikasi melalui gateway cloud. Pilih mode mandiri jika privasi adalah tujuan utama dan pengguna Anda menggunakan aplikasi web. Pilih pendaftaran jika notifikasi push pada perangkat seluler wajib tersedia. Anda dapat mengubah pilihan ini nanti melalui Admin.
Kunci konfigurasi sebelum mengundang siapa pun
Rocket.Chat secara default mengaktifkan open registration. Registration Form secara default disetel ke Public, sehingga siapa pun yang menemukan URL dapat membuat akun. Pada hostname publik, ini merupakan akses terbuka. Buka Admin → Settings → Accounts → Registration dan ubah Registration Form menjadi Disabled, agar akun dibuat secara manual atau melalui invite link, atau menjadi Secret URL. Saat berada di sana, nonaktifkan Allow Anonymous Read dan Allow Anonymous Write, kecuali Anda memang menginginkan channel publik yang hanya dapat dibaca. Jika membuat setiap akun secara manual terasa merepotkan dan ini bukan satu-satunya service yang digunakan tim untuk login, arahkan login OAuth Rocket.Chat ke server Authentik SSO yang di-host sendiri, sehingga proses penambahan dan penghapusan pengguna ditangani satu kali di satu tempat, bukan satu per satu pada setiap aplikasi.
Tentukan juga lokasi penyimpanan upload. Secara default, penyimpanan File Upload menggunakan GridFS, yang menyimpan setiap gambar dan lampiran langsung di dalam MongoDB. Cara ini sederhana, tetapi database Anda dan setiap mongodump yang dibuat akan terus membesar ketika pengguna menempelkan screenshot. Pada Admin → Settings → File Upload, Anda dapat mengubah penyimpanan ke filesystem lokal atau bucket yang kompatibel dengan S3, serta menetapkan ukuran file maksimum yang wajar. Untuk tim kecil, GridFS sudah memadai; tetapi pahami bahwa ukuran backup akan terus bertambah seiring waktu.
Pencadangan dengan mongodump
Seluruh data Anda berada di volume mongodb_data. Jangan menyalin volume begitu saja dari database yang sedang berjalan. Buat dump yang konsisten dengan mongodump dan alirkan hasilnya ke file pada host:
sudo docker compose exec -T mongodb mongodump --db rocketchat --archive --gzip > rocketchat-$(date +%F).archive.gzArsip gzip tunggal tersebut berisi seluruh workspace Anda: pengguna, channel, pesan, pengaturan, serta file jika upload masih disimpan di GridFS. Jika Anda memindahkan upload ke filesystem atau S3, cadangkan penyimpanan tersebut secara terpisah. Untuk memulihkan data ke stack baru, inisialisasi replica set terlebih dahulu, kemudian jalankan:
sudo docker compose exec -T mongodb mongorestore --archive --gzip --drop < rocketchat-2026-07-15.archive.gzSalin arsip tersebut ke luar server, misalnya ke object storage atau server lain. Simpan di lokasi apa pun yang tidak ikut kehilangan backup jika VPS mati. Jalankan dump dari cron setiap malam. Backup yang belum pernah dipulihkan hanyalah harapan, bukan backup. Uji pemulihan satu kali pada VPS sementara agar Anda mengetahui bahwa prosesnya berhasil sebelum benar-benar diperlukan.
Pembaruan: kunci tag, baca catatan rilis, ikuti matriks MongoDB
Dua aturan membuat proses pembaruan tetap sederhana. Pertama, perbarui Rocket.Chat satu versi mayor setiap kali. Rocket.Chat menjalankan migrasi skema saat boot dan sengaja menolak lompatan antarversi mayor. Jika Anda mencoba berpindah langsung dari 6.x ke 8.x, proses akan berhenti dengan error migrasi, bukan merusak data. Ubah tag image ke rilis terbaru dari versi mayor berikutnya, baca catatan rilis tersebut untuk mengetahui perubahan yang dapat menyebabkan inkompatibilitas, jalankan docker compose up -d, lalu pantau log hingga migrasi selesai sebelum melanjutkan. Kedua, ikuti matriks dukungan MongoDB. Setiap rilis Rocket.Chat mendukung kumpulan versi MongoDB tertentu, dan curl -s https://releases.rocket.chat/<version>/info | jq .compatibleMongoVersions menunjukkan versi yang didukung. Jika Anda memperbarui MongoDB, misalnya dari 7.0 ke 8.0, lakukan satu versi mayor setiap kali dan tetapkan feature-compatibility version setelah setiap lompatan. Pada MongoDB 8.0, perintah tersebut memerlukan confirm: true secara eksplisit. Jika tidak, perintah akan gagal dan menampilkan pesan yang meminta Anda menjalankannya kembali dengan flag konfirmasi:
sudo docker compose exec mongodb mongosh --eval 'db.adminCommand({setFeatureCompatibilityVersion: "8.0", confirm: true})'Buat mongodump sebelum setiap pembaruan salah satu komponen. Itulah seluruh perlindungan yang diperlukan.
Mode kegagalan, dengan string yang tepat
Rocket.Chat terus melakukan restart loop tepat setelah docker compose up, dan docker compose logs rocketchat terisi dengan MongoServerSelectionError. MongoDB berjalan, tetapi driver tidak dapat memilih primary, dan string yang tepat menunjukkan kesalahan yang Anda buat. Server selection timed out after 30000 ms dengan tipe topologi ReplicaSetNoPrimary berarti Anda belum pernah menjalankan rs.initiate(), sehingga set belum memiliki konfigurasi. getaddrinfo ENOTFOUND yang diikuti hash acak berarti Anda melakukan inisialisasi tanpa host: "mongodb:27017" eksplisit, sehingga MongoDB mengiklankan hostname container yang tidak dapat di-resolve. Lakukan diagnosis dengan sudo docker compose exec mongodb mongosh --eval 'rs.status()': jika perintah tersebut menghasilkan error MongoServerError: no replset config has been received, lakukan inisialisasi set; jika menampilkan member yang name-nya berupa hash acak, lakukan inisialisasi ulang menggunakan nama service.
UI web terbuka, tetapi proses login terus berputar dan tidak pernah selesai. Buka console browser dan Anda akan melihat WebSocket connection to 'wss://chat.example.com/websocket' failed. Hampir selalu penyebabnya adalah ketidaksesuaian ROOT_URL atau proxy yang tidak meneruskan header upgrade. Pastikan ROOT_URL sama persis dengan alamat publik, termasuk https://, dan blok location nginx Anda menetapkan Upgrade serta Connection "upgrade" dengan proxy_http_version 1.1. Setelah mengubah salah satunya, jalankan ulang docker compose up -d.
Sebuah container terus berhenti dan docker compose ps menunjukkan bahwa container tersebut Restarting. docker compose logs terhenti di tengah baris, dan sudo dmesg | tail menunjukkan Out of memory: Killed process 12345 (mongod) dari oom-killer; exit code-nya adalah 137. RAM pada server habis. Solusi yang sebenarnya adalah menggunakan VPS yang lebih besar, minimal 4 GB. Sebagai solusi sementara, tambahkan swap dan batasi cache MongoDB dengan --wiredTigerCacheSizeGB 1 di dalam command, tetapi swap hanya menunda OOM berikutnya saat beban nyata:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfiledocker compose up gagal dengan Error response from daemon: driver failed programming external connectivity ... bind: address already in use. Port 3000 sudah digunakan oleh proses lain, biasanya container Rocket.Chat sebelumnya yang tidak berhenti dengan benar, atau aplikasi lain. Cari proses tersebut dengan sudo ss -ltnp | grep :3000, hentikan proses atau container itu, atau ubah sisi host pada mapping menjadi 127.0.0.1:3001:3000, lalu sesuaikan proxy_pass pada proxy Anda.
FAQ
Apakah Rocket.Chat benar-benar memerlukan replica set MongoDB?
Ya, bahkan untuk satu server dengan satu node database. Rocket.Chat mengirimkan pesan secara real-time menggunakan change stream MongoDB, dan change stream hanya tersedia pada replica set. mongod standalone tidak dapat membukanya. Anda tidak memerlukan beberapa mesin. Jalankan satu container MongoDB dengan --replSet rs0, lalu inisialisasi set yang memiliki satu anggota menggunakan rs.initiate(). Jika langkah ini dilewati, driver tidak pernah menemukan primary. Akibatnya, Rocket.Chat terus melakukan restart dengan MongoServerSelectionError: Server selection timed out dan tidak pernah selesai melakukan boot.
Berapa RAM yang diperlukan Rocket.Chat yang di-host sendiri?
Siapkan 4 GB sebagai minimum praktis dan 8 GB untuk tim yang aktif. Proses Node Rocket.Chat menggunakan sekitar 1 hingga 1,5 GB, sedangkan MongoDB menggunakan kira-kira setengah dari sisa RAM untuk cache WiredTiger. Pada server dengan RAM 2 GB, keduanya berebut memori. Akibatnya, out-of-memory killer menghentikan mongod saat menerima beban nyata, lalu menampilkan Killed di log dan exit code 137. RAM 2 GB hanya cukup untuk mengevaluasi software dengan beberapa pengguna uji.
Bagaimana cara menempatkan Rocket.Chat di balik HTTPS?
Jalankan reverse proxy pada VPS yang sama untuk melakukan terminasi TLS dan meneruskan koneksi ke 127.0.0.1:3000. Atur ROOT_URL milik container ke alamat https:// publik Anda. Proxy harus meneruskan header upgrade WebSocket. Jika tidak, proses login akan berhenti. Certbot dengan nginx adalah konfigurasi paling sederhana untuk satu aplikasi. Traefik lebih praktis jika Anda menjalankan beberapa container di balik satu proxy dan menginginkan pengelolaan sertifikat otomatis.
Bagaimana cara mencadangkan Rocket.Chat yang di-host sendiri?
Buat dump database yang konsisten menggunakan mongodump, bukan dengan menyalin volume: docker compose exec -T mongodb mongodump --db rocketchat --archive --gzip > backup.archive.gz. Arsip tersebut berisi pengguna, channel, pesan, dan pengaturan, serta file yang diunggah jika penyimpanan tetap menggunakan GridFS. Salin arsip itu ke luar server, otomatisasikan pencadangan setiap malam dengan cron, lalu lakukan mongorestore pada server sementara agar Anda mengetahui bahwa proses pemulihan benar-benar berfungsi.
Bagaimana cara memutakhirkan Rocket.Chat tanpa merusak MongoDB?
Mutakhirkan Rocket.Chat satu versi mayor setiap kali. Rocket.Chat menjalankan migrasi saat boot dan menolak melewati versi mayor. Baca catatan setiap rilis sebelum mengubah tag image yang dipatok. Periksa versi MongoDB yang didukung oleh rilis target menggunakan curl -s https://releases.rocket.chat/<version>/info | jq .compatibleMongoVersions. Saat memutakhirkan MongoDB, lakukan satu versi mayor setiap kali dan atur setFeatureCompatibilityVersion menggunakan confirm: true setelah setiap tahapan. Selalu buat mongodump terlebih dahulu.