Hướng dẫn cài đặt Discourse trên CentOS 7

0
174

Cài đặt Discourse trên CentOS 7 – Discourse là một phần mềm miễn phí giúp tạo diễn đàn trực tuyến và quản lý danh sách gửi thư. Nó được tạo ra vào năm 2013 và được viết bằng ngôn ngữ lập trình Ruby và Javascript. Phần mềm Discourse đã được nhiều tổ chức sử dụng, bao gồm Codeacademy, Udacity, Twitter Developers, Docker Community Forum, v.v.

Trong bài viết này HOSTVN sẽ hướng dẫn các bạn cài đặt Discourse, cấu hình Nginx làm proxy ngược cho Discourse và bảo mật Discourse bằng SSL Let’s Encrypt.

Cài đặt Discourse trên CentOS 7

1. Điều kiện tiên quyết

  • VPS với RAM tối thiểu 1GB.
  • CentOS 7
  • Tài khoản SMTP – ví dụ: Gmail

2. Cài đặt Discourse trên CentOS 7

2.1. Bước 1: Tạo swap

Nếu VPS của bạn mức RAM lớn hơn 1GB RAM, bạn có thể bỏ qua bước này. Với VPS chỉ có 1GB RAM các bạn nên tạo thêm 2GB Swap. Để tạo Swap cho CentOS hãy xem Hướng dẫn tạo Swap trên CentOS 7.

2.2. Bước 2: Cài đặt Docker

Docker là một công nghệ container hóa cho phép bạn nhanh chóng xây dựng, kiểm tra và triển khai các ứng dụng dưới dạng các thùng chứa di động, tự cung cấp, có thể chạy hầu như mọi nơi. Docker đã trở thành tiêu chuẩn thực tế cho việc triển khai container và nó là một công cụ thiết yếu cho các kỹ sư DevOps.

Để cài đặt Docker trên CentOS 7 các bạn thực hiện theo các bước dưới đây

  • Cài đặt docker

Đầu tiên các bạn cần cập nhật hệ thống vào cài đặt một số gói cần thiết:

yum -y update 
yum -y install epel-release
yum -y install yum-utils device-mapper-persistent-data lvm2

Tiếp theo, chạy lệnh sau sẽ thêm kho lưu trữ Docker vào hệ thống của bạn:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Sau khi thêm kho lưu trữ Docker, hãy sử dụng lệnh bên dưới để cài đặt Docker

yum -y install docker-ce

Khi Docker được cài đặt hoàn tất, hãy chạy các lệnh sau để khởi động Docker:

systemctl start docker 
systemctl enable docker

Để kiểm tra xem Docker đã hoạt động hay chưa các bạn sử dụng lệnh sau:

systemctl status docker

Screenshot_81

  • Cài đặt Docker Compose

Để cài đặt các Docker Compose các bạn sử dụng các lệnh sau

curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Để kiểm tra phiên bản Docker Compose dùng lệnh

docker-compose --version

Screenshot_82

2.3. Bước 3: Cài đặt và cấu hình Discourse

Trong bước này, chúng ta sẽ tiến hành cài đặt và định cấu hình Discourse. Đầu tiên chúng ta cần cài đặt git cho máy chủ.

yum -y install git

Bây giờ hãy tạo một thư mục mới /var/discourse và tải xuống Discourse docker bằng cách sử dụng lệnh git.

mkdir -p /var/discourse
git clone https://github.com/discourse/discourse_docker.git /var/discourse

Di chuyển đến thư mục /var/discourse và sao chép file docker-compose standalone.yml vào thư mục /var/discourse/containers/ và đổi tên nó thành app.yml.

cd /var/discourse
cp samples/standalone.yml containers/app.yml

Chỉnh sử file app.yml với Nano

nano containers/app.yml
  • Docker Port Mapping

Theo mặc định, tất cả các yêu cầu HTTP và HTTPS sẽ được xử lý bởi proxy Docker. Trong bài viết này, HOSTVN sẽ sử dụng Nginx cho mục đích này – tất cả các yêu cầu HTTP và HTTPS sẽ được xử lý bởi máy chủ web Nginx.

Vì vậy, chúng ta cần thay đổi cấu hình Docker Port Mapping. Discourse container sẽ chỉ có kết nối HTTP và máy chủ sẽ được mở cổng mới 2045 và ánh xạ tới cổng container 80. Thêm dấu # vào dòng HTTPS và thay đổi dòng HTTP bằng cổng mới 2045.

Screenshot_102 - cài đặt Discourse trên CentOS 7

  • Cấu hình db_shared_buffers

Bỏ dấu # tại dòng db_shared_buffers. Thiết lập thông số db_shared_buffers tối đa bằng 25% của dung lượng RAM. Với VPS 1GB Ram các bạn nên set thông số này là 128MB

Screenshot_104 - cài đặt Discourse trên CentOS 7

  • Cấu hình Workers

