Cách cài đặt Discourse Forum với Nginx và Free Let's Encrypt SSL trên Debian 11

theanh

Administrator
Nhân viên
Discourse là một nền tảng thảo luận cộng đồng mã nguồn mở được xây dựng bằng ngôn ngữ Ruby. Nó được thiết kế để hoạt động như một diễn đàn, phần mềm trò chuyện hoặc danh sách gửi thư. Nó tích hợp dễ dàng với các nền tảng khác và chức năng của nó có thể được mở rộng bằng các plugin.

Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt Discourse Forum với máy chủ Nginx trên máy chủ chạy Debian 11.

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


  • Một máy chủ chạy Debian 11 với tối thiểu 1GB RAM và 1 Core CPU. Thiết lập Discourse sẽ tự động tạo một phân vùng hoán đổi trên các hệ thống có RAM 1GB trở xuống. Do đó, bạn nên cài đặt nó trên hệ thống có ít nhất 2GB RAM.

  • Người dùng không phải root có quyền sudo.

  • Tên miền (discourse.example.com) trỏ đến máy chủ.

  • Mọi thứ đều được cập nhật.
Mã:
$ sudo apt update && sudo apt upgrade
[*]
Một số gói mà hệ thống của bạn cần.
Mã:
$ sudo apt install nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring -y
Một số gói này có thể đã được cài đặt trên hệ thống của bạn.

Bước 1 - Cấu hình Tường lửa​

Bước đầu tiên là cấu hình tường lửa. Debian đi kèm với ufw (Tường lửa đơn giản).

Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo ufw status
Bạn sẽ nhận được kết quả sau.
Mã:
Trạng thái: không hoạt động
Cho phép cổng SSH để tường lửa không làm gián đoạn kết nối hiện tại khi bật nó.
Mã:
$ sudo ufw allow OpenSSH
Cũng cho phép các cổng HTTP và HTTPS.
Mã:
$ sudo ufw allow 80/tcp$ sudo ufw allow 443/tcp
Bật Tường lửa
Mã:
$ sudo ufw enableLệnh có thể làm gián đoạn các kết nối ssh hiện có. Tiến hành thao tác (y|n)? yTường lửa đang hoạt động và được bật khi khởi động hệ thống
Kiểm tra lại trạng thái của tường lửa.
Mã:
$ sudo ufw status
Bạn sẽ thấy đầu ra tương tự.
Mã:
Trạng thái: đang hoạt độngĐến Hành động Từ-- ------ ----OpenSSH ALLOW Anywhere80/tcp ALLOW Anywhere443/tcp ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)80/tcp (v6) ALLOW Anywhere (v6)443/tcp (v6) ALLOW Anywhere (v6)

Bước 2 - Cài đặt Git​

Cài đặt Git bằng Appstream mặc định.
Mã:
$ sudo dnf install git
Xác nhận cài đặt.
Mã:
$ git --versiongit version 2.30.2
Chạy các lệnh sau để cấu hình cài đặt Git.
Mã:
$ git config --global user.name "Tên của bạn"$ git config --global user.email "[emailprotected]"

Bước 3 - Cài đặt Docker​

Để cài đặt phiên bản Docker mới nhất, hãy thêm khóa GPG chính thức của Docker.
Mã:
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Cài đặt kho lưu trữ Docker chính thức.
Mã:
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Cập nhật kho lưu trữ hệ thống Debian.
Mã:
$ sudo apt update
Cài đặt phiên bản Docker mới nhất.
Mã:
$ sudo apt install docker-ce docker-ce-cli containerd.io
Xác minh rằng Docker đang chạy.
Mã:
$ sudo systemctl status docker? docker.service - Docker Application Container Engine Đã tải: đã tải (/lib/systemd/system/docker.service; đã bật; cài đặt trước của nhà cung cấp: đã bật) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ bảy 2022-02-05 13:32:54 UTC; 1 giờ trướcĐược kích hoạt bởi: ? docker.socket Tài liệu: https://docs.docker.com PID chính: 5818 (dockerd) Nhiệm vụ: 26 Bộ nhớ: 1,4G CPU: 5 phút 34,561 giây CGroup: /system.slice/docker.service ?? 5818 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ??12162 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.2 -contai> ??12169 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8080 -container-ip 172.17.0.2 -container-p>
Theo mặc định, Docker yêu cầu quyền root. Nếu bạn muốn tránh sử dụng sudo mỗi khi chạy lệnh docker, hãy thêm tên người dùng của bạn vào nhóm docker.
Mã:
$ sudo usermod -aG docker $(whoami)
Để bật thay đổi này, bạn sẽ cần đăng xuất khỏi máy chủ và đăng nhập lại với cùng một người dùng.

