Hướng dẫn tạo forum bằng Discourse trên Centos 7

UPDATE phần cấu hình SSL tự động của Let’s Encrypt, lần trước mình làm vội quá mà quên mất không để ý Discourse có tích hợp SSL Let’s Encrypt. Các bạn theo dõi tiếp phần Cấu hình SSL nhé. :).
Discourse là 1 mã nguồn mở được xây dựng để giúp người sử dụng có thể build một forum một cách đơn giản nhất. Discourse được thiết kế với các thành phần sau:

  • Ruby on Rails – Ngôn ngữ lập trình Ruby viết ra một framework là Rails
  • Postgres Database – Hệ quản trị cơ sở dữ liệu giống như MSSQL , MySQL , MariaDB , …
  • Redis server cache - Là mã nguồn mở hỗ trợ việc lưu và xử lý cache dữ liệu trên server, tăng tốc truy cập cho người sử dụng cuối.

Bài viết này của mình sẽ hướng dẫn các bạn step by step cài đặt forum Discourse trên một server Centos | version mình sử dụng là Centos 7 – 1801 x 64

Muốn biết Centos của mình version là gì, các bạn dùng command

Cat /etc/centos-releases

image

Chuẩn bị VPS

Đầu tiên dĩ nhiên bạn phải có server . Bạn có thể thuê VPS với cấu hình tối thiểu như bên dưới để cài đặt Discourse nhé.

  • VPS ít nhất là 1 Gb RAM. Nhiều hơn thì càng tốt, hoặc không bạn có thể tạo Swap để hỗ trợ server. Tuy nhiên bạn nên chọn những nhà cung cấp xài SSD nhé. Và nên kiểm tra tốc độ của Hard Disk để đảm bảo là bạn đang share RAM với ổ cứng bằng Swap tốt nhất.
  • Đã cài đặt Centos 7_x64 trên VPS | Các bạn cài bản minimal thôi cho nhẹ nhé. Các bạn có thể download bản minimal theo đường link sau CentOS-7-x86_64-Minimal-1810.iso

Nhà mình thì không có gì ngoài dư dả source nên mình sẽ sử dụng cấu hình như sau: :v

  • 8GB Ram
  • 10 vCPUs – Intel Xeon E2670 2.5 Ghz
  • 20 GB Disk SSD Raid 10

Trỏ Domain và IP mình đã mua

Như bài viết này, mình có có subdomain: forum.sapabc.xyz , mình sẽ thực hiện gắn vào IP của mình

Mình mua domain ở pavietnam > logon vào access.pavietnam.vn > thực hiện trỏ IP về subdomain: forum.sapabc.xyz
image
image

Update VPS

Sau khi cài đặt VPS, các bạn thực hiện Logon vào hệ thống bằng phần mềm Putty hoặc bất kỳ một SSH client nào khác cũng được.

Nếu không logon được, thì bạn cần check lại với nhà cung cấp VPS, xem port có bị chặn bởi firewall hoặc là SSH đã đổi port ?

Thực hiện command sau để Update hệ điều hành

Yum -y update

Tùy vào hardware VPS & network mà có thể nhanh hoặc chậm. Một số bạn không update được vì DNS thì có thể vào /etc/resolv.conf rồi edit nameserver 8.8.8.8 của google cũng được nhé.

Tạo file SWAP (RAM Ảo)

Với VPS <=1 GB RAM, bạn nên set up SWAP, ngược lại nếu VPS đủ mạnh, thì bạn có thể bỏ qua bước này. SWAPFILE nên = physical RAM * 2

Tạo swapfile theo command bên dưới

dd if=/dev/zero of=/swapfile bs=1M count=2048

mkswap /swapfile

chmod 600 /swapfile

Chỉnh file fstab bằng vi, nếu chưa có vi, các bạn install vi vào nhé.

vi /etc/fstab

Thêm vào các dòng sau, bạn đừng quên mở bằng quyền của sudo nhé, sau đó ấn phím I để insert , sau khi thêm xong, bạn ấn phím Escape > ấn tiếp :wq để lưu file

/swapfile swap swap defaults 0 0

Thiết lập quy tắc sử dụng Swap, Swap chỉ nên được sử dụng khi RAM bị chiếm dụng quá nhiều dẫn đến Low Memory.

sysctl -w vm.swappiness=10

echo vm.swappiness = 10 | tee -a /etc/sysctl.conf

sysctl vm.vfs_cache_pressure=60

echo vm.vfs_cache_pressure = 60 | tee -a /etc/sysctl.conf

Kích hoạt SwapFile

mount -a

swapon -a

Kiếm tra lại swapfile đã thiết lập

swapon -s

Nếu Swapfile đã thiết lập thành công, bạn sẽ nhận được kết quả trả về như bên dưới.

Filename Type Size Used Priority

/swapfile file 2097148 0 -1

Install Docker

Log on vào server thực hiện các command sau để cài đặt Docker cho Centos 7

yum -y install docker

Sau khi đã Install xong Docker, các bạn thực hiện command sau để mở và edit file docker trong sysconfig

Vi /etc/sysconfig/docker

image

Change từ

OPTIONS=’–selinux-enabled --log-driver=journald --signature-verification=false’

