GNU/Linux >> Belajar Linux >  >> Linux

Panduan Lengkap untuk Self-hosting Rocket.Chat Dengan Docker

Rocket.Chat adalah platform komunikasi sumber terbuka yang ideal untuk kolaborasi di antara organisasi, tim, atau anggota forum.

Kami menggunakannya untuk komunikasi internal kami di Buku Pegangan Linux dan Ini FOSS dan sangat menyukainya.

Sekarang, Anda dapat memilih contoh Rocket.Chat terkelola dari pembuat Rocket.Chat itu sendiri. Tentu saja akan menimbulkan biaya tambahan, tetapi Anda tidak perlu melakukan upaya ekstra dalam menerapkan Rocket.Chat, memperbaruinya, dan memeliharanya. Selain itu, ini juga membantu pengembangan proyek Rocket.Chat.

Jika Anda ingin menghindari menghabiskan banyak uang atau menangani masalah dengan pendekatan 'lakukan sendiri', Anda dapat menghosting sendiri Rocket.Chat di server Anda.

Dalam tutorial ini, saya akan menunjukkan langkah-langkah untuk men-deploy Rocket.Chat dengan Docker.

Roket yang dihosting sendiri. Ngobrol dengan Docker

Mari kita lihat apa yang Anda butuhkan untuk men-deploy Rocket.Chat dengan Docker di server Linux.

Persyaratan

Selain mengenal perintah Linux, mengetahui dasar-dasar Docker Compose juga akan membantu di sini.

  • Server Linux. Anda dapat menggunakan server fisik, mesin virtual, atau server cloud. Anda dapat mendaftar dengan mitra kami Linode dan mendapatkan kredit gratis sebesar $100.
  • Docker dan Docker Compose terinstal di server Anda.
  • Akses ke DNS domain tempat Anda ingin menerapkan Rocket.Chat.
  • Pengaturan proxy terbalik Nginx dengan pengalihan www/non-www dan batas unggah yang diizinkan.

Langkah 0:Siapkan penyiapan awal

Anda harus menginstal Docker dan Docker Compose di sistem Anda. Anda dapat merujuk ke tutorial ini untuk mendapatkan instruksi untuk Ubuntu.

  • Instal Docker di Ubuntu
  • Instal Docker Compose di Ubuntu

Selain itu, Anda juga harus memiliki pengaturan proxy terbalik Nginx. Ini bermanfaat jika Anda ingin menginstal lebih dari satu Rocket.Chat atau beberapa layanan web lain di server yang sama.

Topik ini sebelumnya telah dibahas secara rinci dalam tutorial yang ditautkan di bawah ini, jadi saya tidak akan mengulangi langkah yang sama di sini. Namun, Anda harus memiliki pengaturan ini di sistem Anda.

Gunakan konfigurasi Nginx berikut saat Anda menjalankan Docker Compose, bernama docker-compose.yml di dalam direktori terpisah. Pastikan Anda mengubah DEFAULT_EMAIL sesuai keinginan Anda.

version: '3.7'

services:

  jwilder-nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: jwilder-nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - html:/usr/share/nginx/html
      - dhparam:/etc/nginx/dhparam
      - vhost:/etc/nginx/vhost.d
      - certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
      #- ./www.domain.com:/etc/nginx/vhost.d/www.domain.com
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    restart: always
    networks:
      - net

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt-proxy-companion
    environment:
      DEFAULT_EMAIL: "[email protected]"
    depends_on:
      - jwilder-nginx-proxy
    volumes:
      - certs:/etc/nginx/certs:rw
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always
    networks:
      - net

volumes:
  certs:
  html:
  vhost:
  dhparam:

networks:
  net:
    external: true

Sebelum Anda menerapkan konfigurasi di atas, periksa referensi jika diperlukan, dan pastikan juga langkah-langkah persiapan seperti yang dibahas di bawah ini.

Langkah 1:Mempersiapkan penerapan server Rocket.Chat

Saya menggunakan metode proxy terbalik Jwilder di sini karena metode ini memperhitungkan sertifikat SSL, pengalihan www/non-www, dan batas unggah yang diizinkan.

Cara menangani sertifikat SSL telah dibahas dalam tautan yang dibagikan di atas di bagian persyaratan. Selain itu, saya akan menjelaskan cara mengaktifkan pengalihan www/non-www (lewati untuk sub-domain) dan meningkatkan batas unggah yang diizinkan melalui Nginx.

Pengalihan WWW/non-WWW (Lewati untuk sub-domain)

Jika Anda ingin menghosting sendiri Rocket.Chat di sub-domain, bagian ini tidak relevan dan Anda dapat melanjutkan ke bagian berikutnya. Namun jika tidak, bergantung pada preferensi SEO, Anda mungkin ingin menyetel pengalihan www ke  non-www atau sebaliknya. Misalnya, jika server obrolan Anda dihosting di  domain.com, pengguna yang mengunjungi www.domain.com harus dialihkan ke sana (cara kerja domain GitHub).

