Discourse’u Nginx Arkasında Ubuntu 14.04 Üzerine Kurulum Rehberi
Giriş
İnternet dünyasında topluluk oluşturma ve bilgi paylaşımı, web sitelerinin vazgeçilmez bir parçası haline gelmiştir. Forumlar, bu ihtiyacı karşılamak için uzun yıllardır kullanılan geleneksel yöntemlerden biridir. Ancak modern web uygulamalarının getirdiği dinamizm, kullanım kolaylığı ve performans beklentileri, yeni nesil forum yazılımlarını ortaya çıkarmıştır. Discourse, bu yeni nesil forum platformlarının önde gelen temsilcilerinden biridir. Açık kaynaklı, modern, mobil uyumlu ve zengin özelliklere sahip Discourse, Ruby on Rails tabanlı olup, Docker konteynerizasyon teknolojisi sayesinde kolayca kurulabilir ve yönetilebilir.
Bu makalede, Discourse’u Ubuntu 14.04 işletim sistemi üzerinde Nginx web sunucusu arkasında nasıl kuracağınızı adım adım detaylı bir şekilde anlatacağız. Ubuntu 14.04, eski bir sürüm olmasına rağmen, bazı kurumsal veya özel projelerde hala kullanılıyor olabilir. Bu nedenle, bu özel sürüme yönelik kurulum adımlarını ele almak, ilgili kullanıcılar için değerli bir kaynak olacaktır. Nginx’i bir ters proxy (reverse proxy) olarak kullanarak, Discourse uygulamanızın performansını artırabilir, güvenlik katmanları ekleyebilir ve aynı sunucu üzerinde başka web uygulamaları çalıştırma esnekliğine sahip olabilirsiniz. Ayrıca, Let’s Encrypt ile ücretsiz SSL/TLS sertifikası yapılandırmasını da bu rehberin kapsamına dahil ederek, Discourse kurulumunuzu güvenli hale getireceğiz.
Ön Gereksinimler
Discourse kurulumuna başlamadan önce, sunucunuzun belirli gereksinimleri karşıladığından ve gerekli ön hazırlıkların yapıldığından emin olmanız önemlidir. Bu bölüm, kurulum sürecinin sorunsuz ilerlemesi için temel gereksinimleri ve ön adımları ele almaktadır.
Donanım Gereksinimleri
Discourse, kaynak yoğun bir uygulama olabilir, özellikle büyük topluluklar için. Minimum gereksinimler şunlardır:
* İşlemci (CPU): En az 1 çekirdekli bir işlemci, ancak 2 veya daha fazla çekirdekli bir işlemci performansı önemli ölçüde artıracaktır.
* Bellek (RAM): En az 1 GB RAM, ancak 2 GB veya daha fazlası önerilir. Özellikle Discourse’u yeniden oluştururken (rebuild) yeterli bellek kritik öneme sahiptir.
* Disk Alanı: En az 10 GB boş disk alanı, ancak 25 GB veya daha fazlası önerilir. Veritabanı ve Docker imajları zamanla disk alanı tüketir. SSD diskler, performans açısından büyük avantaj sağlar.
Yazılım Gereksinimleri
* Ubuntu 14.04: Rehberimiz bu işletim sistemi sürümüne odaklanmıştır.
* Docker: Discourse, Docker konteynerleri içinde çalıştığı için Docker Engine’in kurulu olması gerekmektedir. Ubuntu 14.04 için Docker kurulumu, daha yeni sürümlerden biraz farklı olabilir ve bunu detaylıca ele alacağız.
* Git: Discourse kaynak kodunu indirmek için gereklidir.
* Nginx: Ters proxy olarak görev yapacak web sunucusu.
* Certbot: Let’s Encrypt ile SSL sertifikalarını almak ve yönetmek için kullanılır.
Alan Adı ve DNS Yapılandırması
Discourse’u bir alan adı (domain name) üzerinden erişilebilir kılmak, profesyonel bir görünüm ve SSL sertifikası alabilmek için kritik öneme sahiptir.
* Bir Alan Adı: Kendi alan adınızın olması gerekmektedir (örn. forum.example.com).
* DNS Kayıtları: Alan adınız için A kaydı oluşturarak, alan adınızı sunucunuzun genel IP adresine yönlendirmelisiniz. Örneğin, forum.example.com adresini sunucunuzun IP adresine (örn. 192.0.2.1) işaret eden bir A kaydı oluşturmalısınız. DNS değişikliklerinin internet genelinde yayılması (propagation) biraz zaman alabilir (birkaç dakika ile 24 saat arasında). Kuruluma başlamadan önce bu kaydın etkinleştiğinden emin olun.
Sistem Güncellemesi ve Temel Bağımlılıkların Kurulumu
Kuruluma başlamadan önce, sisteminizin güncel olduğundan ve gerekli temel araçların yüklü olduğundan emin olmalıyız.
Sistem Güncellemesi
Sunucunuza SSH ile bağlandıktan sonra, paket listelerini güncelleyin ve yüklü paketleri en son sürümlerine yükseltin:
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y
Bu komutlar, işletim sisteminizin güvenlik yamalarını ve yazılım güncellemelerini almanızı sağlar.
Gerekli Araçların Kurulumu
Discourse kurulumu ve Docker yönetimi için bazı temel araçlara ihtiyacımız olacak. git ve curl bu araçların başında gelir.
sudo apt-get install -y git curl apt-transport-https ca-certificates
* git: Discourse kaynak kodunu klonlamak için.
* curl: Web üzerinden dosya indirmek için.
* apt-transport-https: HTTPS depolarından paket indirmek için.
* ca-certificates: SSL/TLS sertifikalarını doğrulamak için.
Discourse’un Kurulumu
Discourse, Docker konteynerleri içinde çalışacak şekilde tasarlanmıştır. Bu bölüm, Docker’ın kurulumunu ve Discourse uygulamasının yapılandırılıp başlatılmasını kapsar.
Docker’ın Kurulumu
Ubuntu 14.04 için Docker kurulumu, daha yeni Ubuntu sürümlerinden biraz farklılık gösterebilir. Docker’ın eski sürümleri, genellikle docker.io paketi olarak bulunur. Ancak biz, daha güncel Docker CE (Community Edition) sürümünü kurmaya çalışacağız, bu da biraz daha fazla adım gerektirebilir.
Docker Depolarının Eklenmesi
Docker’ın resmi GPG anahtarını ekleyin:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Ardından, Docker APT deposunu sisteminize ekleyin. Ubuntu 14.04 için trusty kod adını kullanmalıyız:
echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable" | sudo tee /etc/apt/sources.list.d/docker.list
Depoyu ekledikten sonra, paket listesini tekrar güncelleyin:
sudo apt-get update
Docker CE Kurulumu
Şimdi Docker CE’yi kurabiliriz:
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
Eğer docker-ce paketi bulunamazsa, bu Ubuntu 14.04’ün çok eski olmasından kaynaklanabilir. Bu durumda, alternatif olarak docker.io paketini kurmayı deneyebilirsiniz:
sudo apt-get install -y docker.io
Ve ardından docker komutunun docker.io olarak çalışması için bir sembolik link oluşturun veya kullanıcı grubuna ekleyin:
sudo ln -s /usr/bin/docker.io /usr/local/bin/docker
sudo usermod -aG docker $USER # Mevcut kullanıcıyı docker grubuna ekler
Bu rehberde, docker.io yerine Docker CE’yi kurmaya odaklanacağız, çünkü Discourse en iyi modern Docker sürümleriyle çalışır. Eğer docker-ce kurulumu sırasında bağımlılık sorunları yaşarsanız, Ubuntu 14.04’ün yaşam döngüsünün sona erdiğini ve modern Docker sürümleriyle tam uyumlu olmadığını unutmayın. Bu durumda, daha yeni bir Ubuntu sürümüne geçmek en iyi çözüm olacaktır. Ancak varsayalım ki docker-ce kurulumu başarılı oldu.
Docker Servisinin Kontrolü
Docker servisinin çalıştığından emin olun:
sudo systemctl status docker # Veya Ubuntu 14.04'te upstart kullanılıyorsa: sudo service docker status
Eğer systemctl komutu bulunamazsa, Ubuntu 14.04’te init veya upstart kullanıldığı için aşağıdaki komutları kullanın:
sudo service docker start
sudo service docker status
Ayrıca, Docker’ın doğru çalıştığını test etmek için hello-world konteynerini çalıştırın:
sudo docker run hello-world
Eğer çıktı olarak bir “Hello from Docker!” mesajı görürseniz, Docker başarıyla kurulmuş demektir.
Discourse Dosyalarının İndirilmesi ve Yapılandırılması
Discourse kurulum dosyalarını bir discourse dizinine klonlayacağız.
sudo mkdir /var/discourse
sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
app.yml Dosyasının Düzenlenmesi
Discourse, ana yapılandırma dosyasını containers/app.yml içinde tutar. Bu dosyayı kopyalayarak kendi yapılandırmamızı oluşturacağız ve düzenleyeceğiz.
sudo cp samples/standalone.yml containers/app.yml
sudo nano containers/app.yml
app.yml dosyasında aşağıdaki alanları bulup düzenlemelisiniz:
* E-posta Ayarları: Discourse’un e-posta göndermesi için bir SMTP sunucusuna ihtiyacı vardır. Bu ayarlar genellikle DISCOURSE_SMTP_ADDRESS, DISCOURSE_SMTP_PORT, DISCOURSE_SMTP_USER_NAME, DISCOURSE_SMTP_PASSWORD, DISCOURSE_SMTP_ENABLE_STARTTLS ve DISCOURSE_NOTIFICATION_EMAIL gibi değişkenleri içerir. Kendi SMTP sunucunuzun (örneğin, SendGrid, Mailgun, Gmail) bilgilerini buraya girin.
# - "DISCOURSE_SMTP_ADDRESS=smtp.example.com"
# - "DISCOURSE_SMTP_PORT=587"
# - "DISCOURSE_SMTP_USER_NAME=user@example.com"
# - "DISCOURSE_SMTP_PASSWORD=your_smtp_password"
# - "DISCOURSE_SMTP_ENABLE_STARTTLS=true" # (optional, default true)
# - "DISCOURSE_NOTIFICATION_EMAIL=noreply@forum.example.com"
Yorum satırlarını kaldırın ve kendi bilgilerinizle doldurun.
* Alan Adı Ayarları: Discourse’un hangi alan adı üzerinden erişileceğini belirtir.
# - "DISCOURSE_HOSTNAME=forum.example.com"
Bu satırı yorumdan çıkarın ve forum.example.com yerine kendi alan adınızı yazın.
* Yönetici E-postaları: Kurulumdan sonra ilk yönetici hesabını oluşturmak için kullanılacak e-posta adreslerini belirtin.
# - "DISCOURSE_DEVELOPER_EMAILS=admin@example.com"
Bu satırı yorumdan çıkarın ve kendi e-posta adresinizi yazın. Virgülle birden fazla adres ekleyebilirsiniz.
* Nginx Proxy Ayarları İçin Hazırlık (Port Mapping):
Discourse’un Docker konteyneri içinde 80 numaralı portta çalıştığını varsayıyoruz. Ancak Nginx de sunucunun 80 ve 443 numaralı portlarını kullanacağı için, Discourse konteynerinin dışarıya farklı bir port üzerinden erişmesini sağlamalıyız. app.yml dosyasında expose bölümünü bulun ve aşağıdaki gibi düzenleyin:
expose:
- "4000:80" # Discourse'u host makinede 4000 portuna bind eder.
Bu ayar, Docker konteyneri içindeki 80 numaralı portu, sunucunun 4000 numaralı portuna yönlendirecektir. Nginx daha sonra bu 4000 numaralı porta proxy yapacaktır. Eğer expose bölümü yoksa, kendiniz ekleyin.
* Let’s Encrypt Ayarları (Devre Dışı Bırakma):
Nginx SSL’i yöneteceğinden, Discourse’un kendi Let’s Encrypt entegrasyonunu devre dışı bırakmalıyız. LETSENCRYPT_ACCOUNT_EMAIL ve LETSENCRYPT_DOMAIN satırlarını yorum satırı yaparak veya tamamen silerek pasif hale getirin.
# - "LETSENCRYPT_ACCOUNT_EMAIL=you@example.com"
# - "LETSENCRYPT_DOMAIN=forum.example.com"
Dosyayı kaydedin ve kapatın (Ctrl+X, Y, Enter).
Discourse Kurulum Komut Dosyasının Çalıştırılması
Tüm ayarları yaptıktan sonra, Discourse kurulum komut dosyasını çalıştırarak uygulamayı oluşturabilir ve başlatabiliriz. Bu işlem biraz zaman alabilir (10-30 dakika), çünkü Docker imajlarını indirir, veritabanını kurar ve Discourse uygulamasını derler.
sudo ./bin/setup
Bu komut, Discourse uygulamasını yapılandırır ve başlatır. İlk çalıştırmada, gerekli Docker imajlarını indirecek ve Discourse’u kuracaktır. İşlem tamamlandığında, terminalde başarılı bir mesaj görmelisiniz.
Kurulum tamamlandıktan sonra, Discourse uygulamanız sunucunuzun 4000 numaralı portunda çalışıyor olacaktır. Henüz tarayıcınızdan erişemeyeceksiniz, çünkü Nginx’i kurup yapılandırmadık.
Nginx’in Kurulumu ve Yapılandırılması
Nginx, Discourse’un önünde bir ters proxy görevi görecek, gelen istekleri yönetecek ve Discourse konteynerine iletecektir. Ayrıca SSL sonlandırmayı da Nginx yapacak.
Nginx’in Kurulumu
Nginx paketini Ubuntu 14.04 üzerine kurun:
sudo apt-get install -y nginx
Nginx Servisinin Kontrolü
Nginx servisinin çalıştığından emin olun:
sudo service nginx start
sudo service nginx status
Tarayıcınızdan sunucunuzun IP adresine gittiğinizde Nginx’in varsayılan “Welcome to Nginx!” sayfasını görmelisiniz.
Nginx Proxy Yapılandırması
Discourse için yeni bir Nginx sanal host dosyası oluşturacağız.
Yeni Bir Sanal Host Dosyası Oluşturma
Nginx yapılandırma dosyaları /etc/nginx/sites-available/ dizininde bulunur. Yeni bir dosya oluşturalım:
sudo nano /etc/nginx/sites-available/discourse
Aşağıdaki yapılandırmayı dosyaya yapıştırın. forum.example.com yerine kendi alan adınızı yazmayı unutmayın. Bu yapılandırma, HTTP isteklerini HTTPS’ye yönlendirecek ve HTTPS isteklerini Discourse’un çalıştığı 4000 numaralı porta proxy edecektir.
server {
listen 80;
listen [::]:80;
server_name forum.example.com;
# HTTP isteklerini HTTPS'ye yönlendir
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name forum.example.com;
# SSL Ayarları - Certbot tarafından güncellenecek
# ssl_certificate /etc/letsencrypt/live/forum.example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/forum.example.com/privkey.pem;
# include /etc/letsencrypt/options-ssl-nginx.conf;
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# Güvenlik başlıkları (isteğe bağlı ama önerilir)
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "no-referrer-when-downgrade";
add_header Content-Security-Policy "frame-ancestors 'self'";
# Discourse'a proxy yap
location / {
proxy_pass http://127.0.0.1:4000; # Discourse'un çalıştığı port
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_buffering off;
proxy_redirect off;
proxy_read_timeout 900; # Uzun süreli bağlantılar için
proxy_send_timeout 900; # Uzun süreli bağlantılar için
# WebSocket desteği için
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
# Statik dosyalar için (isteğe bağlı, Discourse'un kendi Nginx'i halleder)
# location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|eot|otf|ttf|woff|woff2)$ {
# expires max;
# log_not_found off;
# add_header Cache-Control "public";
# }
}
Dosyayı kaydedin ve kapatın.
Yapılandırmanın Etkinleştirilmesi
Yeni yapılandırma dosyasını etkinleştirmek için, sites-enabled dizinine bir sembolik link oluşturun:
sudo ln -s /etc/nginx/sites-available/discourse /etc/nginx/sites-enabled/
Varsayılan Nginx yapılandırmasını devre dışı bırakın, çünkü kendi yapılandırmamız çakışabilir:
sudo rm /etc/nginx/sites-enabled/default
Nginx’i Yeniden Başlatma
Nginx yapılandırmasının sözdizimini kontrol edin:
sudo nginx -t
Eğer “syntax is ok” ve “test is successful” mesajlarını görürseniz, Nginx’i yeniden başlatın:
sudo service nginx restart
Bu noktada, tarayıcınızdan http://forum.example.com adresine gitmeyi denediğinizde, Nginx’in HTTP isteğini alıp Discourse’un 4000 numaralı portuna yönlendirmesi gerekir. Ancak henüz SSL sertifikamız olmadığı için HTTPS’ye otomatik yönlendirme çalışmayacak ve muhtemelen bir hata alacaksınız. Bu normaldir.
SSL/TLS Şifrelemesinin Yapılandırılması (Let’s Encrypt ile)
Web sitenizi güvenli hale getirmek için Let’s Encrypt’ten ücretsiz SSL/TLS sertifikaları alacağız. Certbot aracı bu süreci otomatikleştirir.
Certbot Kurulumu
Ubuntu 14.04 için Certbot kurulumu, PPA (Personal Package Archive) eklemeyi gerektirir.
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:certbot/certbot -y
sudo apt-get update
sudo apt-get install -y certbot python-certbot-nginx
SSL Sertifikasının Alınması
Certbot’u Nginx eklentisiyle çalıştırarak sertifikayı alın ve Nginx yapılandırmanızı otomatik olarak güncelleyin:
sudo certbot --nginx -d forum.example.com
Bu komutu çalıştırdığınızda, Certbot sizden bazı bilgiler isteyecektir:
1. Bir e-posta adresi (acil durumlar ve bildirimler için).
2. Let’s Encrypt hizmet şartlarını kabul etmenizi.
3. E-posta adresinizi EFF (Electronic Frontier Foundation) ile paylaşmak isteyip istemediğinizi.
Certbot, Nginx yapılandırmanızı analiz edecek ve sertifikayı alıp otomatik olarak yapılandırma dosyanıza ekleyecektir. İşlem tamamlandığında, HTTP trafiğini otomatik olarak HTTPS’ye yönlendirmek isteyip istemediğinizi soracaktır. “Redirect” seçeneğini seçin (genellikle 2).
Başarılı bir kurulumdan sonra, Nginx yapılandırma dosyanız (/etc/nginx/sites-available/discourse) aşağıdaki gibi güncellenmiş olacaktır (Certbot’un eklediği satırlar):
server {
listen 80;
listen [::]:80;
server_name forum.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name forum.example.com;
ssl_certificate /etc/letsencrypt/live/forum.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/forum.example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# ... diğer proxy ve header ayarları ...
}
Otomatik Yenileme Ayarı
Let’s Encrypt sertifikaları 90 gün geçerlidir. Certbot, bu sertifikaları otomatik olarak yenilemek için bir cron job veya systemd timer ayarlar. Yenileme işleminin düzgün çalıştığını test edebilirsiniz:
sudo certbot renew --dry-run
Eğer bu komut hatasız çalışırsa, sertifikalarınızın otomatik olarak yenileneceğinden emin olabilirsiniz.
Artık tarayıcınızdan https://forum.example.com adresine gittiğinizde, Discourse uygulamanızın Nginx ve SSL ile güvenli bir şekilde çalıştığını görmelisiniz. İlk erişimde, Discourse sizi yönetici hesabı oluşturma ekranına yönlendirecektir.
Discourse’u Nginx ile Entegre Etme
Bu bölümde, Nginx’in Discourse ile sorunsuz çalışmasını sağlamak için Discourse’un kendi yapılandırmasında yapılması gereken son ayarlamaları ve entegrasyonun nasıl çalıştığını inceleyeceğiz.
Discourse Yapılandırmasının Nginx’e Uyarlanması
Aslında, app.yml dosyasında yaptığımız expose: - "4000:80" ayarı ve LETSENCRYPT ayarlarını pasifize etmemiz, Discourse’un Nginx arkasında çalışması için gereken temel uyarlamalardır. Discourse konteyneri 80 numaralı portta dahili olarak çalışır ve biz bu portu ana makinenin 4000 numaralı portuna yönlendirdik. Nginx de bu 4000 numaralı porta proxy yapıyor. Bu sayede Nginx, tüm gelen HTTP/HTTPS trafiğini yönetirken, Discourse sadece kendisine yönlendirilen istekleri işler.
Discourse’un DISCOURSE_HOSTNAME ayarı da Nginx üzerinden erişilecek alan adıyla eşleştiği için, Discourse içindeki URL’ler ve yönlendirmeler doğru şekilde çalışacaktır.
Discourse’un Nginx Aracılığıyla Erişilebilir Hale Getirilmesi
1. Gelen İstek: Bir kullanıcı tarayıcısına https://forum.example.com yazar.
2. DNS Çözümlemesi: DNS, forum.example.com adresini sunucunuzun IP adresine çevirir.
3. Nginx Dinleme: Nginx, sunucunun 443 numaralı portundaki HTTPS isteğini yakalar.
4. SSL Sonlandırma: Nginx, Certbot ile alınan SSL sertifikasını kullanarak HTTPS trafiğini şifresini çözer.
5. Proxy Yönlendirme: Nginx, şifresi çözülmüş isteği proxy_pass http://127.0.0.1:4000; yönergesi sayesinde sunucunun 4000 numaralı portuna yönlendirir.
6. Docker Port Yönlendirmesi: Sunucunun 4000 numaralı portuna gelen istek, Docker tarafından Discourse konteynerinin dahili 80 numaralı portuna yönlendirilir (expose: - "4000:80").
7. Discourse İşleme: Discourse uygulaması isteği işler ve yanıtı aynı ters yoldan geri gönderir.
Bu akış, Nginx’in bir güvenlik katmanı, yük dengeleyici ve SSL sonlandırıcı olarak nasıl çalıştığını gösterir.
Sık Karşılaşılan Sorunlar ve Çözümleri
Kurulum sırasında veya sonrasında karşılaşabileceğiniz bazı yaygın sorunlar ve bunların çözümleri aşağıda listelenmiştir.
Port Çakışmaları
* Sorun: Nginx veya Discourse konteyneri, zaten kullanımda olan bir portu kullanmaya çalışıyor. Örneğin, Nginx 80 ve 443’ü kullanırken, Discourse’u da doğrudan 80’e bağlamaya çalışmak.
* Çözüm: app.yml dosyasındaki expose ayarını kontrol edin. Discourse’u Nginx’in kullanmadığı yüksek bir porta (örn. 4000, 8080) bağladığınızdan emin olun. Nginx yapılandırmanızda da proxy_pass yönergesinin bu doğru porta işaret ettiğinden emin olun.
Nginx Yapılandırma Hataları
* Sorun: Nginx başlamıyor veya siteniz erişilemiyor. Genellikle yanlış bir sözdizimi veya eksik bir noktalı virgül (;) neden olur.
* Çözüm: sudo nginx -t komutunu çalıştırarak Nginx yapılandırma dosyanızdaki sözdizimi hatalarını kontrol edin. Hata mesajlarını dikkatlice okuyun ve belirtilen satırları düzeltin. Ardından sudo service nginx restart ile Nginx’i yeniden başlatın.
SSL Hataları (Let’s Encrypt)
* Sorun: Sertifika alınamıyor veya tarayıcıda “güvenli bağlantı değil” hatası alınıyor.
* Çözüm:
* DNS Kontrolü: Alan adınızın A kaydının doğru IP adresine işaret ettiğinden ve DNS yayılımının tamamlandığından emin olun. dig forum.example.com veya ping forum.example.com komutlarıyla kontrol edebilirsiniz.
* Certbot Hataları: Certbot komutunu çalıştırırken hata mesajlarını dikkatlice okuyun. Genellikle, alan adının doğrulanamaması (DNS veya HTTP-01 challenge) sorunudur. Nginx’in 80 portunun dışarıdan erişilebilir olduğundan emin olun (güvenlik duvarı ayarları).
* Nginx Yapılandırması: Certbot’un Nginx yapılandırmanızı doğru şekilde güncellediğinden emin olun. /etc/nginx/sites-available/discourse dosyasındaki ssl_certificate ve ssl_certificate_key yollarını kontrol edin.
Discourse Yeniden Oluşturma Hataları (./bin/setup veya launcher rebuild app)
* Sorun: Discourse kurulumu veya güncellemesi sırasında launcher rebuild app komutu takılıyor veya hata veriyor.
* Çözüm:
* Bellek Yetersizliği: En yaygın nedenlerden biridir. Özellikle 1 GB RAM’e sahip sunucularda bu sorun sık görülür. Sunucunuza daha fazla RAM eklemeyi veya bir swap dosyası (takas alanı) oluşturmayı düşünebilirsiniz. Ubuntu 14.04 için 2GB veya 4GB bir swap dosyası oluşturmak faydalı olabilir:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
* Disk Alanı Yetersizliği: df -h komutuyla disk kullanımınızı kontrol edin. Yetersiz alan varsa, gereksiz dosyaları temizleyin veya disk alanını genişletin.
* Ağ Sorunları: Docker imajlarını veya bağımlılıkları indirirken ağ bağlantısı sorunları yaşanabilir. İnternet bağlantınızı kontrol edin.
* app.yml Hataları: Yapılandırma dosyasındaki hatalı bir ayar da rebuild işlemini başarısız kılabilir. Tüm ayarların doğru olduğundan emin olun.
E-posta Gönderme Sorunları
* Sorun: Discourse e-posta gönderemiyor (örneğin, kayıt onay e-postaları veya bildirimler gelmiyor).
* Çözüm:
* app.yml SMTP Ayarları: app.yml dosyasındaki SMTP ayarlarının (adres, port, kullanıcı adı, şifre) doğru olduğundan emin olun.
* Güvenlik Duvarı: Sunucunuzun güvenlik duvarının (UFW) SMTP portundan (genellikle 587 veya 465) giden bağlantılara izin verdiğinden emin olun.
* SMTP Sağlayıcısı: SMTP sağlayıcınızın (SendGrid, Mailgun vb.) ayarlarını kontrol edin. Bazen sağlayıcı tarafında IP kısıtlamaları veya API anahtarı sorunları olabilir.
* Discourse Logları: Discourse yönetici panelindeki “Logs” bölümünü kontrol edin. E-posta gönderme hataları genellikle burada detaylıca listelenir.
Bellek Yetersizliği
* Sorun: Sunucu yavaş çalışıyor, uygulamalar çöküyor veya launcher rebuild app başarısız oluyor.
* Çözüm: Daha önce belirtildiği gibi, özellikle 1GB RAM’li sunucularda swap alanı oluşturmak veya sunucunun RAM’ini artırmak bu sorunu büyük ölçüde hafifletir. free -h komutuyla bellek ve swap kullanımınızı kontrol edebilirsiniz.
Sonuç
Bu detaylı rehberde, Discourse’u Ubuntu 14.04 işletim sistemi üzerinde Nginx ters proxy arkasında nasıl kuracağınızı adım adım öğrendiniz. Docker, Discourse ve Nginx gibi modern web teknolojilerini bir araya getirerek, güçlü, güvenli ve performanslı bir topluluk platformu oluşturma sürecini tamamladınız. Ubuntu 14.04 gibi eski bir sistemde bile modern bir uygulamayı çalıştırmanın inceliklerini ve olası zorluklarını ele aldık.
Kurulum sürecinde sistem güncellemesinden temel bağımlılıkların yüklenmesine, Docker’ın özel olarak Ubuntu 14.04’e kurulumundan Discourse’un yapılandırılmasına kadar her adımı titizlikle uyguladık. Nginx’i bir ters proxy olarak kurup yapılandırdık ve Let’s Encrypt ile ücretsiz SSL/TLS sertifikaları alarak Discourse kurulumunuzu HTTPS üzerinden güvenli hale getirdik. Son olarak, sık karşılaşılan sorunları ve çözümlerini ele alarak, karşılaşabileceğiniz potansiyel engelleri aşmanıza yardımcı olduk.
İleri Adımlar
Kurulumu tamamladıktan sonra, Discourse’unuzu daha da geliştirmek için atabileceğiniz bazı ileri adımlar şunlardır:
* Yönetici Panelini Keşfedin: Discourse’un zengin yönetici panelini kullanarak ayarları yapılandırın, kategoriler oluşturun, kullanıcıları yönetin ve temaları özelleştirin.
* Eklentiler ve Temalar: Discourse, çeşitli eklentiler ve temalarla genişletilebilir. Topluluğunuzun ihtiyaçlarına uygun eklentileri yükleyebilir ve görsel olarak çekici temalar kullanabilirsiniz.
* Yedekleme Stratejisi: Verilerinizin güvenliği için düzenli yedekleme stratejisi oluşturmak kritik öneme sahiptir. Discourse’un dahili yedekleme özelliklerini veya Docker hacim yedekleme yöntemlerini kullanabilirsiniz.
* Performans Optimizasyonu: Büyük topluluklar için Nginx ayarlarını daha da optimize edebilir, CDN (İçerik Dağıtım Ağı) entegrasyonu düşünebilirsiniz.
* Güvenlik Duvarı (UFW): Sunucunuzda UFW (Uncomplicated Firewall) gibi bir güvenlik duvarı etkinleştirerek sadece gerekli portlara (22 SSH, 80 HTTP, 443 HTTPS) dışarıdan erişime izin verin.
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Bu komutlar, SSH, HTTP ve HTTPS trafiğine izin verir ve güvenlik duvarını etkinleştirir.
Bu rehberin, Discourse’u Nginx arkasında Ubuntu 14.04 üzerinde başarıyla kurmanız için kapsamlı bir kaynak olmasını umuyoruz. İyi forumlar!