Thành

#OPTIONS=’–selinux-enabled --log-driver=journald --signature-verification=false’

Mục đích là Inactive cái đoạn này đi thôi, không có gì cao siêu cả :blush:

Nhấn phím Escape > gõ :wq để save file.

Start docker và kích hoạt Docker

systemctl start docker

systemctl enable docker

kiểm tra trạng thái docker

systemctl status docker

image

Note: Các bạn nhớ chú ý phần Restart Docker , nếu các bạn restart firewalld , bạn cũng phải restart docker luôn nhé. Đối với Centos 7.xx trở lên thì firewalld đã thay cho iptable s mặc định rồi nhé.

Install Discourse

Tạo folder name discourse tại thư mục /var và thực hiện tải discourse về. Việc tải Discourse về mình hướng dẫn bên dưới đc thực hiện bằng Git nên các bạn phải Install Git trước đã nhé.

Install git bằng command

Yum -y install git

Trường hợp không muốn xài Git , các bạn có thể vào link github/discourse > Download về rồi upload vào server bằng WINSCP

Tạo folder

mkdir /var/discourse

Tải discourse về

git clone https://github.com/discourse/discourse_docker.git /var/discourse

image

Mở thư mục vừa clone discourse về.

cd /var/discourse

Copy file template config Discourse vào thư mục containers

cp samples/standalone.yml containers/app.yml

image

Các bạn có thể kiểm tra lại xem đã copy thành công chưa bằng cách vào thư mục containers và gõ ls -la để kiểm tra

Configure Discourse

Mở file app.yml và edit bằng lệnh vi

vi app.yml

Edit lại file app.yml như hình bên dưới , có thể tùy chỉnh thông số theo ý của bạn nhé


Save lại và thoát app.yml.

Khởi động Bootstrap Discourse

Chạy Command bên dưới để khởi động boottrap cho Discourse

Cd /var/discourse

./launcher bootstrap app

Nếu trong quá trình chạy, bạn gặp lỗi version

ERROR: Docker version 1.13.1 not supported, please upgrade to at least 17.03.1, or recommended 17.06.2

Thì bạn thực hiện lần lượt các lệnh sau để update version cho Docker

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

yum install -y yum-utils device-mapper-persistent-data lvm2

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

yum install -y docker-ce

Kiểm tra lại version và trạng thái của docker

systemctl start docker

systemctl enable docker

systemctl status docker

docker --version
image

Sau đó trỏ đến thư mục /var/discourse và chạy lại lệnh ./launcher bootstrap app

image

Pha cà phê ngồi đi bạn, chờ mòn mỏi luôn á :v lòi mắt lòi trĩ có gì lòi đó luôn =]]z

Với cấu hình và mạng vps của mình, thì tầm 20 phút
image

Sau khi hoàn thành Bootstrap thì bạn chạy lệnh bên dưới để start nhé

./launcher start app

Chờ xíu chứ đừng có tắt SSH client nhé. Từ từ thịt bò nó mới nhừ.

image

Mở trình duyệt và cấu hình cơ bản Discourse

Mở trình duyệt lên, gõ dzô domain mà mình đã trỏ về IP nhé. Thành quả nè.

Dĩ nhiên là non-https nhé. HTTPS thì bạn xem tiếp phần bên dưới nhé

image
image

Check gmail và active account nào :smiley:

image

Thành quả đây :blush:

image

Cài đặt SSL và chuyển thành HTTPS

Discourse đã có sẵn phần cấu hình SSL từ Let’s Encrypt cho phép các bạn sử dụng SSL miễn phí. Phần này hoàn toàn tự động, và được config trong file app.yml

Rất đơn giản bạn chỉ cần mở thư mục container có chứa file app.yml

cd /var/discourse/containers

và thực hiện uncomment các đoạn bôi đậm bên dưới

#Uncomment these two lines if you wish to add Lets Encrypt (https)
– “templates/web.ssl.template.yml”
– “templates/web.letsencrypt.ssl.template.yml”

#If you added the Lets Encrypt template, uncomment below to get a free SSL certificate
LETSENCRYPT_ACCOUNT_EMAIL: điền email đăng ký SSL của bạn vào

Sau đó thực hiện quay lại folder trước đó bằng command

cd …

rồi thực hiện lệnh rebuild app để apply cài đặt bạn vừa thay đổi.

./launcher rebuild app

Đợi khoảng 10 phút, sau khi rebuild hoàn tất. Lúc này mở trình duyệt lên và hưởng thụ thành quả nào. Màu xanh thần thánh đã xuất hiện rồi. :slightly_smiling_face:

1 Like

Đọc không hiểu gì luôn :roll_eyes::rofl:

1 Like

Đại hiệp cứ nói quá :v mà nhiều quá, không hiểu thật =]]z

1 Like

Khi e tạo thử e mới hiểu nhé :kissing_heart:

1 Like

Mới đọc đến đây thôi là hết hy vọng ddos rồi. kkkk

1 Like

Đại hiệp tha mạng =.=

2 Likes

Hay quá a, lúc nào e phải thử mới được.


Giúp e với, của em nó không hiện đoạn code này khi cài plugin

Kéo xuống phía dưới thử có ko bạn ?