Bỏ dấu # tại dòng UNICORN_WORKERS. Với VPS 1GB RAM thông số UNICORN_WORKERS các bạn thiết lập là 2, với VPS 2GB RAM có thể set thông số này bằng 3 hoặc 4

Screenshot_105 - cài đặt Discourse trên CentOS 7

  • Cấu hình Domain Name

Nhập tên miền của bạn vào dòng DISCOURSE_HOSTNAME.

Screenshot_84 - cài đặt Discourse trên CentOS 7

Đừng quên trỏ tên miền của bạn về VPS

Nhập địa chỉ email của bạn vào dòng DISCOURSE_DEVELOPER_EMAIL.

Screenshot_85 - cài đặt Discourse trên CentOS 7

  • Cấu hình SMTP

Cấu hình SMTP là cấu hình quan trọng nhất đối với Discourse. Trong bài viết này HOSTVN sẽ sử dụng SMTP miễn phí của Gmail. Loại bỏ dấu # khỏi các dòng DISCOURSE_SMTP_PORTDISCOURSE_SMTP_ENABLE_START_TLS. Cấu hình của bạn sẽ trông giống như sau

  DISCOURSE_SMTP_ADDRESS: smtp.gmail.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: user@gmail.com
  DISCOURSE_SMTP_PASSWORD: Mật-Khẩu-Ứng-Dụng
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (optional, default true)

Screenshot_86 - cài đặt Discourse trên CentOS 7

Sau khi cấu hình hoàn tất bấm Ctrl + o và nhấn Enter để lưu file, Ctrl + x để thoát khỏi nano. Tiếp theo, xây dựng Discourse Docker image base mới dựa trên cấu hình mẫu app.yml.

./launcher bootstrap app

Screenshot_87

Sau khi quá trình build hoàn tất các bạn khởi động Discourse container mới bằng lệnh sau

./launcher start app

Screenshot_88

Để kiểm tra xem Discourse Docker container có hoạt động hay không các bạn dùng lệnh sau

docker ps -a

Screenshot_89

Kiểm tra các port đang được lắng nghe bằng netstat và đảm bảo rằng docker-proxy đang nghe trên port 2045.

netstat -plntu

Screenshot_103

2.4. Bước 4: Cài đặt SSL Let’s Encrypt

Đối với hướng dẫn này, HOSTVN sẽ chạy Discourse với máy chủ web Nginx và chỉ chấp nhận kết nối HTTPS. Với mục đích này, sẽ cần Chứng chỉ SSL mới cho tên miền và vì vậy, HOSTVN sẽ sử dụng chứng chỉ SSL miễn phí từ Letsencrypt.

yum -y install letsencrypt

Sau khi cài đặt, nếu các bạn sử dụng Firewalld các bạn sẽ cần thêm dịch vụ HTTP và HTTPS vào cấu hình Firewalld.

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

Screenshot_91

Tiếp theo tạo chứng chỉ SSL mới cho Discourse bằng cách sử dụng lệnh sau.

letsencrypt certonly

Bạn sẽ thấy hai cách xác minh từ Letsencrypt. Hãy nhập 1 và nhấn Enter

Screenshot_92

Tiếp theo hãy nhập vào Email của các bạn và nhấn Enter

Screenshot_93

Nhập A và nhấn Enter để đồng ý với quy định của Let’s Encrypt

Screenshot_94

Bước tiếp theo nhập N và nhấn Enter

Screenshot_95

Cuối cùng hãy nhập vào domain sử dụng Discourse  của các bạn

Screenshot_96

Screenshot_101

Chứng chỉ SSL mới từ allowencrypt đã được tạo trong thư mục /etc/letsencrypt/live.

  • Cấu hình Auto Renew SSL

Để auto renew SSL các bạn tạo Cron Job như sau

EDITOR=nano crontab -e

Dán nội dung sau đây vào

30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
35 2 * * 1 /bin/systemctl reload nginx

Screenshot_118

Sau đó bấm Ctrl + o và nhấn Enter để lưu file, bấm Ctrl + x để thoát khỏi nano.

2.5. Bước 5: Cài đặt và cấu hình Nginx làm Reverse Proxy

  • Cài đặt Nginx

Đầu tiên các  bạn cần thiết lập nginx repository để có thể cài đặt Nginx phiên bản mới nhất thông qua yum.

nano /etc/yum.repos.d/nginx.repo

Dán nội dung dưới đây vào

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Sau đó bấm Ctrl + o và nhấn Enter để lưu file, bấm Ctrl + x để thoát khỏi nano. Để cài đặt Nginx, hãy chạy lệnh sau:

yum install nginx -y

Sau khi cài đặt hoàn tất, hãy bật và khởi động dịch vụ Nginx bằng các lệnh sau:

systemctl enable nginx
systemctl start nginx

Để kiểm tra trạng thái của Nginx hãy sử dụng lệnh sau:

systemctl status nginx

