Ubuntu 14.04 Üzerinde Rocket.Chat Kurulumu, Yapılandırılması ve Yayına Alınması
Günümüzde kurum içi ve topluluk odaklı iletişim, iş süreçlerinin sürdürülebilirliği ve veri güvenliği açısından kritik bir rol oynamaktadır. Slack, Microsoft Teams ve Discord gibi popüler platformlar her ne kadar güçlü özellikler sunsa da, veri gizliliği, özel bulut barındırma gereksinimleri ve lisanslama maliyetleri birçok organizasyonu açık kaynaklı alternatiflere yöneltmektedir. Bu alternatiflerin en güçlüsü ve en popüleri şüphesiz Rocket.Chat platformudur. Rocket.Chat; sesli ve görüntülü arama, ekran paylaşımı, dosya transferi, LDAP entegrasyonu ve tamamen özelleştirilebilir bir arayüz sunan, Meteor framework’ü ile geliştirilmiş açık kaynaklı bir sohbet çözümüdür.
Bu teknik makalede, görece eski ancak birçok kurumsal altyapıda halen aktif olarak kullanılan veya legacy sistemlerle entegre çalışan Ubuntu 14.04 LTS (Trusty Tahr) işletim sistemi üzerinde adım adım Rocket.Chat kurulumunu, veritabanı olarak MongoDB konfigürasyonunu, Node.js bağımlılıklarının yönetimini, Upstart servis yöneticisi ile arka planda çalıştırmayı ve Nginx reverse proxy (tersine vekil sunucu) arkasında SSL sertifikası ile güvenli bir şekilde yayına almayı (deployment) inceleyeceğiz.
Sistem Gereksinimleri ve Hazırlık
Rocket.Chat, gerçek zamanlı veri akışı ve yoğun WebSocket trafiği kullandığı için sistem kaynaklarını optimize kullanacak şekilde yapılandırılmalıdır. Kuruluma başlamadan önce aşağıdaki minimum gereksinimlerin karşılandığından emin olmalısınız:
- İşletim Sistemi: Temiz bir Ubuntu 14.04 LTS (64-bit) kurulumu.
- İşlemci (CPU): En az 1 vCPU (Yoğun kullanımlar için 2 veya daha fazla çekirdek önerilir).
- Bellek (RAM): En az 2 GB RAM (MongoDB ve Node.js süreçlerinin kararlı çalışması için 1 GB RAM yetersiz kalabilir).
- Alan Adı (Domain): Rocket.Chat arayüzüne güvenli HTTPS protokolü üzerinden erişmek için geçerli bir A kaydı sunucu IP adresine yönlendirilmiş bir domain (örneğin: chat.alanadiniz.com).
Kurulum işlemlerine başlamadan önce sistem paket listelerini güncellemek ve mevcut paketleri en son sürümlerine yükseltmek iyi bir uygulamadır. Sunucunuza SSH üzerinden root veya sudo yetkilerine sahip bir kullanıcı ile bağlanın ve aşağıdaki komutları çalıştırın:
sudo apt-get update
sudo apt-get upgrade -y
Sistem güncellendikten sonra, Rocket.Chat’in çalışması ve bazı medya dosyalarının (örneğin kullanıcı avatarları, yüklenen görseller) işlenmesi için gerekli olan temel derleme araçlarını ve yardımcı kütüphaneleri yüklememiz gerekir. Bu kütüphaneler arasında en önemlisi görsel işleme yetenekleri sunan GraphicsMagick’tir:
sudo apt-get install -y build-essential graphicsmagick curl git runit
Adım 1: MongoDB Kurulumu ve Yapılandırılması
Rocket.Chat, veri depolama katmanı olarak MongoDB kullanır. Rocket.Chat’in anlık mesajlaşma ve gerçek zamanlı senkronizasyon özelliklerini performans kaybı yaşamadan sunabilmesi için MongoDB’nin “Replica Set” (Kopya Kümesi) modunda çalıştırılması zorunludur. Replica Set, MongoDB’nin veri yazma işlemlerini bir oplog (operations log) üzerinden takip etmesini sağlar ve Rocket.Chat bu oplog’u dinleyerek istemcilere anlık veri gönderimi yapar.
Ubuntu 14.04 depolarında bulunan varsayılan MongoDB sürümü oldukça eskidir. Bu nedenle MongoDB’nin resmi depolarını sistemimize ekleyerek MongoDB 3.6 sürümünü kuracağız. İlk olarak MongoDB GPG anahtarını sistemimize import edelim:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930D3A8
Ardından, Ubuntu 14.04 için MongoDB depo listesini oluşturun:
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.with-mongodb
Oluşturduğumuz yeni depo listesini sisteme dahil etmek için paket listesini tekrar güncelleyin ve MongoDB kurulumunu başlatın:
sudo apt-get update
sudo apt-get install -y mongodb-org
Kurulum tamamlandıktan sonra, MongoDB’nin Replica Set özelliğini aktif hale getirmek için konfigürasyon dosyasını düzenlememiz gerekmektedir. Tercih ettiğiniz bir metin editörü (örneğin nano) ile /etc/mongod.conf dosyasını açın:
sudo nano /etc/mongod.conf
Dosya içerisinde yer alan replication bölümünü bulun ve aşağıdaki gibi düzenleyin. Eğer bu bölüm yoksa dosyanın sonuna ekleyebilirsiniz. YAML formatında girintilerin (boşlukların) doğruluğuna dikkat edin:
replication:
replSetName: rs0
Ayrıca, MongoDB’nin sadece yerel ağdan erişilebilir olduğundan emin olmak için net ayarlarının aşağıdaki gibi olduğunu doğrulayın:
net:
port: 27017
bindIp: 127.0.0.1
Değişiklikleri kaydedip dosyadan çıkın (Nano için: CTRL+O, Enter, CTRL+X). Yapılandırmanın devreye girmesi için MongoDB servisini yeniden başlatın:
sudo service mongod restart
Şimdi, tanımladığımız Replica Set yapısını başlatmamız (initialize etmemiz) gerekiyor. Bunun için MongoDB kabuğuna (shell) bağlanın ve başlatma komutunu çalıştırın:
mongo --eval "rs.initiate()"
Bu komutun çıktısında "ok" : 1 ifadesini görmelisiniz. Bu, Replica Set yapısının başarıyla kurulduğunu ve ilk düğümün (Primary) aktif hale geldiğini gösterir.
Adım 2: Node.js ve npm Kurulumu
Rocket.Chat, Node.js tabanlı bir uygulamadır. Her Rocket.Chat sürümü, belirli bir Node.js sürümüyle uyumlu çalışacak şekilde tasarlanmıştır. Uyumsuz bir Node.js sürümü kullanmak, uygulamanın derleme aşamasında hata vermesine veya çalışma zamanında (runtime) beklenmedik çökmelere yol açabilir. Kuracağımız kararlı Rocket.Chat sürümü için Node.js v12.x veya v12.22.12 sürümü idealdir.
Node.js’in bu spesifik sürümünü kurmak için NodeSource depolarını kullanacağız. Aşağıdaki komut yardımıyla NodeSource kurulum betiğini indirin ve çalıştırın:
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
Betik çalışıp depoları güncelledikten sonra Node.js ve npm paketini kurun:
sudo apt-get install -y nodejs
Kurulumun başarılı olduğunu ve doğru sürümlerin yüklendiğini doğrulamak için şu komutları çalıştırın:
node -v
npm -v
Ek olarak, Rocket.Chat’in bazı bağımlılıklarının düzgün derlenebilmesi için npm üzerinden küresel olarak inherits ve n paketlerini kurmak faydalı olabilir:
sudo npm install -g inherits n
Adım 3: Rocket.Chat Kurulum Dosyalarının İndirilmesi
Güvenlik gerekçesiyle, Rocket.Chat uygulamasını doğrudan root kullanıcısı ile çalıştırmak büyük bir güvenlik açığı oluşturur. Olası bir saldırıda saldırganın tüm sunucu yönetimini ele geçirmesini engellemek adına, uygulamayı çalıştıracak sınırlı yetkilere sahip özel bir sistem kullanıcısı oluşturacağız.
sudo useradd -M -r -s /bin/false rocketchat
sudo usermod -aG rocketchat rocketchat
Bu komutla, ev dizini olmayan (-M), sistem hesabı niteliğinde olan (-r) ve SSH girişi yapamayan (-s /bin/false) bir rocketchat kullanıcısı tanımlamış olduk.
Şimdi güncel ve kararlı Rocket.Chat sürümünü resmi sunucularından indirelim. İndirme işlemini geçici bir dizin olan /tmp altında gerçekleştireceğiz:
cd /tmp
curl -L https://releases.rocket.chat/latest/download -o rocket.chat.tgz
İndirilen sıkıştırılmış arşivi açalım:
tar -xzf rocket.chat.tgz
Arşivi açtığımızda karşımıza bundle adında bir dizin çıkacaktır. Bu dizini, web uygulamalarımızı barındırdığımız standart konum olan /opt/Rocket.Chat dizinine taşıyalım:
sudo mv bundle /opt/Rocket.Chat
Taşıma işleminin ardından, uygulamanın çalışması için gerekli olan Node.js bağımlılıklarını yüklememiz gerekmektedir. Rocket.Chat’in sunucu tarafı bağımlılıkları programs/server dizini altında yer alır. Bu dizine giderek npm kurulumunu başlatalım:
cd /opt/Rocket.Chat/programs/server
sudo npm install
Bu işlem, sisteminizin performansına bağlı olarak birkaç dakika sürebilir. Kurulum sırasında bazı C++ modüllerinin derlenmesi esnasında uyarı mesajları görebilirsiniz, hata almadığınız sürece bu uyarıları göz ardı edebilirsiniz. Kurulum başarıyla tamamlandıktan sonra, uygulamanın bulunduğu dizinin sahipliğini az önce oluşturduğumuz rocketchat kullanıcısına devredelim:
sudo chown -R rocketchat:rocketchat /opt/Rocket.Chat
Adım 4: Upstart Servis Dosyasının Oluşturulması
Ubuntu 14.04, modern Linux dağıtımlarında kullanılan systemd yerine varsayılan olarak Upstart servis yöneticisini kullanır. Rocket.Chat’in sunucu yeniden başlatıldığında otomatik olarak başlaması ve arka planda sürekli bir daemon (servis) olarak çalışabilmesi için bir Upstart yapılandırma dosyası oluşturmamız gerekir.
/etc/init/rocketchat.conf adında bir dosya oluşturun:
sudo nano /etc/init/rocketchat.conf
Dosyanın içerisine aşağıdaki yapılandırma satırlarını ekleyin:
description "Rocket.Chat Application Server"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
env PORT=3000
env ROOT_URL=https://chat.alanadiniz.com
env MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs0
env MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs0
env HOME=/tmp
setuid rocketchat
setgid rocketchat
exec /usr/bin/node /opt/Rocket.Chat/main.js
Bu yapılandırma dosyasındaki kritik parametreleri açıklayalım:
- respawn: Uygulamanın herhangi bir hata nedeniyle çökmesi durumunda Upstart’ın uygulamayı otomatik olarak yeniden başlatmasını sağlar.
- PORT: Rocket.Chat’in dinleyeceği yerel portu belirtir. Varsayılan olarak 3000 portu tercih edilir.
- ROOT_URL: Uygulamaya dış dünyadan erişilecek olan tam URL adresidir. SSL yapılandırması yapacağımız için
https://protokolü ile başlamalıdır. - MONGO_URL ve MONGO_OPLOG_URL: MongoDB bağlantı dizgeleridir. Oplog takibi için replica set parametrelerini içerir.
- setuid / setgid: Servisin az önce oluşturduğumuz düşük yetkili
rocketchatkullanıcısı ve grubu ile çalıştırılmasını zorunlu kılar.
Dosyayı kaydedip kapatın. Şimdi oluşturduğumuz bu yeni servisi başlatabiliriz:
sudo start rocketchat
Servisin durumunu kontrol etmek ve başarıyla çalışıp çalışmadığını doğrulamak için şu komutu kullanın:
sudo status rocketchat
Eğer her şey yolunda gittiyse, çıktı olarak uygulamanın PID (Process ID) değeri ile birlikte çalıştığı bilgisini göreceksiniz. Herhangi bir sorunla karşılaşılması durumunda log dosyalarını incelemek için şu komutu kullanabilirsiniz:
sudo tail -f /var/log/upstart/rocketchat.log
Adım 5: Nginx Tersine Vekil Sunucu (Reverse Proxy) Yapılandırması
Rocket.Chat şu anda sunucumuzda yerel olarak 3000 portunda çalışmaktadır. Ancak son kullanıcıların tarayıcılarına port numarası yazarak (örneğin :3000) HTTP üzerinden güvensiz bir şekilde bağlanmaları kurumsal standartlara uygun değildir. Bu nedenle, ön tarafta 80 (HTTP) ve 443 (HTTPS) portlarını dinleyecek, SSL sertifikasını yönetecek ve gelen istekleri güvenli bir şekilde arka plandaki 3000 portuna iletecek bir Nginx tersine vekil sunucu yapılandıracağız.
Öncelikle Nginx web sunucusunu yükleyelim:
sudo apt-get install -y nginx
Nginx kurulduktan sonra Rocket.Chat için yeni bir sunucu blok (virtual host) dosyası oluşturmamız gerekiyor. /etc/nginx/sites-available/rocketchat dosyasını açın:
sudo nano /etc/nginx/sites-available/rocketchat
Aşağıdaki konfigürasyonu bu dosyaya yapıştırın. chat.alanadiniz.com yazan yerleri kendi tescilli alan adınızla değiştirmeyi unutmayın:
# HTTP - Tüm istekleri HTTPS'e yönlendirir
server {
listen 80;
server_name chat.alanadiniz.com;
return 301 https://$host$request_uri;
}
HTTPS Yapılandırması
server {
listen 443 ssl;
server_name chat.alanadiniz.com;
# SSL Sertifika Yolları (Certbot tarafından güncellenecektir)
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# Log Dosyaları
access_log /var/log/nginx/rocketchat_access.log;
error_log /var/log/nginx/rocketchat_error.log;
# Rocket.Chat WebSocket ve HTTP Trafiğini Yönlendirme
location / {
proxy_pass http://localhost: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-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
Bu Nginx yapılandırmasında en kritik nokta Upgrade ve Connection başlıklarının (headers) tanımlanmasıdır. Rocket.Chat, istemci ile sunucu arasında anlık mesaj alışverişi sağlamak için sürekli açık kalan WebSocket bağlantılarını kullanır. Bu başlıklar eklenmediği takdirde Nginx, WebSocket el sıkışmasını (handshake) engelleyecek ve sohbet arayüzü sürekli olarak bağlantı kopma hataları verecektir.
Oluşturduğumuz bu yapılandırma dosyasını aktif hale getirmek için sites-enabled dizinine sembolik bir bağlantı oluşturalım:
sudo ln -s /etc/nginx/sites-available/rocketchat /etc/nginx/sites-enabled/
Nginx yapılandırma dosyasında herhangi bir yazım hatası olup olmadığını kontrol edelim:
sudo nginx -t
Eğer test başarılı olduysa, Nginx servisini yeniden başlatarak değişiklikleri uygulayalım:
sudo service nginx restart
Adım 6: Let’s Encrypt ile SSL Sertifikası Alınması
Modern tarayıcılar ve Rocket.Chat mobil uygulamaları, güvenli olmayan (HTTP) bağlantılar üzerinden çalışmayı reddeder. Bu nedenle web sunucumuzu ücretsiz ve güvenilir bir SSL sağlayıcısı olan Let’s Encrypt sertifikası ile güvence altına almalıyız.
Ubuntu 14.04 üzerinde standart Certbot istemcisi eski Python bağımlılıkları nedeniyle sorun çıkarabilir. Bu doğrultuda en temiz ve sorunsuz yöntem Certbot’u resmi PPA deposu üzerinden kurmaktır:
sudo apt-get install -y software-properties-common
sudo add-apt-repository -y ppa:certbot/certbot
sudo apt-get update
sudo apt-get install -y python-certbot-nginx
Kurulum tamamlandıktan sonra, Nginx eklentisini kullanarak alan adınız için otomatik olarak SSL sertifikası oluşturun ve Nginx yapılandırma dosyanızın otomatik olarak güncellenmesini sağlayın:
sudo certbot --nginx -d chat.alanadiniz.com
Bu komut çalıştırıldığında size e-posta adresiniz sorulacak ve kullanım şartlarını onaylamanız istenecektir. Gerekli adımları takip ettikten sonra Certbot, alan adınızın size ait olduğunu doğrulamak için HTTP üzerinden bir doğrulama gerçekleştirecek ve başarılı olması durumunda SSL sertifikalarını indirerek Nginx konfigürasyonunuzu otomatik olarak güncelleyecektir.
İşlem tamamlandıktan sonra Nginx servisini son kez yeniden başlatın:
sudo service nginx restart
Adım 7: Kurulum Sonrası Web Sihirbazı ile Yapılandırma
Tüm sunucu taraflı kurulumları başarıyla tamamladık. Şimdi web tarayıcınızı açıp belirlediğiniz alan adına (örneğin https://chat.alanadiniz.com) gidin. Karşınıza Rocket.Chat’in ilk kurulum sihirbazı gelecektir. Bu sihirbazı tamamlamak için şu adımları izleyin:
- Yönetici Hesabı Oluşturma: İlk adımda platformun tam yetkili yöneticisi (Admin) olacak kullanıcının adını, kullanıcı adını, e-posta adresini ve güçlü bir şifresini belirleyin.
- Organizasyon Bilgileri: Kurumunuzun veya topluluğunuzun adını, sektörünü, boyutunu ve ülkesini girin.
- Sunucu Bilgileri: Sunucu adını ve varsayılan dil seçeneğini belirleyin.
- Bulut Hizmetleri Entegrasyonu: Rocket.Chat’in mobil anlık bildirim (push notification) servislerinden ve uygulama pazarından (App Marketplace) ücretsiz yararlanabilmek için sunucunuzu Rocket.Chat Cloud’a kaydetmeniz önerilir. Bu adımı isteğe bağlı olarak geçebilir veya kaydı tamamlayabilirsiniz.
Kurulum sihirbazı tamamlandıktan sonra doğrudan Rocket.Chat yönetim paneline ve ana sohbet arayüzüne yönlendirileceksiniz. Artık kanallar oluşturabilir, yeni kullanıcılar davet edebilir ve güvenli, kurum içi anlık mesajlaşma deneyimini yaşamaya başlayabilirsiniz.
Yedekleme ve Bakım Önerileri
Üretim (production) ortamında çalışan her sistem gibi, Rocket.Chat sunucunuzun da düzenli olarak yedeklenmesi hayati önem taşır. Olası bir veri kaybı senaryosunun önüne geçmek için aşağıdaki iki bileşeni mutlaka yedekleme planınıza dahil etmelisiniz:
1. MongoDB Veritabanı Yedeklemesi
Rocket.Chat’teki tüm mesaj geçmişi, kullanıcı profilleri, oda yapılandırmaları ve sistem ayarları MongoDB içerisinde saklanır. Veritabanının yedeğini almak için mongodump aracını kullanabilirsiniz:
mongodump --db rocketchat --out /backup/mongodb/$(date +%F)
Bu komutu her gün otomatik olarak çalıştıracak bir cron job tanımlayarak yedeklerinizi harici bir depolama alanına (örneğin AWS S3 veya harici bir FTP sunucusu) senkronize etmeniz önerilir.
2. Yüklenen Dosyaların Yedeklenmesi
Kullanıcıların sohbet pencerelerine yüklediği dosyalar (görseller, PDF’ler, dökümanlar), Rocket.Chat ayarlarında GridFS (veritabanı içi depolama) seçilmediyse yerel disk üzerinde saklanır. Eğer yerel disk depolaması seçtiyseniz, ilgili yükleme dizinini (varsayılan olarak uygulamanın çalıştığı dizin altındaki yükleme klasörlerini) rsync veya benzeri bir araçla düzenli olarak yedeklemelisiniz.
Sonuç
Bu makalede, Ubuntu 14.04 LTS işletim sistemi üzerinde modern ve güvenli bir sohbet platformu olan Rocket.Chat’i baştan sona nasıl kuracağımızı inceledik. MongoDB’nin Replica Set mimarisiyle performansını optimize ettik, Node.js bağımlılıklarını izole bir kullanıcı altında güvenli şekilde derledik, Upstart ile arka plan servis yönetimini sağladık ve Nginx + Let’s Encrypt entegrasyonuyla tüm trafiğimizi HTTPS protokolü ile şifreledik.
Artık tamamen sizin kontrolünüzde olan, üçüncü şahısların veya dış servis sağlayıcıların erişemeyeceği, veri gizliliği en üst düzeyde sağlanmış kurumsal bir mesajlaşma altyapısına sahipsiniz. İhtiyaçlarınıza göre yönetim panelinden LDAP/Active Directory entegrasyonu yapabilir, video konferans için Jitsi Meet entegrasyonunu aktif hale getirebilir ve mobil uygulamalar aracılığıyla ekibinizin her an her yerden güvenle iletişim kurmasını sağlayabilirsiniz.