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ư. Bài viết này sẽ hướng dẫn cài đặt Discourse trên CentOS 7.
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 VINASTAR 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
Đầ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
- 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
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
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, VINASTAR 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.
- 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
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
Nhập tên miền của bạn vào dòng DISCOURSE_HOSTNAME.
Đừ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.
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 VINASTAR sẽ sử dụng SMTP miễn phí của Gmail. Loại bỏ dấu # khỏi các dòng DISCOURSE_SMTP_PORT và DISCOURSE_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)
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
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
Để 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
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
2.4. Bước 4: Cài đặt SSL Let’s Encrypt
Đối với hướng dẫn này, VINASTAR 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, VINASTAR 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
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
Tiếp theo hãy nhập vào Email của các bạn và nhấn Enter
Nhập A và nhấn Enter để đồng ý với quy định của Let’s Encrypt
Bước tiếp theo nhập N và nhấn Enter
Cuối cùng hãy nhập vào domain sử dụng Discourse của các bạn
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
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
Đầ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
- 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;
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.Vinastar.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name discourse.Vinastar.com; ssl_certificate /etc/letsencrypt/live/discourse.Vinastar.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/discourse.Vinastar.com/privkey.pem; include /etc/nginx/ssl.conf; # Reverse Proxy Configuration location / { proxy_pass http://discourse.Vinastar.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.Vinastar.com:2045/ https://discourse.Vinastar.com; } }
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
Điền đầy đủ các thông tin và bấm Register
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.
Click vào liên kết trong email để xác thực email của bạn
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
Sau khi hoàn tất các bước cài đặt các bạn sẽ được chuyển tới Homepage
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ị
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
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
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 VINASTAR đã 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.