Cách cài đặt Discourse Forum với Nginx trên CentOS 7

theanh

Administrator
Nhân viên
Discourse là phần mềm mã nguồn mở và miễn phí để tạo cộng đồng diễn đàn Internet và danh sách gửi thư. Phần mềm này đượ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 diễn đàn Discourse đã được nhiều tổ chức sử dụng, bao gồm Codeacademy, Udacity, Twitter Developers, Docker Community Forum, v.v.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn từng bước cách cài đặt và cấu hình Discourse Forum với máy chủ Web Nginx trên máy chủ CentOS 7. Cụ thể, chúng tôi sẽ hướng dẫn bạn cách cài đặt Phần mềm Diễn đàn Discourse, cấu hình Nginx làm proxy ngược cho ứng dụng Discourse và bảo mật phần mềm diễn đàn Discourse bằng SSL miễn phí từ Letsencrypt.

Những việc chúng tôi sẽ làm
  1. Cài đặt Docker trên CentOS 7
  2. Cài đặt và cấu hình Phần mềm Diễn đàn Discourse
  3. Tạo SSL Letsencrypt trên CentOS 7
  4. Cài đặt và cấu hình Nginx làm Proxy ngược cho Discourse
  5. Trình cài đặt web Discourse
  6. Cấu hình bổ sung Discourse
Điều kiện tiên quyết
  • CentOS 7
  • Quyền root
  • Tài khoản SMTP - ví dụ: từ Mailgun, SendGrid hoặc Mailjet

Bước 1 - Cài đặt Docker trên CentOS 7​

Diễn đàn Discourse sẽ được cài đặt trong vùng chứa Docker. Vì vậy, bước đầu tiên chúng ta phải làm là cài đặt Docker trên máy chủ CentOS 7 của mình.

Cài đặt Docker trên CentOS 7 bằng lệnh sau.
Mã:
wget -qO- https://get.docker.com/ | sh
Nếu bạn không có lệnh wget, hãy cài đặt lệnh này từ kho lưu trữ.
Mã:
yum -y install wget
Nếu quá trình cài đặt hoàn tất, hãy khởi động dịch vụ Docker và cho phép dịch vụ này khởi chạy khi khởi động bằng các lệnh systemctl sau.
Mã:
systemctl start docker
systemctl enable docker
Công cụ Docker đã được cài đặt và đang chạy trên máy chủ CentOS 7. Kiểm tra trạng thái dịch vụ bằng lệnh sau.
Mã:
systemctl status docker
Dịch vụ Docker đang hoạt động và đang chạy.


Bước 2 - Cài đặt và cấu hình Phần mềm Diễn đàn Discourse​

Trong bước này, chúng ta sẽ cài đặt và cấu hình phần mềm Discourse. Chúng ta sẽ tải xuống tập lệnh docker-compose của discourse, cấu hình theo nhu cầu và sau đó tạo một vùng chứa Docker mới cho phần mềm diễn đàn discourse.

Trước khi tải xuống discourse, chúng ta cần cài đặt lệnh git vào máy chủ.
Mã:
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/sao chép tập lệnh docker của discourse bằng lệnh git.
Mã:
mkdir -p /var/discourse
git clone https://github.com/discourse/discourse_docker.git /var/discourse
Đi tới thư mục discourse và sao chép một mẫu tập lệnh docker-compose 'standalone.yml' vào thư mục '/var/discourse/containers/' có tên là 'app.yml'.
Mã:
cd /var/discourse
cp samples/standalone.yml containers/app.yml


Bây giờ hãy chỉnh sửa tệp 'app.yml' bằng vim.
Mã:
vim 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. Và đối với hướng dẫn này, chúng ta sẽ sử dụng Nginx cho mục đích này - tất cả các 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 ánh xạ cổng docker. Container Discourse sẽ chỉ có kết nối HTTP và máy chủ sẽ mở cổng mới '2045' và ánh xạ tới cổng container 80.

Bỏ chú thích dòng HTTPS và thay đổi dòng HTTP bằng cổng mới '2045', như hiển thị bên dưới.
Mã:
expose:
 - "2045:80" # http
 # - "443:443" # https
- Cấu hình tên miền Discourse

