GNU/Linux >> Belajar Linux >  >> Linux

Panduan untuk Meningkatkan ke MongoDB 5.0 dan Rocket.Chat 4.0 di Docker

Rocket.Chat 4.0.0 baru-baru ini dirilis. Sejujurnya, proses peningkatan dari versi sebelumnya tidak sederhana.

Meskipun Anda dapat melakukan transisi dari Rocket.Chat versi 3.xy lama, versi MongoDB sebelumnya, yaitu 3.6 dan 4.0, tidak digunakan lagi dengan server obrolan populer sejak rilis baru. Dukungan MongoDB 3.4 juga telah dihapus. Perubahan ini pertama kali dikonfirmasi pada permintaan tarik #22907 yang digabungkan dua minggu sebelumnya.

Dalam tutorial ini, saya telah mendokumentasikan proses langkah-demi-langkah yang lengkap untuk membuat peningkatan yang sukses ke Rocket.Chat termasuk meningkatkan versi database MongoDB Anda ke versi 5.0 terbaru.

Selain itu, ada juga keharusan wajib untuk mengubah mesin penyimpanan basis data dari MMAPv1 (juga tidak digunakan lagi) menjadi WiredTiger . Hanya dengan begitu Anda dapat melanjutkan peningkatan ke versi Rocket.Chat yang lebih baru. Prosedur itu, juga telah dibahas secara rinci dalam panduan komprehensif ini.

Cara Mengupgrade Rocket.Chat 3.x.y ke versi 4.0.0

Mari kita lihat apa yang Anda butuhkan untuk memutakhirkan Rocket.Chat ke versi terbaru dengan Docker di server Linux.

Prasyarat

Karena dokumen ini secara khusus berfokus pada penyederhanaan proses migrasi dan peningkatan versi, saya akan mengasumsikan konfigurasi Rocket.Chat yang ada (dengan mmap mesin penyimpanan di MongoDB) berdasarkan panduan penerapan berikut:

Semua persyaratan yang diperlukan telah dirinci dalam panduan di atas. Selain terbiasa dengan perintah Linux, mengetahui dasar-dasar Docker Compose akan sangat membantu di sini. Tetapi persyaratan penting yang relevan dengan panduan ini adalah:

  • Penempatan Docker berbasis Rocket.Chat 3.x.y berjalan langsung dengan setidaknya database MongoDB 3.4.
  • Pengaturan proxy terbalik Nginx digunakan untuk menghosting sendiri server Rocket.Chat di atas.

Langkah 0:Cadangkan dump database dari MongoDB Anda yang ada

Demi keamanan data Anda, lebih baik buat dan simpan database MongoDB yang sudah ada terlebih dahulu:

mkdir ~/backup
cd ~/rocketchat
docker-compose exec mongo mongodump --archive=/dump/mmap --gzip
cp data/dump/mmap ~/backup/mongo-mmap-dump.gzip

Saya juga menyarankan Anda memiliki cadangan lengkap dari instance Rocket.Chat Anda juga.

Sekarang Anda akan mempelajari tiga hal berikut:

  • Cara mengubah mesin penyimpanan basis data yang tidak digunakan lagi mmap ke wiredTiger
  • Tingkatkan versi MongoDB Anda
  • Tingkatkan instance Rocket.Chat Anda

Langkah 1:Hentikan sistem Rocket.Chat Anda yang ada termasuk semua layanannya

Langkah ini sangat penting karena Anda tidak ingin ada kerusakan data di database Anda - MongoDB . Untuk memastikan, melakukan migrasi dan meningkatkan versi pada instance database yang sedang berjalan sebaiknya dihindari, bahkan melalui penskalaan.

 docker-compose stop

Tidak seperti, docker-compose down ,  perintah di atas hanya akan menghentikan penampung Anda tanpa menghapusnya, sehingga meminimalkan waktu henti.

Langkah 2:Unduh repositori "MongoDB mmap ke migrasi wiredTiger"

Menggunakan git, ambil repo migrasi resmi ke lokasi terpisah di server Anda. Anggap ini sebagai perangkat migrasi yang disediakan untuk kenyamanan Anda dari pengembang Rocket.Chat.

git clone https://github.com/RocketChat/docker-mmap-to-wiredtiger-migration ~/rocketchat-migration

Langkah 3:Salin direktori "docker" dari repo yang diunduh