Bước 4 - Tải xuống Discourse​

Tạo thư mục gốc cho Discourse.
Mã:
$ sudo mkdir /var/discourse
Sao chép kho lưu trữ Github chính thức của Discourse Docker.
Mã:
$ sudo git clone https://github.com/discourse/discourse_docker.git /var/discourse

Bước 5 - Cấu hình Discourse​

Tạo tệp cấu hình app.yml bằng cách sao chép tệp standalone.yml mẫu.
Mã:
$ sudo cp samples/standalone.yml containers/app.yml
Mở app.yml để chỉnh sửa.
Mã:
$ sudo nano containers/app.yml

Đặt tên miền​

Đặt biến DISCOURSE_HOSTNAME thành tên miền bạn đã chọn cho diễn đàn của mình. Nếu bạn không có tên miền, bạn có thể sử dụng địa chỉ IP tại đây.
Mã:
DISCOURSE_HOSTNAME: 'discourse.example.com'

Cấu hình các cổng Exposed​

Thay đổi dòng "80:80 thành "8080:80". Thao tác này sẽ thay đổi cổng HTTP bên ngoài cho Discourse thành 8080 vì chúng ta sẽ sử dụng Nginx ở cổng 80. Bình luận dòng "443:443" vì chúng ta sẽ cài đặt SSL bên ngoài.
Mã:
expose: - "8080:80" # http #- "443:443" # https

Cấu hình cài đặt SMTP​

Điền các biến sau tùy thuộc vào dịch vụ email giao dịch bạn đang sử dụng. Đặt email cho tài khoản quản trị viên của bạn bằng biến DISCOURSE_DEVELOPER_EMAILS. Bước này là bắt buộc, nếu không, diễn đàn của bạn sẽ không được khởi động.
Mã:
..DISCOURSE_DEVELOPER_EMAILS: '[emailprotected]'..DISCOURSE_SMTP_ADDRESS: smtp.example.comDISCOURSE_SMTP_PORT: 587DISCOURSE_SMTP_USER_NAME: [emailprotected]DISCOURSE_SMTP_PASSWORD: your_smtp_password#DISCOURSE_SMTP_ENABLE_START_TLS: true # (tùy chọn, mặc định là true)#DISCOURSE_SMTP_DOMAIN: discourse.example.com # (yêu cầu của một số nhà cung cấp)DISCOURSE_NOTIFICATION_EMAIL: [emailprotected] # (địa chỉ để gửi thông báo từ)

Cài đặt bộ nhớ (Tùy chọn)​

Nếu máy chủ của bạn có RAM thấp, bạn có thể định cấu hình các biến sau cho phù hợp để giảm dung lượng bộ nhớ của Discourse.
Mã:
db_shared_buffers: '128MB'UNICORN_WORKERS: 2
Biến db_shared_buffers thường được đặt thành 25% bộ nhớ khả dụng.

Cài đặt GeoLite2 (Tùy chọn)​

Nếu bạn muốn có tính năng tra cứu IP trên Discourse, hãy đăng ký tài khoản Maxmind Geolite2 miễn phí và nhận khóa cấp phép. Dán khóa cấp phép đó làm giá trị cho biến sau.
Mã:
DISCOURSE_MAXMIND_LICENSE_KEY: your_maxmind_license_key
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Bước 6 - Cài đặt Discourse​

Chạy lệnh sau để khởi động vùng chứa Discourse của bạn.
Mã:
$ sudo ./launcher bootstrap app
Khởi động ứng dụng Discourse.
Mã:
$ sudo ./launcher start app
Bạn có thể truy cập diễn đàn bằng cách truy cập các URL http://yourserver_IP:8080 hoặc http://discourse.example.com:8080 trong trình duyệt của bạn. Bạn sẽ nhận được màn hình sau.



