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 menggunakanhttps
.
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.