Direktori ini menyimpan Dockerfile dari image migrator kustom. Untuk file Docker Compose yang baru direvisi, Anda memerlukan ini di folder penulisan yang ada:

cp -r ~/rocketchat-migration/docker ~/rocketchat/docker

Langkah 4:Cadangkan file Docker Compose yang ada

Di sini, saya menamakannya docker-compose.old.yml . Anda dapat menggunakannya sebagai referensi ketika Anda menggunakan konfigurasi baru (dibahas di langkah berikutnya):

mv ~/rocketchat/docker-compose.yml ~/rocketchat/docker-compose.old.yml

Langkah 5:Gunakan file Docker Compose berbasis migrasi baru

Repo migrasi yang baru diunduh juga menyertakan file Docker Compose baru agar Anda dapat memulai proses dengan mudah. Namun, dalam kasus kami, saya harus mengikuti konfigurasi di bawah ini karena didasarkan pada pengaturan proxy terbalik:

version: "3.7"

services:
  rocketchat:
    image: rocketchat/rocket.chat:3.18.2
    command: >
      bash -c
        "for (( ; ; )); do
          node main.js &&
          s=$$? && break || s=$$?;
          echo \"Could not start Rocket.Chat. Waiting 5 secs...\";
          sleep 5;
        done; (exit $$s)"
    restart: on-failure
    volumes:
      - ./uploads:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=https://chat.domain.com
      - LETSENCRYPT_HOST=chat.domain.com
      - VIRTUAL_HOST=chat.domain.com
      - MONGO_URL=mongodb://mongo:27017/rocketchat
      - MONGO_OPLOG_URL=mongodb://mongo:27017/local
      - Accounts_UseDNSDomainCheck=false
    depends_on:
      - mongo
    networks:
      - net
      - rocket

  mongo:
    image: mongo:4.0
    restart: on-failure
    volumes:
      - ./data/db:/data/db
      - ./data/dump:/dump
    command: >
      bash -c
        "while [ ! -f /data/db/WiredTiger ]; do
          echo \"wiredTiger migration hasn't started yet. Waiting 30 secs...\";
          sleep 30;
        done;
        docker-entrypoint.sh mongod --oplogSize 128 --replSet rs0 --storageEngine=wiredTiger;"
    depends_on:
      - migrator
    networks:
      - rocket

  migrator:
    build: ./docker/
    volumes:
      - ./data/db:/data/db
    networks:
      - rocket

  mongo-init-replica:
    image: mongo:4.0
    command: >
      bash -c
        "for (( ; ; )); do
          mongo mongo/rocketchat --eval \"
            rs.initiate({
              _id: 'rs0',
              members: [ { _id: 0, host: 'localhost:27017' } ]})\" &&
          s=$$? && break || s=$$?;
          echo \"Could not reach MongoDB. Waiting 5 secs ...\";
          sleep 5;
        done; (exit $$s)"
    depends_on:
      - mongo
    networks:
      - rocket

networks:
  net:
    external: true
  rocket:
    internal: true

Harap jangan mengambil di atas sebagai konfigurasi akhir. Masih banyak langkah dan perubahan yang tersisa. Anda memerlukan konfigurasi di atas hanya untuk langkah ini. Saya akan membahas perubahan lebih lanjut nanti.

migrator layanan hanya akan berjalan sekali ketika menemukan mmap mesin penyimpanan. Itu akan mengubahnya menjadi wiredTiger . Kalau tidak, itu akan keluar dengan sendirinya. mongo layanan juga akan berperilaku dengan cara yang sama. Mari lanjutkan ke langkah berikutnya untuk melihat caranya.

Langkah 6:Buat gambar migrator untuk memulai migrasi

Perintah berikut akan membuat image migrator dan memulai proses migrasi. Itu juga akan memulai wadah lagi. Rocket.Chat akan menunggu database untuk menyelesaikan inisialisasi sebelum akhirnya memulai.

docker-compose up --build -d

Untuk mengawasi seluruh proses, Anda dapat menggunakan perintah Docker Compose logs untuk memantau prosedur lengkapnya:

docker-compose logs -f migrator

Tunggu hingga perintah di atas selesai hingga turun ke terminal prompt dengan kode keluar 0 setelah wiredTiger instance melakukan shutdown yang anggun:

rocketchat_migrator_1 exited with code 0

Sekarang, pantau databasenya:

docker-compose logs -f mongo