Nhấp vào nút Đăng ký để tiếp tục. ID email được đặt trong tệp app.yml sẽ được điền sẵn cho bạn.



Nhấp vào nút Đăng ký để đăng ký tài khoản quản trị viên. Bạn sẽ tiếp tục đến màn hình xác nhận email.



Nếu cài đặt SMTP của bạn chính xác, bạn sẽ nhận được email để kích hoạt tài khoản. Nhấp vào liên kết từ email của bạn để hoàn tất việc thiết lập tài khoản.



Nhấp vào nút Kích hoạt để hoàn tất quá trình cài đặt.



Bạn sẽ đến màn hình Trình hướng dẫn thiết lập của Discourse. Bạn có thể bỏ qua để tiếp tục trực tiếp đến diễn đàn hoặc thực hiện toàn bộ trình hướng dẫn.



Diễn đàn Discourse của bạn đã sẵn sàng. Bước tiếp theo là cài đặt SSL và đặt diễn đàn sau máy chủ Nginx.


Bước 7 - Cài đặt SSL​

Để cài đặt chứng chỉ SSL bằng Let's Encrypt, chúng ta cần cài đặt công cụ Certbot.

Chúng ta sẽ sử dụng trình cài đặt gói Snapd cho việc đó. Vì hầu hết các máy chủ Debian không đi kèm với công cụ này, hãy cài đặt trình cài đặt Snapd.
Mã:
$ sudo apt install snapd
Đảm bảo rằng phiên bản Snapd của bạn đã được cập nhật.
Mã:
$ sudo snap install core && sudo snap refresh core
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Sử dụng lệnh sau để đảm bảo lệnh Certbot có thể chạy bằng cách tạo liên kết tượng trưng đến thư mục /usr/bin.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Xác minh cài đặt.
Mã:
$ certbot --versioncertbot 1.22.0
Tạo chứng chỉ SSL.
Mã:
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d discourse.example.com
Lệnh trên sẽ tải xuống chứng chỉ vào /etc/letsencrypt/live/discourse.example.com thư mục trên máy chủ của bạn.

Tạo chứng chỉ nhóm Diffie-Hellman.
Mã:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Tạo thư mục webroot thử thách để tự động gia hạn Let's Encrypt.
Mã:
$ sudo mkdir -p /var/lib/letsencrypt
Tạo Cron Job để gia hạn SSL. Nó sẽ chạy hàng ngày để kiểm tra chứng chỉ và gia hạn nếu cần. Để thực hiện việc đó, trước tiên, hãy tạo tệp /etc/cron.daily/certbot-renew và mở tệp đó để chỉnh sửa.
Mã:
$ sudo nano /etc/cron.daily/certbot-renew
Dán mã sau.
Mã:
#!/bin/shcertbot renew --cert-name discourse.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Thay đổi quyền trên tệp tác vụ để làm cho tệp đó có thể thực thi được.
Mã:
$ sudo chmod +x /etc/cron.daily/certbot-renew

Bước 8 - Cài đặt và cấu hình Nginx​

Debian đi kèm với phiên bản Nginx cũ hơn. Bạn cần tải xuống kho lưu trữ Nginx chính thức để cài đặt phiên bản mới nhất.

Nhập khóa ký Nginx chính thức.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/debian `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
Cập nhật kho lưu trữ Debian.
Mã:
$ sudo apt update
Cài đặt Nginx.
Mã:
$ sudo apt install nginx
Xác minh cài đặt. Đảm bảo bạn sử dụng sudo mỗi khi chạy lệnh Nginx trên Debian. Nếu không, nó sẽ không hoạt động.
Mã:
$ sudo nginx -vphiên bản nginx: nginx/1.20.2
Tạo và mở tệp /etc/nginx/conf.d/discourse.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/discourse.conf
Dán mã sau vào đó.
Mã:
# enforce HTTPSserver { listen 80; listen [::]:80; server_name discourse.example.com; return 301 https://$host$request_uri;}server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name discourse.example.com; access_log /var/log/nginx/discourse.access.log; error_log /var/log/nginx/discourse.error.log; # Chứng chỉ SSL ssl /etc/letsencrypt/live/discourse.example.com/fullchain.pem; khóa chứng chỉ ssl /etc/letsencrypt/live/discourse.example.com/privkey.pem; chứng chỉ ssl đáng tin cậy /etc/letsencrypt/live/discourse.example.com/chain.pem; thời gian chờ ssl_session 5 phút; bộ nhớ đệm ssl_session được chia sẻ: MozSSL: 10 phút; ssl_session_tickets tắt; giao thức ssl TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers bật; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling bật; ssl_stapling_verify bật; ssl_dhparam /etc/ssl/certs/dhparam.pem; trình giải quyết 8.8.8.8; kích thước_thân_thể_tối_đa của máy_khách 100m; vị trí / { proxy_pass http://discourse.example.com:8080/; proxy_set_header Máy chủ $http_host; proxy_http_version 1.1; proxy_set_header Giao thức chuyển tiếp X $scheme; proxy_set_header Giao thức chuyển tiếp X $proxy_add_x_forwarded_for; proxy_set_header IP thực X $remote_addr; }}
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc sau khi hoàn tất.

Mở tệp /etc/nginx/nginx.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Thêm dòng sau vào trước dòng include /etc/nginx/conf.d/*.conf;.
Mã:
server_names_hash_bucket_size 64;
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Xác minh cú pháp tệp cấu hình Nginx.
Mã:
$ sudo nginx -tnginx: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: tệp cấu hình /etc/nginx/nginx.conf đã kiểm tra thành công
Khởi động dịch vụ Nginx để bật cấu hình mới.
Mã:
$ sudo systemctl start nginx

Bước 9 - Lệnh Discourse​

Kích hoạt Discourse Administrator từ dòng lệnh​

Nếu bạn không nhận được email kích hoạt, bạn có thể kích hoạt tài khoản quản trị viên từ dòng lệnh.

Chuyển đổi vào thư mục Discourse.
Mã:
$ cd /var/discourse
Vào Shell vùng chứa Discourse.
Mã:
$ sudo ./launcher enter app
Nhập lệnh rails c để truy cập dấu nhắc lệnh Rails.
Mã:
root@discourse-app:/var/www/discourse# rails c
Bạn sẽ thấy dấu nhắc sau.
Mã:
[1] pry(main)>
Nhập lệnh để định vị tài khoản quản trị viên.
Mã:
[1] pry(main)> User.find_by_email("[emailprotected]")=> # user.approved = true[3] pry(main)> user.save[4] pry(main)> EmailToken.confirm(user.email_tokens.first.token)
Nhập exit hai lần để quay lại shell. Tài khoản quản trị viên của bạn đã được kích hoạt và sẵn sàng sử dụng.

Nâng cấp Discourse​

Để nâng cấp diễn đàn, bạn có thể sử dụng một trong hai cách. Cách đầu tiên là nâng cấp thông qua bảng điều khiển quản trị viên. Phương pháp thứ hai là sử dụng dòng lệnh.

Chuyển đến thư mục Discourse.
Mã:
$ cd /var/discourse
Cập nhật cài đặt Discourse bằng cách lấy các tệp mới nhất từ Github.
Mã:
$ git pull
Xây dựng lại Discourse.
Mã:
$ sudo ./launcher rebuild app
Bạn cần xây dựng lại Discourse mỗi khi thực hiện bất kỳ thay đổi nào trong tệp app.yml. Sau khi thực hiện các thay đổi, hãy chạy lệnh trên. Nó phá hủy container cũ, khởi động một container mới và khởi động nó.

Dừng Discourse​

Mã:
$ sudo ./launcher stop

Xem Nhật ký Discourse​

Mã:
$ sudo ./launcher logs

Kết luận​

Bài hướng dẫn này kết thúc. Bạn đã cài đặt diễn đàn Discourse bằng Docker đằng sau máy chủ web Nginx trên máy chủ Debian 11. Nếu bạn có bất kỳ câu hỏi nào, hãy đăng chúng trong phần bình luận bên dưới.
 
Back
Bên trên