Discourse adalah aplikasi forum diskusi free dan open source yang dapat digunakan sebagai milis dan ruang obrolan. Discourse adalah platform yang sangat kuat dan fleksibel yang memungkinkan pengguna untuk masuk dengan Sistem Single Sign-On. Discourse juga dapat diintegrasikan dengan WordPress, Google Analytics, Zendesk, Patreon, Slack dan banyak lagi.

Discourse mendukung pemberitahuan email, balasan email dan berbagai metode otentikasi seperti jejaring sosial, dan sistem single sign-on. Sederhana, mudah digunakan, flat, dan dilengkapi dengan mobile layout ponsel bawaan.

Dalam tutorial ini, kita akan belajar cara menginstal dan mengkonfigurasi forum Discourse di server Ubuntu 18.04.

Prasyarat

  • Sistem yang menjalankan sistem Ubuntu 18.04.
  • Memiliki IP yang menunjuk ke server
  • Masuk sebagai user non-root dengan hak sudo.

Sebelum Mulai

Perbarui paket sistem operasi Anda (software). Ini adalah langkah pertama yang penting karena memastikan Anda memiliki pembaruan terbaru dan perbaikan keamanan untuk paket perangkat lunak default sistem operasi Anda:

sudo apt update && sudo apt upgrade -y

Setelah server diperbarui, restart sistem Anda untuk menerapkan semua perubahan

Setting FQDN (Opsional)

Selanjutnya, Anda perlu mengatur FQDN di server (opsional). Anda dapat melakukannya dengan perintah berikut:

hostnamectl set-hostname test.example.com

Selanjutnya, buka file /etc/hosts dengan text editor nano dan tambahkan baris berikut:

nano /etc/hosts

Tambahkan baris berikut:

192.168.0.101 test.example.com test

Simpan dan tutup file ketika selesai. Kemudian, jalankan perintah berikut untuk menerapkan semua perubahan:

hostname -f

Selanjutnya, Anda perlu menginstal beberapa paket yang diperlukan ke sistem. Anda dapat menginstalnya dengan perintah berikut:

apt-get install nginx curl git wget unzip -y

Setelah selesai, Anda dapat melanjutkan ke langkah berikutnya.

Install dan Konfigurasikan PostgreSQL

Pertama, Anda perlu menginstall PostgreSQL ke sistem. Anda dapat menginstalnya dengan menjalankan perintah berikut:

apt-get install postgresql -y

Setelah PostgreSQL diinstal, masuk ke konsol PostgreSQL dengan perintah berikut:

sudo -u postgres psql

Selanjutnya, buat database dan user untuk Discourse dengan perintah berikut:

postgres=#CREATE DATABASE discoursedb;
 postgres=#CREATE USER discourseuser;
 postgres=#ALTER USER discourseuser WITH ENCRYPTED PASSWORD 'GantiDenganPassword';
 postgres=#ALTER DATABASE discoursedb OWNER TO discourseuser;

Selanjutnya, sambungkan ke discoursedb dan buat ekstensi hstore dan pg_trgm dengan perintah berikut:

postgres=#\c discoursedb;
 postgres=#CREATE EXTENSION hstore;
 postgres=#CREATE EXTENSION pg_trgm;

Terakhir, keluar dari PostgreSQL dengan perintah berikut:

postgres=#\q

Install Ruby

Selanjutnya, Anda perlu menginstal Ruby versi terbaru ke sistem. Anda dapat menginstal Ruby menggunakan RVM.

Pertama, instal GNU privacy guard dengan perintah berikut:

apt-get install gnupg2 -y

Selanjutnya, impor GPG keys Ruby version manager dengan perintah berikut:

gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

Anda akan melihat output berikut:

gpg: keybox '/root/.gnupg/pubring.kbx' created
gpg: key 105BD0E739499BDB: 6 signatures not checked due to missing keys
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 105BD0E739499BDB: public key "Piotr Kuczynski <[email protected]>" imported
gpg: key 3804BB82D39DC0E3: 103 signatures not checked due to missing keys
gpg: key 3804BB82D39DC0E3: public key "Michal Papis (RVM signing) <[email protected]>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 2
gpg:               imported: 2

Selanjutnya, instal RVM dengan Ruby and Rails default dengan perintah berikut:

curl -sSL https://get.rvm.io | bash -s stable --rails

Setelah menginstal Ruby and Rails, Anda harus mencari skrip RVM. Anda dapat melakukannya dengan perintah berikut:

source /usr/local/rvm/scripts/rvm

Anda sekarang dapat melihat versi Ruby dengan perintah berikut:

rvm list

Anda akan melihat output berikut:

=* ruby-2.6.3 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

Install dan Konfigurasi Discourse

Pertama, Anda download versi terbaru dari Discourse dari repositori Git. Anda dapat mengunduhnya dengan perintah berikut:

cd /var/www/
 git clone https://github.com/discourse/discourse.git

Output:

Cloning into 'discourse'...
remote: Enumerating objects: 57, done.
remote: Counting objects: 100% (57/57), done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 403387 (delta 26), reused 34 (delta 20), pack-reused 403330
Receiving objects: 100% (403387/403387), 267.39 MiB | 235.00 KiB/s, done.
Resolving deltas: 100% (252384/252384), done.
Checking out files: 100% (27055/27055), done.

Selanjutnya, masuk ke direktori discourse dan lihat stable release terbaru dari Discourse dengan perintah berikut:

cd discourse
 git checkout v2.2.4

Selanjutnya, instal Ruby dependency manager dengan perintah berikut:

/usr/local/rvm/src/ruby-2.6.3/bin/gem install bundler -v '1.17.3'

Anda akan melihat output berikut:

Fetching bundler-1.17.3.gem
Successfully installed bundler-1.17.3
Parsing documentation for bundler-1.17.3
Installing ri documentation for bundler-1.17.3
Done installing documentation for bundler after 15 seconds
1 gem installed

Selanjutnya, Anda perlu menginstal beberapa paket tambahan untuk mengkompilasi source code. Anda dapat menginstal semuanya dengan perintah berikut:

apt-get install gcc ruby-dev libxslt-dev libxml2-dev zlib1g-dev libpq-dev imagemagick redis-server optipng pngquant jhead jpegoptim gifsicle -y

Selanjutnya, instal semua dependensi yang diperlukan oleh Discourse dengan perintah berikut:

RAILS_ENV=production bundle install --path vendor/bundle/

Selanjutnya, ganti nama file konfigurasi default Discourse dengan perintah mv seperti berikut:

mv config/discourse_defaults.conf config/discourse.conf

Selanjutnya, buka file discourse.conf dan tentukan pengaturan database Anda:

nano config/discourse.conf

Ubah baris berikut:

db_host = localhost
db_port = 5432
db_name = discoursedb
db_username = discourseuser
db_password = PaswwordDatabaseAnda
hostname = "test.example.com"

Simpan dan tutup file. Kemudian, edit file konfigurasi production environment dengan perintah berikut:

nano /var/www/discourse/config/environments/production.rb

Tambahkan baris berikut sebagai baris ketiga

require 'uglifier'

Kemudian, cari baris berikut:

config.assets.js_compressor = :uglifier

Dan ganti dengan yang pengaturan ini:

config.assets.js_compressor = Uglifier.new(harmony: true)

Simpan dan tutup file ketika Anda selesai. Kemudian, siapkan Discourse untuk production dengan perintah berikut:

RAILS_ENV=production bundle exec rake db:migrate
 RAILS_ENV=production bundle exec rake assets:precompile

Selanjutnya, buka file puma.rb dengan perintah berikut:

nano /var/www/discourse/config/puma.rb

Temukan baris berikut:

APP_ROOT = '/home/discourse/discourse'

Ganti dengan baris berikut:

APP_ROOT = '/var/www/discourse'

Simpan dan tutup file ketika Anda selesai. Kemudian, buat direktori sockets dan process ID direktori dengan perintah berikut:

mkdir /var/www/discourse/tmp/sockets/
 mkdir /var/www/discourse/tmp/pids/

Terakhir, start Discourse dengan menjalankan perintah berikut:

RAILS_ENV=production bundle exec puma -C /var/www/discourse/config/puma.rb

Anda akan melihat output berikut:

[29834] Puma starting in cluster mode...
[29834] * Version 3.11.4 (ruby 2.6.3-p62), codename: Love Song
[29834] * Min threads: 8, max threads: 32
[29834] * Environment: development
[29834] * Process workers: 4
[29834] * Preloading application

[29834] * Listening on unix:///var/www/discourse/tmp/sockets/puma.sock
[29834] ! WARNING: Detected 3 Thread(s) started in app boot:
[29834] ! #<Thread:0x000055b1a3e871a0@/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus.rb:667 sleep> - /var/www/html/discourse/vendor/bundle/ruby/2.6.0/gems/hiredis-0.6.1/lib/hiredis/ext/connection.rb:19:in `read'
[29834] ! #<Thread:0x000055b1a3e86840@/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus/timer_thread.rb:38 sleep> - /var/www/html/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.0.pre.1/lib/message_bus/timer_thread.rb:123:in `sleep'
[29834] ! #<Thread:0x000055b1a234dfb0@/var/www/discourse/lib/discourse.rb:584 sleep> - /var/www/discourse/lib/discourse.rb:587:in `sleep'
[29834] * Daemonizing...

Selanjutnya, buat akun admin untuk mengakses antarmuka web Discourse dengan perintah berikut:

cd /var/www/discourse
 RAILS_ENV=production bundle exec rake admin:create

Berikan email dan kata sandi Anda seperti yang ditunjukkan di bawah ini:

Email:  [email protected]
Password:  
Repeat password:  

Ensuring account is active!

Account created successfully with username example
Do you want to grant Admin privileges to this account? (Y/n)  Y

Your account now has Admin privileges!

Selanjutnya, restart layanan Discourse dengan perintah berikut:

RAILS_ENV=production bundle exec pumactl -P /var/www/discourse/tmp/pids/puma.pid restart

Konfigurasi  Nginx untuk Discourse

Selanjutnya, Anda perlu mengkonfigurasi Nginx sebagai reverse proxy untuk mengakses web interface Discourse pada port 80.

Pertama, copy file konfigurasi sampel  virtual host Nginx dengan perintah berikut:

cp /var/www/discourse/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf

Selanjutnya, buka file discourse.conf dengan perintah berikut:

nano /etc/nginx/conf.d/discourse.conf

Buat perubahan berikut:

#upstream discourse {
#    server unix:/var/www/discourse/tmp/sockets/thin.0.sock;
#    server unix:/var/www/discourse/tmp/sockets/thin.1.sock;
#    server unix:/var/www/discourse/tmp/sockets/thin.2.sock;
#    server unix:/var/www/discourse/tmp/sockets/thin.3.sock;
#}

upstream discourse {
       server unix:/var/www/discourse/tmp/sockets/puma.sock;
 }
server_name test.example.com;

Simpan dan tutup file ketika Anda selesai. Kemudian, buat direktori cache dengan perintah berikut:

mkdir -p /var/nginx/cache/

Selanjutnya, periksa Nginx untuk setiap kesalahan sintaks dengan perintah berikut:

nginx -t

Output:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Selanjutnya, restart Nginx untuk menerapkan semua perubahan:

systemctl restart nginx

Anda juga dapat memeriksa status Nginx dengan perintah berikut:

systemctl status nginx

Output:

? nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-05-26 04:19:12 UTC; 29min ago
     Docs: man:nginx(8)
  Process: 1052 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 848 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 1065 (nginx)
    Tasks: 3 (limit: 1114)
   CGroup: /system.slice/nginx.service
           ??1065 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ??1066 nginx: worker process
           ??1067 nginx: cache manager process

May 26 04:19:04 ubuntu1804 systemd[1]: Starting A high performance web server and a reverse proxy server...
May 26 04:19:12 ubuntu1804 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
May 26 04:19:12 ubuntu1804 systemd[1]: Started A high performance web server and a reverse proxy server.

Anda juga perlu menyalin file JS berikut jika Anda mendapatkan kesalahan untuk mengakses web Discourse :

cp /var/www/discourse/public/assets/_vendor-3eae3eec8fba033cb1b5af6c103a5b8781caa69cf97fe7773ba89ba68980b263.js /var/www/discourse/public/assets/vendor-3eae3eec8fba033cb1b5af6c103a5b8781caa69cf97fe7773ba89ba68980b263.js

Akses web interface Discourse

Discourse sekarang diinstal dan dikonfigurasi, saatnya untuk mengakses antarmuka web Discourse.

Buka browser web dan ketik URL http://test.example.com. Anda akan diarahkan ke halaman berikut:

Discourse web interface

Sekarang, klik tombol Log In. Anda akan melihat halaman berikut:

Login to Discourse

Sekarang, berikan nama pengguna dan kata sandi Anda. Kemudian, klik tombol Log In. Anda akan melihat halaman berikut:

Discourse user dashboard

Sekarang Anda dapat memulai Setup wizard menggunakan URL http://test.example.com/wizard di web browser. Anda akan melihat Welcome screen di halaman berikut:

Setup Wizard

Sekarang, pilih bahasa Anda dan klik tombol Next. Anda akan melihat halaman berikut:

Select language

Di sini, ketik topik Anda dan klik tombol Next. Anda akan melihat halaman berikut:

Configure Access Priveliges

Di sini, pilih Publik dan klik tombol Next. Anda akan melihat halaman berikut:

Enter contact details

Di sini, berikan email dan halaman kontak Anda. Kemudian, klik tombol Next. Anda akan melihat halaman berikut:

Organization settings

Di sini, berikan nama dan alamat perusahaan Anda. Kemudian, klik tombol Next. Anda akan melihat halaman berikut:

Choose a theme

Sekarang, pilih tema Anda dan klik tombol Next. Anda akan melihat halaman berikut:

Upload Logo for Discourse website

Sekarang, unggah logo Anda dan klik tombol Next. Anda akan melihat halaman berikut:

Upload Icons

Sekarang, pilih Ikon dan klik tombol Next. Anda akan melihat halaman berikut:

Set Homepage Title

Sekarang, pilih halaman beranda dan klik tombol Next. Anda akan melihat halaman berikut:

Select Emojis

Sekarang, pilih Emoji sesuai keinginan dan klik tombol Next. Anda akan melihat halaman berikut:

Invite Staff

Sekarang, undang staf Anda untuk bergabung dengan forum ini dan klik tombol Next. Setelah instalasi selesai, Anda akan melihat halaman berikut:

Discourse is ready

Sekarang, klik tombol Done. Anda akan diarahkan ke dasbor Discourse yang ditampilkan di halaman berikut:

Discourse has been setup successfully

Selamat! Anda telah berhasil menginstal dan mengkonfigurasi forum Discourse di server Ubuntu 18.04.