Berikan waktu untuk menginisialisasi dan terakhir periksa instance Rocket.Chat Anda:

docker-compose logs -f rocketchat

Tunggu hingga Anda melihat pesan "SERVER RUNNING". Ini akan menjadi seperti ini:

rocketchat_1         | ➔ +--------------------------------------------------+
rocketchat_1         | ➔ |                  SERVER RUNNING                  |
rocketchat_1         | ➔ +--------------------------------------------------+
rocketchat_1         | ➔ |                                                  |
rocketchat_1         | ➔ |  Rocket.Chat Version: 3.18.2                     |
rocketchat_1         | ➔ |       NodeJS Version: 12.22.1 - x64              |
rocketchat_1         | ➔ |      MongoDB Version: 4.0.18                     |
rocketchat_1         | ➔ |       MongoDB Engine: wiredTiger                 |
rocketchat_1         | ➔ |             Platform: linux                      |
rocketchat_1         | ➔ |         Process Port: 3000                       |
rocketchat_1         | ➔ |             Site URL: https://chat.domain.com    |
rocketchat_1         | ➔ |     ReplicaSet OpLog: Enabled                    |
rocketchat_1         | ➔ |          Commit Hash: 2ffdd13795                 |
rocketchat_1         | ➔ |        Commit Branch: HEAD                       |
rocketchat_1         | ➔ |                                                  |
rocketchat_1         | ➔ +--------------------------------------------------+

Seperti yang Anda lihat di atas, MongoDB Engine: wiredTiger menunjukkan bahwa instance Rocket.Chat Anda sekarang menggunakan WiredTiger mesin penyimpanan dan bukan lagi MMAPv1 . yang tidak digunakan lagi . Ini berarti sekarang siap di masa mendatang untuk pembaruan aplikasi apa pun yang akan datang. Tapi tunggu, MongoDB Version: 4.0.18 juga ditinggalkan. Ini dapat diperhatikan jika Anda meningkatkan ke Rocket.Chat 4.0.0 tanpa memutakhirkan MongoDB ke setidaknya versi 4.2:

rocketchat_1         | +--------------------------------------------------+
rocketchat_1         | |                  SERVER RUNNING                  |
rocketchat_1         | +--------------------------------------------------+
rocketchat_1         | |                                                  |
rocketchat_1         | |  Rocket.Chat Version: 4.0.0                      |
rocketchat_1         | |       NodeJS Version: 12.22.1 - x64              |
rocketchat_1         | |      MongoDB Version: 4.0.18                     |
rocketchat_1         | |       MongoDB Engine: wiredTiger                 |
rocketchat_1         | |             Platform: linux                      |
rocketchat_1         | |         Process Port: 3000                       |
rocketchat_1         | |             Site URL: https://chat.domain.com    |
rocketchat_1         | |     ReplicaSet OpLog: Enabled                    |
rocketchat_1         | |          Commit Hash: 2ffdd13795                 |
rocketchat_1         | |        Commit Branch: HEAD                       |
rocketchat_1         | |                                                  |
rocketchat_1         | +--------------------------------------------------+
rocketchat_1         | +----------------------------------------------------------------------+
rocketchat_1         | |                              DEPRECATION                             |
rocketchat_1         | +----------------------------------------------------------------------+
rocketchat_1         | |                                                                      |
rocketchat_1         | |  YOUR CURRENT MONGODB VERSION (4.0.18) IS DEPRECATED.                |
rocketchat_1         | |  IT WILL NOT BE SUPPORTED ON ROCKET.CHAT VERSION 5.0.0 AND GREATER,  |
rocketchat_1         | |  PLEASE UPGRADE MONGODB TO VERSION 4.2 OR GREATER                    |
rocketchat_1         | |                                                                      |
rocketchat_1         | +----------------------------------------------------------------------+

Jika Anda menggunakan MongoDB 3.4, perhatikan juga bahwa Rocket.Chat 4.0.0 TIDAK mendukungnya. Lebih baik juga meningkatkan ke versi terbaru MongoDB dan mencegah cegukan di masa mendatang.

Langkah 7:Tingkatkan MongoDB dan Rocket.Chat

Misalkan Anda menjalankan MongoDB versi 3.4 dan Rocket.Chat 3.18.2. Untuk mengupgrade ke versi 5.0, metode yang lebih disukai adalah melakukan upgrade secara bertahap. Jadi, secara berurutan, Anda akan meningkatkan ke 3.6, 4.0, 4.2 dan 4.4 (prefinal). Terakhir, Anda dapat meningkatkan ke versi 5.0. Mari kita lihat caranya:

Langkah 7a:Hentikan instance terlebih dahulu

docker-compose stop

Langkah 7b:Perbarui file Docker Compose

Di dalam mongo dan mongo-init-replica definisi layanan dalam file Docker Compose Anda, revisi versi image ke versi inkremental kedua berikutnya seperti yang dibahas di atas. Jadi, jika Anda menjalankan MongoDB 3.4, ubah versi 3.6. Setelah Anda menyimpannya, terapkan kembali konfigurasi yang diperbarui agar perubahan diterapkan:

docker-compose up -d

Wadah MongoDB sekarang akan dibuat ulang berdasarkan versi 3.6.

Langkah 7c:Aktifkan fitur yang mempertahankan data yang tidak kompatibel dengan versi MongoDB sebelumnya

Langkah ini tidak opsional. Untuk dapat meningkatkan ke versi berikutnya (>3.6) Anda juga harus menggunakan perintah berikut di wadah MongoDB Anda:

docker-compose exec mongo bash -c 'mongo --eval "db.adminCommand( { setFeatureCompatibilityVersion: \"3.6\" } )"'

Untuk mengkonfirmasi perintah berhasil, Anda akan melihat output seperti:

MongoDB shell version v3.6.23
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("fb1e57ff-d2ec-4ac0-8187-c1ae8a36418b") }
MongoDB server version: 3.6.23
{
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1633455129, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1633455129, 1)
}

Pastikan Anda melihat "ok" : 1, . Ini mengonfirmasi Anda mengaktifkan pengaturan. Sekarang kembali ke langkah 7a dan ulangi prosesnya hingga Anda meningkatkan versi ke versi 4.2 dan mengaktifkan kompatibilitas fitur.

Langkah 7d:Tingkatkan ke Rocket.Chat 4.0.0

Selamat, Anda sekarang sepenuhnya siap untuk meningkatkan ke versi 4.0.0 yang semuanya baru karena Anda sekarang menggunakan MongoDB 4.2! Anda dapat menggunakan penskalaan untuk membuat instance Rocket.Chat baru dan meminimalkan waktu henti. Revisi versi gambar ke 4.0.0 di file Docker Compose dan Anda sudah siap:

docker-compose up -d --scale rocketchat=2 --no-recreate
sleep 20 && docker rm -f rocketchat_rocketchat_1
docker-compose up -d --scale rocketchat=1 --no-recreate

Anda juga dapat mengonfirmasi dari log tentang perubahan baru:

rocketchat_2          | +--------------------------------------------------+
rocketchat_2          | |                  SERVER RUNNING                  |
rocketchat_2          | +--------------------------------------------------+
rocketchat_2          | |                                                  |
rocketchat_2          | |  Rocket.Chat Version: 4.0.0                      |
rocketchat_2          | |       NodeJS Version: 12.22.1 - x64              |
rocketchat_2          | |      MongoDB Version: 4.2.17                     |
rocketchat_2          | |       MongoDB Engine: wiredTiger                 |
rocketchat_2          | |             Platform: linux                      |
rocketchat_2          | |         Process Port: 3000                       |
rocketchat_2          | |             Site URL: https://chat.domain.com    |
rocketchat_2          | |     ReplicaSet OpLog: Enabled                    |
rocketchat_2          | |          Commit Hash: 2ffdd13795                 |
rocketchat_2          | |        Commit Branch: HEAD                       |
rocketchat_2          | |                                                  |
rocketchat_2          | +--------------------------------------------------+

Langkah 8:Kita Berada di Akhir Game Sekarang!

Pada tahap ini, disarankan untuk melanjutkan pemutakhiran versi database, karena Rocket.Chat baru sekarang mendukung MongoDB 5.0. Jadi Anda dapat kembali ke langkah 7a sekali lagi dan ulangi proses yang sama hingga 7c untuk MongoDB 5.0. Dengan begitu, seperti Rocket.Chat, instans Docker MongoDB Anda juga siap untuk peningkatan di masa mendatang. Anda dapat mengonfirmasi dari log tentang versi final:

rocketchat_2          | +--------------------------------------------------+
rocketchat_2          | |                  SERVER RUNNING                  |
rocketchat_2          | +--------------------------------------------------+
rocketchat_2          | |                                                  |
rocketchat_2          | |  Rocket.Chat Version: 4.0.0                      |
rocketchat_2          | |       NodeJS Version: 12.22.1 - x64              |
rocketchat_2          | |      MongoDB Version: 5.0.3                      |
rocketchat_2          | |       MongoDB Engine: wiredTiger                 |
rocketchat_2          | |             Platform: linux                      |
rocketchat_2          | |         Process Port: 3000                       |
rocketchat_2          | |             Site URL: https://chat.chmod777.ltd  |
rocketchat_2          | |     ReplicaSet OpLog: Enabled                    |
rocketchat_2          | |          Commit Hash: 2ffdd13795                 |
rocketchat_2          | |        Commit Branch: HEAD                       |
rocketchat_2          | |                                                  |
rocketchat_2          | +--------------------------------------------------+

Itu saja, Anda sudah siap! Nikmati server Rocket.Chat Anda yang baru ditingkatkan!

Catatan bonus

Mempertimbangkan bahwa hanya Rocket.Chat yang akan ditingkatkan untuk pembaruan tanpa downtime mulai sekarang biasanya, saya menyimpan file Docker Compose apa adanya dan tidak menghapus migrator definisi layanan atau revisi mongo definisi layanan basis data berdasarkan pengaturan asli.

Setelah wiredTiger mesin penyimpanan yang bertanggung jawab, mereka diabaikan dan tampaknya cukup tahan masa depan. Siapa tahu, ini mungkin berguna dalam penerapan dan peningkatan di masa mendatang? Berikut laporan log untuk migrator layanan saat Anda menghentikan dan memulai ulang WiredTiger . yang sudah ada konfigurasi mesin penyimpanan:

Attaching to rocketchat_migrator_1
migrator_1            | Found /data/db/WiredTiger - assuming migration to WiredTiger already completed...
migrator_1            | Found /data/db/WiredTiger - assuming migration to WiredTiger already completed...
migrator_1            | Found /data/db/WiredTiger - assuming migration to WiredTiger already completed...
migrator_1            | Found /data/db/WiredTiger - assuming migration to WiredTiger already completed...
migrator_1            | Found /data/db/WiredTiger - assuming migration to WiredTiger already completed...
migrator_1            | Found /data/db/WiredTiger - assuming migration to WiredTiger already completed...
rocketchat_migrator_1 exited with code 0

mongo definisi layanan juga berperilaku dengan cara yang sama dan melompati melakukan migrasi berdasarkan migrator ketika menemukan bahwa WiredTiger mesin penyimpanan sudah ada.

Juga, dalam kasus saya, saya memutakhirkan database MongoDB dari versi 4.0 dan seterusnya. Tapi saya tidak harus menjalankan perintah kompatibilitas fitur (step7c) untuk versi 4.0 sebelumnya. Mungkin sudah diaktifkan untuk peningkatan di masa mendatang.

Ringkasan

Dalam tutorial langkah demi langkah ini, Anda mempelajari cara mengubah mesin penyimpanan database yang tidak digunakan lagi MMAPv1 ke WiredTiger untuk MongoDB, tingkatkan database MongoDB ke versi terbaru dan juga instance Rocket.Chat itu sendiri - semuanya di Docker.

Semoga panduan ini membantu Anda dalam meningkatkan instance RocketChat Docker Anda. Ini juga akan berguna jika Anda menggunakan MongoDB untuk beberapa aplikasi lain di Docker. Jika Anda memiliki umpan balik, pertanyaan, komentar, atau saran, silakan bagikan dengan kami di bagian komentar di bawah. Selamat menghosting sendiri :) !


Linux
  1. Cara Menginstal MongoDB di Ubuntu 18.04 – Panduan untuk Pemula

  2. Cara mengatur OpenCL untuk GPU di Linux dan Docker [Panduan Lengkap]

  3. Panduan Lengkap untuk Self-hosting Rocket.Chat Dengan Docker

  1. Cara Menginstal Rocket.Chat di Ubuntu 18.04

  2. Memutakhirkan Docker di Amazon Linux AMI

  3. docker:PID berbeda untuk `top` dan `ps`

  1. Panduan Bash For Loop dan Contohnya

  2. Menjalankan PostgreSQL di Docker, Panduan Cepat dan Praktis

  3. Cara Menginstal Rocket.Chat di Ubuntu 16.04