Nhập tên miền của riêng bạn cho discourse được cài đặt trên dòng 'DISCOURSE_HOSTNAME' như bên dưới.
Mã:
DISCOURSE_HOSTNAME: 'discourse.hakase-labs.co'
Và nhập địa chỉ email của bạn vào dòng 'DISCOURSE_DEVELOPER_EMAIL'.
Mã:
DISCOURSE_DEVELOPER_EMAILS: '[emailprotected]'
- Cấu hình SMTP

Cấu hình SMTP là cấu hình quan trọng nhất đối với Phần mềm Discourse. Đảm bảo bạn có tài khoản SMTP để cài đặt Discourse - bạn có thể mua hoặc dùng thử tài khoản SMTP miễn phí từ Mailgun, Mailjet hoặc SendGrid.

Đối với hướng dẫn này, chúng ta sẽ sử dụng tài khoản SMTP miễn phí từ Mailgun. Đăng ký với Mailgun và cấu hình tên miền của bạn, và đảm bảo bạn nhận được thông tin chi tiết về tài khoản SMTP của mình.

Sau đó bỏ ghi chú cấu hình SMTP và nhập thông tin chi tiết về tài khoản của bạn như bên dưới.
Mã:
DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
 DISCOURSE_SMTP_PORT: 587
 DISCOURSE_SMTP_USER_NAME: [emailprotected]
 DISCOURSE_SMTP_PASSWORD: mypassword
Vậy là xong. Lưu các thay đổi và thoát khỏi trình chỉnh sửa.

Tiếp theo, xây dựng hình ảnh Discourse Docker mới dựa trên cấu hình mẫu app.yml.
Mã:
sudo ./launcher bootstrap app


Nếu mọi thứ đã hoàn tất, hãy bắt đầu/khởi tạo vùng chứa Discourse mới bằng lệnh sau.
Mã:
sudo ./launcher start app


Và vùng chứa Discourse Docker đã hoạt động - hãy kiểm tra bằng lệnh 'docker ps'.
Mã:
docker ps -a
Kiểm tra cổng mở của máy chủ bằng netstat và đảm bảo rằng dịch vụ mới docker-proxy có cổng 2045 có trong danh sách.
Mã:
netstat -plntu


Phần mềm Diễn đàn Discourse đã được cài đặt trong vùng chứa docker trên máy chủ CentOS 7.

Bước 3 - Tạo SSL Letsencrypt trên CentOS 7​

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

Cài đặt công cụ dòng lệnh Letsencrypt bằng lệnh yum theo cách sau.
Mã:
yum -y install letsencrypt
Sau khi cài đặt, hãy thêm dịch vụ HTTP và HTTPS mới vào cấu hình Firewalld.
Mã:
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload


Bây giờ hãy tạo chứng chỉ SSL mới cho diễn đàn Discourse bằng lệnh letsencrypt bên dưới.
Mã:
letsencrypt certonly
Bạn sẽ thấy hai xác minh từ Letsencrypt. Nhập số '1' để khởi tạo máy chủ web tạm thời để xác thực.

Trong phần này, hãy nhập địa chỉ email của bạn để gia hạn thông báo, nhập 'A' để đồng ý với TOS (Điều khoản dịch vụ) của letsencrypt.

Bây giờ hãy nhập tên miền discourse là 'discourse.hakase-labs.co'.



Và khi quá trình hoàn tất, bạn sẽ nhận được kết quả như bên dưới.



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

Bước 4 - Cài đặt và cấu hình Nginx làm Proxy ngược cho Discourse​

Trong hướng dẫn này, chúng ta sẽ sử dụng máy chủ web Nginx làm proxy ngược cho Discourse đang chạy dưới vùng chứa Docker. Máy chủ web Nginx sẽ chạy dưới cổng HTTP và HTTPS, và tất cả các yêu cầu của máy khách sẽ được Nginx xử lý.

Trước khi cài đặt máy chủ web Nginx, chúng ta cần cài đặt kho lưu trữ EPEL trên hệ thống.
Mã:
yum -y install epel-release
Bây giờ hãy cài đặt nginx từ kho lưu trữ EPEL bằng lệnh yum sau.
Mã:
yum -y install nginx
Sau khi cài đặt hoàn tất, hãy vào thư mục cấu hình nginx '/etc/nginx'.
Mã:
cd /etc/nginx/
Và tạo một cấu hình SSL bổ sung mới 'ssl.conf' bằng vim.
Mã:
vim ssl.conf
Dán cấu hình SSL sau vào đó.
Mã:
ssl_session_timeout 1d;
 ssl_session_cache đã chia sẻ: SSL: 50 phút;
 ssl_session_tickets tắt;
 
 ssl_protocols TLSv1.2;
 ssl_ciphers EECDH+AESGCM: EECDH+AES;
 ssl_ecdh_curve secp384r1;
 ssl_prefer_server_ciphers bật;
 
 ssl_stapling bật;
 ssl_stapling_verify bật;
 
 add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
 add_header X-Frame-Options DENY;
 add_header X-Content-Type-Options nosniff;
