Discourse ile aynı sunucuda siteler yayınlama

  • Admin

    Discourse Docker içinde çalışan bir sistem. Eğer resmi kurulum talimatlarını izleyerek Discourse kurulumu yaptıysanız ve diğer sitelerinizi Discorse ile aynı sunucuda kullanmayı düşünüyorsanız Discourse’yi Docker dışında yayına almanız gerekiyor.

    Şimdi size Discourse’yi Docker dışında kurulan Nginx Web sunucusu ile nasıl yayınlanacağını anlatmaya çalışacağım.

    1. Dicourse’yi durdur

    Çalışan Discourse örneğini kapatmamız gerekiyor. bunun için;

    cd /var/discourse
    ./launcher stop app
    

    2. Nginx Kur

    Docker dışına Nginx web sunucusunu kurmak için;

    sudo apt-get update && sudo apt-get install nginx
    

    3. App.yml düzenle

    app.yml’de bir kaç bölümde değişiklik yapacağız. Bazı ekleme ve çıkarmalar…
    app.yml dosyasını açmak için;

    cd /var/discourse
    nano containers/app.yml
    
    • app.yml dosyasında aşağıdaki satırları bulun ve yorumlayın ( Yani başına # koyun)
    # - "templates/web.ssl.template.yml"
    # - "templates/web.letsencrypt.ssl.template.yml"
    
    • Aşağıdaki satırı app.yml dosyasında templates bölümünde herhangi bir yere ekleyin.
    - "templates/web.socketed.template.yml"
    
    • Şimdi Docker’de portları kapatmaak gerek. Çünkü artık Docker dışında kalan portları kullanacağız. 80 ve 443 portlarını kapatmamız gerek. bunun için aşağıdaki satırları bulun ve başına # ekleyin.
    # - "80:80"   # http <--başına # koy
    # - "443:443" # https  <--başına # koy
    

    4. Nginx’te Discourse’yi yayınla

    Artık Discourse örneğimizi Docker dışında çalışan Nginx web sunucumuz ile yayına hazırız. Şimdi discourse.conf adında bir dosya oluşturacağız ve discourseyi rebuild ettikten sonra artık yayına hazır olacak.

    Nginx konfigürasyon dosyası oluşturmak için;

    nano /etc/nginx/sites-enabled/discourse.conf
    

    Discourse.conf içeriği ise aşağıdaki gibi olacak.

    server {
        listen 80; listen [::]:80;
        server_name forum.example.com;  # <-- change this
    
        return 301 https://$host$request_uri;
    }
    
    
    server {
        listen 443 ssl http2;  listen [::]:443 ssl http2;
        server_name forum.example.com;  # <-- change this
    
        ssl_certificate      /var/discourse/shared/standalone/ssl/ssl.crt;
        ssl_certificate_key  /var/discourse/shared/standalone/ssl/ssl.key;
        ssl_dhparam          /var/discourse/shared/standalone/ssl/dhparams.pem;
        ssl_session_tickets off;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
    
        http2_idle_timeout 5m; # up from 3m default
        client_max_body_size 0;
    
        location / {
            proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
            proxy_set_header Host $http_host;
            proxy_http_version 1.1;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    

    Önemli Noktalar;

    Discourse let’s encrypt SSL ile birlikte gelir. Let’s encrypt SSL dosyaları ise /var/discourse/shared/standalone/ssl/ klasörü içinde bulunur. Discourse kurulumu ile gelen Let’s Encrypt SSL kullanmaya devam edeceksiniz yukarıdaki SSL ile ilgili blokları aşağıdaki gibi girmelisiniz.

    ssl_certificate      /var/discourse/shared/standalone/ssl/seninssl.com.cer;
    ssl_certificate_key  /var/discourse/shared/standalone/ssl/seninsll.com.key;
    

    /var/discourse/shared/standalone/ssl/ yolunda bulunan SSL klasöründe dhparams.pem adında bir dosya yoksa (discourse.conf içindeki aşağıdaki satır)

    ssl_dhparam          /var/discourse/shared/standalone/ssl/dhparams.pem;
    

    Aşağıdaki komutu çalıştırarak bu dosyayı oluşturabilirsin.

    openssl dhparam -out /var/discourse/shared/standalone/ssl/dhparams.pem 2048
    

    veya discourse.con içinden bu satırı tamamen silebilirsinde. Discourse’nin çalışmasına etki etmez. Sana kalmış 😄

    İstersen kendine ait SSL veya Cloudflare Full Strick SSL de kullanabilirsin. Sadece geçerli SSL sertifikalarının yolunu ve adını discourse.conf dosyasında doğru girmiş olmak gerekiyor.

    5. Tamamla

    Artık işimiz bitti. Sitemizi yayına alıp Discourse’yi yeniden oluşturduğumuzda işimiz bitmiş olacak.

    # Discourse'nin kapalı olduğundan emin olmak için;
    /var/discourse/launcher stop app || true
    
    # Nginx'te hata var mı yok mu kontrol edin.
    sudo nginx -t
    # Herhangi bir hata yoksa Discourse'yi yayına alın.
    sudo service nginx reload
    
    # app.yml'de yaptığımız değişikliklerin aktif olması için;
    /var/discourse/launcher rebuild app
    

    Artık Discourse siteniz Docker dışında yayında olmalı. Sunucunuza diğer uygulamalarınızı kurarak istediğiniz kadar siteyi Discourse ile aynı sunucuda kullanabilirsiniz.


Benzer Konular