Demikian pula, jika Anda menghostingnya di www.domain.com, pengguna yang mengunjungi domain.com harus dialihkan (cara kerja domain Linode).

WWW ke non-WWW

Buat file bernama www.domain.com dalam direktori penulisan nginx docker dengan konten berikut dan simpan:

rewrite ^/(.*)$ https://domain.com/$1 permanent;
Non-WWW ke WWW

Buat file bernama domain.com dalam direktori penulisan nginx docker dengan konten berikut dan simpan:

rewrite ^/(.*)$ https://www.domain.com/$1 permanent;

Sekarang, misalkan Anda ingin menggunakan WWW ke pengalihan non-WWW. Yang harus Anda lakukan adalah mengikat mount file di bagian volume  konfigurasi layanan Nginx Anda:

      - ./www.domain.com:/etc/nginx/vhost.d/www.domain.com

Tingkatkan Batas Upload yang Diizinkan

Unggahan gambar dapat dipengaruhi oleh batas ukuran unggahan yang rendah di Rocket.Chat. Karena saya menggunakan proxy terbalik, saya juga harus menetapkan batas unggahan maksimum dan menghindari masalah saat mengunggah gambar di Docker. Katakanlah untuk 1 GB, buat file bernama client_max_upload_size.conf dan simpan dengan konten berikut:

client_max_body_size 1G;

Nanti Anda perlu memasangnya seperti yang dijelaskan dengan file sebelumnya:

      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf

Jalankan docker-compose up -d dari direktori Nginx untuk memperbarui konfigurasi Nginx Anda.

Konfigurasi penyebaran Rocket.Chat pada dasarnya terdiri dari tiga komponen utama:

  • Backend basis data MongoDB
  • Inisialisasi MongoDB dari kumpulan replika
  • Rocket.Chat sendiri sebagai antarmuka web

Karena Anda menyiapkan Rocket.Chat dengan Docker, semua komponen di atas akan di-deploy sebagai wadahnya masing-masing.

Untuk layanan database dan inisialisasi kumpulan replika, saya akan menggunakan jaringan internal yang disebut rocket karena hanya perlu terlihat untuk layanan Rocket.Chat.

networks:
  - rocket

Tapi untuk layanan Rocket.Chat tentunya sama net jaringan yang digunakan pada konfigurasi proxy terbalik harus ditentukan bersama dengan rocket jaringan, dan baru setelah itu dimungkinkan untuk menjalankannya dengan container Nginx Docker.

networks:
  - net
  - rocket

Sekarang pertimbangkan bagaimana mereka dikonfigurasi secara individual dengan Docker Compose:

Untuk MongoDB, saya menggunakan gambar resmi MongoDB 4.0 yang tersedia di Docker Hub:

  mongo:
    image: mongo:4.0
    restart: always
    volumes:
     - ./data/db:/data/db
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
    networks:
      - rocket

Rocket.Chat juga membutuhkan set replika MongoDB untuk meningkatkan kinerja. Jadi gambar harus digunakan secara terpisah untuk menerapkan layanan sementara dan menginisialisasi kumpulan replika. Ini akan menjalankan perintah yang diperlukan, menghapus dirinya sendiri dan tidak akan terus berjalan:

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

Untuk layanan Rocket.Chat sendiri, saya menggunakan nomor versi terbaru yang ditandai di Docker Hub yang diluncurkan oleh pengembang sebagai rilis stabil. Di sini, saat penulisan ini, adalah 3.17.0 dan berdasarkan Konfigurasi Penulisan Rocket.Chat Docker Resmi:

  rocketchat:
    image: rocketchat/rocket.chat:3.17.0
    command: bash -c 'for i in `seq 1 30`; do node main.js && s=$$? && break || s=$$?; echo "Tried $$i times. Waiting 5 secs..."; sleep 5; done; (exit $$s)'
    restart: always
    volumes:
      - ./uploads:/app/uploads
    environment:
      - PORT=3000
      - ROOT_URL=https://chat.domain.com
      - VIRTUAL_HOST=chat.domain.com
      - LETSENCRYPT_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

Karena ini adalah konfigurasi berbasis proxy terbalik Nginx, Anda harus menyertakan variabel lingkungan tambahan, yaitu VIRTUAL_HOST , LETSENCRYPT_HOST dengan URL domain Anda dan Accounts_UseDNSDomainCheck setel ke false . Di sini, saya mengasumsikan chat.domain.com sebagai contoh nama domain untuk server obrolan Anda.

Perhatikan bahwa penerapan menggunakan konfigurasi yang dipasang mengikat dan oleh karena itu, direktori volume database dan layanan akan dibuat di direktori yang sama yang memiliki file Docker Compose.