Lưu các thay đổi và thoát khỏi trình soạn thảo.

Tiếp theo, tạo tệp máy chủ ảo nginx mới 'discourse.conf' cho Discourse.
Mã:
vim conf.d/discourse.conf
Dán cấu hình sau vào đó.
Mã:
máy chủ {
 lắng nghe 80; lắng nghe [::]:80;
 tên máy chủ discourse.hakase-labs.co;
 
 # Tự động chuyển hướng HTTP sang HTTPS Nginx
 trả về 301 https://$host$request_uri;
 }
 
 máy chủ {
 lắng nghe 443 ssl http2; 
 server_name discourse.hakase-labs.co;
 
 # Cấu hình SSL
 ssl_certificate /etc/letsencrypt/live/discourse.hakase-labs.co/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/discourse.hakase-labs.co/privkey.pem;
 include /etc/nginx/ssl.conf;
 
 # Cấu hình Proxy ngược
 location / {
 proxy_pass http://discourse.hakase-labs.co: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.hakase-labs.co:2045/ https://discourse.hakase-labs.co;
 }
 }
Lưu và thoát.

Bây giờ hãy kiểm tra cấu hình nginx và đảm bảo không có lỗi. Sau đó khởi động lại dịch vụ Nginx.
Mã:
nginx -t
systemctl restart nginx


Quá trình cài đặt và cấu hình Nginx như một proxy ngược cho vùng chứa Discourse đã hoàn tất.

Bước 5 - Trình cài đặt web Discourse​

Mở trình duyệt web của bạn và truy cập URL discourse, URL của tôi là:


Và bạn sẽ được chuyển hướng đến kết nối HTTPS.



Nhấp vào nút 'Đăng ký'.

Bây giờ chúng ta cần tạo một tài khoản 'Quản trị viên' mới.



Nhập tên người dùng và mật khẩu quản trị viên của bạn, sau đó nhấp vào 'Đăng ký'.

Và bạn sẽ nhận được trang xác nhận email. Kiểm tra hộp thư đến email của bạn và đảm bảo bạn nhận được cấu hình email từ diễn đàn Discourse như bên dưới.



Nhấp vào 'Liên kết'.

Và bạn sẽ nhận được trang 'Discourse Welcome'.



Nhấp vào nút 'nhấp vào đây để kích hoạt tài khoản của bạn'. Và bây giờ bạn sẽ đến trang sau.



Nhấp vào nút 'Có thể sau'.

Diễn đàn Discourse đã được cài đặt và chúng ta sẽ có trang chủ mặc định như hiển thị bên dưới.



Bạn có thể vào 'Bảng điều khiển quản trị' và sẽ thấy Bảng điều khiển quản trị Discourse.



Phần mềm Diễn đàn Discourse đã được cài đặt với Nginx làm proxy ngược trên máy chủ CentOS 7.

Bước 6 - Cấu hình bổ sung Discourse​

Trong quá trình cài đặt Discourse, một số người nói rằng họ không nhận được email xác nhận để kích hoạt người dùng quản trị.

Đối với sự cố này, hãy đảm bảo rằng bạn có đúng tài khoản SMTP trên configuration app.yml. Hoặc bạn có thể kích hoạt tài khoản quản trị viên theo cách thủ công từ máy chủ của mình.

Để kích hoạt tài khoản quản trị viên theo cách thủ công, hãy vào thư mục '/var/discourse'.
Mã:
cd /var/discourse
Bây giờ hãy truy cập vào vùng chứa discourse bằng lệnh sau.
Mã:
./launcher enter app
Và kích hoạt người dùng quản trị viên đầu tiên bằng lệnh rails như hiển thị bên dưới.
Mã:
rails c
u = User.last
u.admin = true
u.activate
u.save
Bây giờ bạn có thể đăng nhập vào diễn đàn Discourse bằng tên người dùng và mật khẩu của mình.

Tham khảo​

 
Back
Bên trên