Hướng dẫn Cài đặt Discouse trên server nginx

Discouse là gì? xem chi tiết tại discourse.org

Đây là cách mình cài đặt Discouse lên server nginx đang chạy với các website wordpress. Thông server như sau:

  • Ubuntu 18.04
  • Webinoly + Nginx
  • Wordpress Multisite đang hoạt động

Mục đích: cài thêm Discouse trên server nhằm tiết kiệm chi phí.

Các bước cài đặt discouse

Cài đặt Docker

 sudo apt-get update
 sudo apt-get remove docker docker-engine docker.io
 sudo apt install docker.io
 sudo systemctl start docker
 sudo systemctl enable docker
 docker --version

Cài đặt Discouse

 sudo -s
 git clone https://github.com/discourse/discourse_docker.git /var/discourse
 cd /var/discourse

Tới đây, hãy dừng lại và thiết lập máy chủ thư email cho tên miền Discouse của bạn. Xem các liên kết bên dưới:

https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md #hướng dẫn cài đặt Discouse chính chủ

https://github.com/discourse/discourse/blob/master/docs/INSTALL-email.md #hướng dẫn cấu hình email.

Ok, sau khi đã có thông tin cấu hình email, ta tiếp tục cài đặt discouse.

Kiểm tra cổng

sudo netstat -tulpn

Ta thấy cổng 80 và cổng 443 đã bị sử dụng bởi nginx. vậy nên…

Dừng nginx

sudo systemctl stop nginx

Sử dụng lệnh kiểm tra cổng ở trên, nếu không thấy cổng 80 và 443 là được

Setup Discouse

./discourse-setup

Trả lời các câu hỏi sau khi được nhắc bằng thông tin của mail server:

 Hostname for your Discourse? [discourse.example.com]:
 Email address for admin account(s)? [me@example.com,you@example.com]:
 SMTP server address? [smtp.example.com]:
 SMTP port? [587]:
 SMTP user name? [user@example.com]:
 SMTP password? [pa$$word]:
 Let's Encrypt account email? (ENTER to skip) [me@example.com]:

Sau khi chương trình chạy xong, tiếp tục chạy lệnh sau:

./launcher rebuild app

Sau khi tiến trình của dòng lệnh trên chạy xong, bạn có thể truy cập được tên miền bạn đã nhập trước đó trong trình duyệt web. Bạn hãy thiết lập tài khoản như trong hướng dẫn chính chủ.

Bây giờ website discouse của bạn đã hoạt động bình thường. Tiếp theo là bước rất quan trọng để khởi động lại nginx.

Dừng Discouse

./launcher stop app

Sửa tệp /var/discourse/containers/app.yml để trông như thế này:

 templates:
 - "templates/postgres.template.yml"
 - "templates/redis.template.yml"
 - "templates/web.template.yml"
 - "templates/web.ratelimited.template.yml"

 ## Uncomment these two lines if you wish to add Lets Encrypt (https)
 ## - "templates/web.ssl.template.yml" # remove
 ## - "templates/web.letsencrypt.ssl.template.yml" # remove

 - "templates/web.socketed.template.yml" # <-- Added

 ## which TCP/IP ports should this container expose?
 ## If you want Discourse to share a port with another webserver like Apache or nginx,
 ## see https://meta.discourse.org/t/17247 for details

 ##expose:
 ## - "80:80" # http
 ## - "443:443" # https
...

Tiếp theo, hãy nhập mã này /etc/nginx/sites-enabled/discourse.conf , đảm bảo thay đổi server_name và ssl_certificate, ssl_certificate_key :

 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; # <-- change this
 ssl_certificate_key /var/discourse/shared/standalone/ssl/ssl.key; # <-- change this
 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

 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;
 }
 }

Tạo khóa dhparams.pem

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

Kiểm tra lỗi nginx và khởi động lại

 sudo nginx -t
 sudo service nginx reload

Bây giờ chạy lại lệnh sau để áp dụng các thay đổi.

/launcher rebuild app

Bây giờ bạn đã có thể truy cập bình thường Discouse và các website khác của bạn.

Theo mặc định, Discourse thiết lập hai thông số sau theo cấu hình vps. Dưới đây là ví dụ cho 4 CPU + 8GB Ram:

db_shared_buffers: "2048MB"
UNICORN_WORKERS: 8

Tuy nhiên vì VPS của bạn chạy chung với các phần mềm khác nên có thể dẫn tới thiếu ram nếu để thông số trên mặc định.
Nếu Discourse hay gặp lỗi 502 Bab Gateway thì nên giảm 2 thông số trên xuống.

1 Likes