Langkah 2:Menerapkan Rocket.Chat

Sekarang Anda harus menyiapkan file  docker-compose. Saatnya menggunakan file ini.

Buat direktori penulisan buruh pelabuhan Rocket Chat di server Anda:

mkdir rocketchat

Masuk ke direktori untuk mengedit file yang diperlukan:

cd rocketchat

Sekarang buat file docker-compose berikut berdasarkan diskusi kita sejauh ini:

version: "3.7"

services:
  rocketchat:
    image: rocketchat/rocket.chat:3.17.0
    command: bash -c 'for i in `seq 1 30`; do node main.js && s=$$? && break || s=$$?; echo "Tried $$i times. Waiting 5 secs..."; sleep 5; done; (exit $$s)'
    restart: always
    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: always
    volumes:
     - ./data/db:/data/db
    command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
    networks:
      - rocket

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

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

Sekarang, Anda dapat memulai instance Rocket.Chat:

docker-compose up -d

Akses domain server Rocket.Chat yang ditentukan dalam konfigurasi menggunakan URL domain Anda.

Langkah 3:Menyiapkan akun Admin Rocket.Chat Anda

Saat mengakses URL server obrolan Anda untuk pertama kalinya, ikuti petunjuk di layar hingga Anda mengklaim situs Anda sebagai admin.

Langkah 4:Menyiapkan SMTP untuk Notifikasi Email

Dalam contoh ini, saya telah menggunakan SendGrid sebagai layanan SMTP. Berikut ini panduan singkat tentang cara mengonfigurasinya:

Di server obrolan utama, klik ikon beranda:

Navigasikan ke panel administrasi:

Gulir sedikit ke bawah dan buka Pengaturan Email:

Sekali lagi, gulir ke bawah di sebelah kanan sampai Anda melihat "SMTP":

Perluas dan pastikan Anda memilih pengaturan berikut, khususnya smtps protokol. [email protected] “Dari Email”, tentu saja untuk tujuan demo saja. Sesuaikan sesuai keinginan Anda, berdasarkan tampilan yang Anda inginkan saat pengguna menerima pemberitahuan kotak surat. Jadi, ubah sesuai kebutuhan Anda:

Itu saja! Anda telah berhasil menghosting sendiri instance Rocket.Chat yang berfungsi penuh di server Anda!

Kiat untuk instance Rocket.Chat yang dihosting sendiri

Berikut adalah beberapa tips yang akan membantu Anda dalam memelihara instance Anda.

Selalu gunakan HTTPS di URL Server

Pastikan untuk selalu menggunakan HTTPS di URL server obrolan, terutama dalam dua kasus berikut:

  • Saat Anda memberi tahu pengguna tentang URL untuk masuk untuk pertama kalinya, pastikan mereka menggunakan https dalam nama domain.
  • Pastikan nilai URL, di Admin Panel> Settings> General> Site URL , juga menggunakan https .

Memastikan dua tugas di atas akan mencegah masalah masuk atau keluar yang tidak diinginkan di masa mendatang.

Monitor Rocket.Log Obrolan secara Real-time

Jika Anda ingin memeriksa log container saat di-deploy secara real time, Anda dapat menjalankan:

docker logs -f rocketchat_rocketchat_1

Cadangkan dan Pulihkan Pengaturan &Volume Rocket.Chat tanpa Waktu Henti

Menggunakan pendekatan cloud + lokal, Anda dapat mencadangkan dan memulihkan pengaturan dan volume Rocket.Chat Anda tanpa waktu henti. Saya telah membahas cara mem-backup bind mount (seperti yang digunakan oleh Rocket.Chat) di artikel berikut:

Perbarui Kontainer Rocket.Chat dengan Cepat tanpa Pemadaman

Dengan --scale flag di Docker Compose, Anda dapat membuat wadah baru berdasarkan versi terbaru Rocket.Chat. Setelah selesai, Anda dapat menghapus yang lama. Ini menghasilkan waktu henti yang dapat diabaikan saat Anda menurunkan skala ke mode wadah tunggal. Akses pengguna tidak akan terpengaruh saat Anda melakukan peningkatan:

Jika Anda menemukan bug, memiliki masalah, atau memiliki saran, Anda dapat memberi tahu saya dengan meninggalkan komentar di bawah.


Linux
  1. Cara Menginstal WordPress dengan Docker, Panduan yang Mudah Diikuti

  2. Panduan Lengkap Pemula untuk Docker Logging

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

  1. Grep Regex:Panduan Lengkap

  2. Perintah Linux - Panduan Lengkap

  3. Cara Menginstal Obrolan Roket di Ubuntu 16.04 dengan Docker

  1. Panduan Lengkap untuk Memasang Linux di Chromebook

  2. Panduan Lengkap Logging Linux

  3. Docker untuk Mac :Panduan Instalasi Lengkap