Screenshot_97

  • Tạo file cấu hình SSL

Đầu tiên chúng ta cần tạo dhparam bằng các lệnh sau

mkdir -p /etc/nginx/ssl
openssl dhparam -out /etc/nginx/ssl/dhp-4096.pem 4096

Tiếp theo các bạn tiến hành tạo file cấu hình SSL

nano /etc/nginx/ssl.conf

Dán nội dung sau đây vào

ssl_dhparam /etc/nginx/ssl/dhp-4096.pem;

ssl_session_cache   shared:SSL:10m;
ssl_session_timeout  5m;
 
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
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';
ssl_prefer_server_ciphers on;
 
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

Screenshot_98

Sau đó bấm Ctrl + o và nhấn Enter để lưu file, bấm Ctrl + x để thoát khỏi nano.

  • Tạo Virtual host (vhost) cho Discourse

Cuối cùng các bạn tạo vhost cho Discourse

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

Dán nội dung sau đây vào

server {
     listen 80; 
     listen [::]:80;
     server_name discourse.hostvn.com;

     return 301 https://$host$request_uri;
 }
  
 server {
     listen 443 ssl http2;  
     server_name discourse.hostvn.com;
 
     ssl_certificate /etc/letsencrypt/live/discourse.hostvn.com/fullchain.pem;
     ssl_certificate_key /etc/letsencrypt/live/discourse.hostvn.com/privkey.pem;
     include /etc/nginx/ssl.conf;
  
     # Reverse Proxy Configuration
     location / {
         proxy_pass http://discourse.hostvn.com:2045/;
         proxy_set_header Host $http_host;
         proxy_http_version 1.1;
         proxy_set_header X-Forwarded-Proto $scheme;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_redirect http://discourse.hostvn.com:2045/ https://discourse.hostvn.com;
     }
 }

Screenshot_100 - cài đặt Discourse trên CentOS 7

Sau đó bấm Ctrl + o và nhấn Enter để lưu file, bấm Ctrl + x để thoát khỏi nano. Khởi động lại Nginx để cấu hình có hiệu lực

systemctl restart nginx

2.6. Bước 6: Cài đặt Discourse Web

Mở trình duyệt web của bạn và truy cập discourse bằng tên miền bạn đã thiết lập. Bấm vào nút Register để tạo tài khoản Admin

Screenshot_106 - cài đặt Discourse trên CentOS 7

Điền đầy đủ các thông tin và bấm Register

Screenshot_107 - cài đặt Discourse trên CentOS 7

Lưu ý: Mật khẩu của bạn phải dài ít nhất 15 ký tự.

Bạn sẽ nhận được email yêu cầu xác thực. Kiểm tra hộp thư đến của bạn và đảm bảo bạn nhận được email yêu cầu xác thực.

Để nhận được email xác thực các bạn cần đảm bảo đã cấu hình chính xác SMTP Email ở bước trước.

Screenshot_108 - cài đặt Discourse trên CentOS 7

Click vào liên kết trong email để xác thực email của bạn

Screenshot_109 - cài đặt Discourse trên CentOS 7

Screenshot_110

Tiếp theo các bạn tiế hành thiết lập theo hướng dẫn tại từng bước

Screenshot_111 - cài đặt Discourse trên CentOS 7

Sau khi hoàn tất các bước cài đặt các bạn sẽ được chuyển tới Homepage

Screenshot_113 - cài đặt Discourse trên CentOS 7

Các bạn có thể truy cập Admin Dashboard bằng cách nhấn vào biểu tượng Menu và chọn Quản trị

Screenshot_114 - cài đặt Discourse trên CentOS 7

3. Kích hoạt user admin khi không nhận được Email kích hoạt

Trong trường hợp không nhận được email xác thực các bạn có thể tiến hành xác thực tài khoản admin theo cách thủ công. Đầu tiên hãy di chuyển tới thư mục /var/discourse

cd /var/discourse

Sau đó hãy chạy lệnh sau

./launcher enter app

Các bạn đợi vài giây sau đó chạy lệnh sau

rails c

Tiếp theo chạy lệnh

u = User.last

Nhấn Enter khi có thông báo Press enter to continue

Screenshot_116

Cuối cùng các bạn chạy lần lượt 3 lệnh sau

u.admin = true
u.activate
u.save

Screenshot_115 - cài đặt Discourse trên CentOS 7

Bấm Ctrl + D 2 lần để thoát khỏi Jail

4. Tài liệu tham khảo

5. Kết luận

Qua bài viết này HOSTVN đã hướng dẫn các bạn cài đặt và cấu hình Discourse với Nginx trên CentOS 7 trên Nginx. Nếu có bất kỳ ý kiến đóng góp nào các bạn có thể để lại bình luận ở bên dưới. Ngoài ra các bạn có thể muốn xem thêm Hướng dẫn cài đặt Nextcloud trên CentOS 7.

email-business-leaderboard-blog-v3.png
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments