Cách cài đặt NodeBB Forum trên Ubuntu 22.04

theanh

Administrator
Nhân viên
NodeBB là phần mềm diễn đàn hiện đại được hỗ trợ bởi nền tảng Node.js. Nó sử dụng cơ sở dữ liệu MongoDB, PostgreSQL hoặc Redis để lưu trữ dữ liệu. Nó sử dụng web socket để thông báo theo thời gian thực và tương tác tức thời. Nó có các tính năng hiện đại như tích hợp mạng xã hội, hỗ trợ plugin, khả năng phản hồi trên thiết bị di động và API đọc/ghi REST đầy đủ.

NodeBB có sẵn dưới dạng cả dự án tự lưu trữ nguồn mở và dịch vụ đám mây. Trong hướng dẫn này, bạn sẽ tìm hiểu cách cài đặt diễn đàn NodeBB bằng Nginx trên máy chủ Ubuntu 22.04. Ubuntu 22.04 không hỗ trợ MongoDB chính thức; do đó, chúng tôi sẽ sử dụng PostgreSQL để lưu trữ dữ liệu.

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


  • Máy chủ chạy Ubuntu 22.04 với tối thiểu 1GB RAM.

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

  • Tường lửa đơn giản (UFW) được bật và đang chạy.

  • Tên miền đủ điều kiện (FQDN) trỏ đến máy chủ như, forum.example.com.

  • Mọi thứ đều đã cập nhật.
Mã:
$ sudo apt update && sudo apt upgrade

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

Trước khi cài đặt bất kỳ gói nào, bước đầu tiên là cấu hình tường lửa để cho phép kết nối HTTP và HTTPS.

Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo ufw status
Bạn sẽ thấy nội dung tương tự như sau đây.
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Cho phép các cổng HTTP và HTTPs.
Mã:
$ sudo ufw allow http
$ sudo ufw allow https
Kiểm tra lại trạng thái để xác nhận.
Mã:
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)

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

Bước đầu tiên trong quá trình cài đặt PostgreSQL là thêm GPG của nó key.
Mã:
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null
Thêm kho lưu trữ APT vào danh sách nguồn của bạn.
Mã:
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Cập nhật hệ thống kho lưu trữ.
Mã:
$ sudo apt update
Bây giờ, bạn có thể cài đặt PostgreSQL.
Mã:
$ sudo apt install postgresql postgresql-contrib
Kiểm tra trạng thái của PostgreSQL dịch vụ.
Mã:
$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active: active (exited) since Sat 2022-09-10 06:25:11 UTC; 13s ago Process: 12083 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 12083 (code=exited, status=0/SUCCESS) CPU: 1ms
Sep 10 06:25:11 nodebb systemd[1]: Starting PostgreSQL RDBMS...
Sep 10 06:25:11 nodebb systemd[1]: Finished PostgreSQL RDBMS.

Bước 3 - Cấu hình PostgreSQL​

Chúng ta cần đặt mật khẩu cho người dùng quản trị mặc định của Postgres postgres. Đầu tiên, hãy đăng nhập vào Postgres Shell.
Mã:
$ sudo -u postgres psql
Nhập lệnh sau để thay đổi mật khẩu.
Mã:
postgres=# \password postgres
Bạn sẽ được nhắc nhập mật khẩu mới mật khẩu.
Mã:
Enter new password for user "postgres":
Enter it again:
Tạo người dùng mới cho NodeBB.
Mã:
postgres=# CREATE ROLE nbbuser WITH LOGIN ENCRYPTED PASSWORD 'YourNodeBBPassword';
Tạo cơ sở dữ liệu mới cho NodeBB.
Mã:
postgres=# CREATE DATABASE nodebbdb OWNER nbbuser;


Nhập \q để thoát khỏi shell.
Mã:
postgres=# \q

Bước 4 - Cài đặt Node.js​

Vì diễn đàn Nodebb được viết bằng khuôn khổ Node.js, chúng ta cần cài đặt nó để diễn đàn hoạt động.

Phát hành các lệnh sau để cài đặt phiên bản LTS (v16.x) của Nodejs.
Mã:
$ curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
$ sudo apt install nodejs
Kiểm tra cài đặt Node.js và NPM.
Mã:
$ node -v
v16.17.0
$ npm -v
8.15.0

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

Trước khi tiến hành cài đặt NodeBB, chúng ta cần cài đặt Git. Chạy lệnh sau để cài đặt Git.
Mã:
$ sudo apt install git
Chạy các lệnh sau để thực hiện cấu hình ban đầu của Git.
Mã:
$ git config --global user.name "Your Name"
$ git config --global user.email "[emailprotected]"

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

Không nên chạy NodeBB với tư cách là người dùng root. Tạo người dùng hệ thống không có đặc quyền mà không cần mật khẩu.
Mã:
$ sudo adduser nodebb --disabled-password
Bỏ qua tất cả các tùy chọn khác.

Tạo thư mục nơi diễn đàn NodeBB của bạn sẽ tồn tại.
Mã:
$ sudo mkdir /var/www/html/nodebb -p
Thay đổi quyền sở hữu của thư mục thành quyền sở hữu mới được tạo người dùng.
Mã:
$ sudo chown -R nodebb:nodebb /var/www/html/nodebb
Đăng nhập vào người dùng mới tạo.
Mã:
$ sudo su - nodebb
Chuyển sang cài đặt NodeBB thư mục.
Mã:
$ cd /var/www/html/nodebb
Để cài đặt NodeBB, trước tiên, chúng ta cần sao chép kho lưu trữ GitHub của nó.

Sao chép NodeBB vào thư mục /var/www/nodebb. Dấu chấm ở cuối lệnh tham chiếu đến thư mục hiện tại.
Mã:
$ git clone -b v2.x https://github.com/NodeBB/NodeBB.git .
Ở đây chúng tôi đã sao chép nhánh v2.x của NodeBB, nơi chứa phiên bản ổn định mới nhất của NodeBB. Bạn có thể tìm thấy nhánh ổn định mới nhất từ trang Các nhánh mới nhất của NodeBB.

NodeBB đi kèm với một tiện ích dòng lệnh. Sử dụng lệnh sau để cài đặt NodeBB.
Mã:
$ ./nodebb setup
Bạn có thể nhấn enter để chọn giá trị mặc định.
Mã:
2022-09-10T10:10:27.957Z [2633] - info: NodeBB Setup Triggered via Command Line
Welcome to NodeBB v2.5.2!
This looks like a new installation, so you'll have to answer a few questions about your environment before we can proceed.
Press enter to accept the default setting (shown in brackets).
URL used to access this NodeBB (http://localhost:4567) https://forum.example.com
Please enter a NodeBB secret (44fd62bc-5047-4414-a4ca-83105740b624)
Would you like to submit anonymous plugin usage to nbbpm? (yes) no
Which database to use (mongo) postgres
2022-09-10T10:10:43.237Z [2633] - info:
Now configuring postgres database:
Host IP or address of your PostgreSQL instance (127.0.0.1)
Host port of your PostgreSQL instance (5432)
PostgreSQL username nbbuser
Password of your PostgreSQL database
PostgreSQL database name (nodebb) nodebbdb
Enable SSL for PostgreSQL database access (false)
........
Đối với giá trị của URL được sử dụng để truy cập NodeBB này, hãy chọn URL cuối cùng mà bạn muốn truy cập diễn đàn. Nếu bạn sẽ truy cập diễn đàn thông qua IP máy chủ của mình, hãy nhập IP đó hoặc nhập tên miền đầy đủ của diễn đàn. Ở đây chúng ta sẽ nhập https://forum.example.com. Chọn no làm câu trả lời cho câu hỏi về việc gửi sử dụng plugin ẩn danh. Nhập postgres làm loại cơ sở dữ liệu.

Sau đó, chọn IP máy chủ và cổng mặc định bằng cách nhấn enter và nhập tên người dùng PostgreSQL của bạn, tức là khi bạn nhập nbbuser và mật khẩu mà bạn đã chọn trước đó cho tên người dùng đó khi cấu hình MongoDB. Bạn nên chọn cơ sở dữ liệu nodebbdb.

Bạn cũng sẽ được yêu cầu tạo người dùng quản trị viên và thông tin chi tiết của người dùng đó.
Mã:
.....
2022-09-10T10:11:14.121Z [2633] - warn: No administrators have been detected, running initial user setup
Administrator username navjot
Administrator email address [emailprotected]
Password
Confirm Password
.....
....
2022-09-10T10:14:28.160Z [2633] - info: [build] Asset compilation successful. Completed in 118.777sec. =================================================================================================================================================================
NodeBB Setup Completed. Run "./nodebb start" to manually start your NodeBB server.
Sau khi thiết lập hoàn tất, hãy chạy lệnh sau để khởi động NodeBB.
Mã:
$ ./nodebb start
Starting NodeBB "./nodebb stop" to stop the NodeBB server "./nodebb log" to view server output "./nodebb help" for more commands
Thoát khỏi NodeBB user.
Mã:
$ exit

Bước 7 - Chạy NodeBB dưới dạng Dịch vụ hệ thống​

Dịch vụ NodeBB sẽ không chạy sau khi khởi động lại hệ thống. Để tránh phải khởi động NodeBB mỗi lần, chúng ta cần cài đặt nó dưới dạng Dịch vụ hệ thống.

Trước tiên, hãy dừng dịch vụ NodeBB. Chuyển đến thư mục NodeBB rồi chạy lệnh trực tiếp bằng lệnh sudo -u.
Mã:
$ cd /var/www/html/nodebb
$ sudo -u nodebb ./nodebb stop
Chạy lệnh sau để tạo và chỉnh sửa tệp cấu hình đơn vị systemd nodebb.service.
Mã:
$ sudo nano /etc/systemd/system/nodebb.service
Dán mã sau vào biên tập viên.
Mã:
[Unit]
Description=NodeBB
Documentation=https://docs.nodebb.org
After=system.slice multi-user.target postgresql.service
[Service]
Type=simple
User=nodebb
StandardError=syslog
SyslogIdentifier=nodebb
Environment=NODE_ENV=production
WorkingDirectory=/var/www/html/nodebb
ExecStart=/usr/bin/env node loader.js --no-silent --no-daemon
Restart=always
[Install]
WantedBy=multi-user.target
Ở đây chúng tôi đã chọn tên người dùng là nodebb mà chúng tôi đã tạo ở Bước 6 và đường dẫn chúng tôi đã chọn để cài đặt NodeBB trong đó.

Bật NodeBB dịch vụ.
Mã:
$ sudo systemctl enable nodebb
Khởi động dịch vụ NodeBB.
Mã:
$ sudo systemctl start nodebb
Kiểm tra trạng thái của dịch vụ.
Mã:
$ sudo systemctl status nodebb
? nodebb.service - NodeBB Loaded: loaded (/etc/systemd/system/nodebb.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2022-09-11 21:41:07 UTC; 2s ago Docs: https://docs.nodebb.org Main PID: 26844 (node) Tasks: 18 (limit: 2237) Memory: 94.1M CPU: 2.114s CGroup: /system.slice/nodebb.service ??26844 node loader.js --no-silent --no-daemon ??26855 /usr/bin/node /var/www/html/nodebb/app.js
Sep 11 21:41:07 forum systemd[1]: Started NodeBB.
Sep 11 21:41:07 forum nodebb[26844]: NodeBB v2.5.2 Copyright (C) 2013-2022 NodeBB Inc.
Sep 11 21:41:07 forum nodebb[26844]: This program comes with ABSOLUTELY NO WARRANTY.
Sep 11 21:41:07 forum nodebb[26844]: This is free software, and you are welcome to redistribute it under certain conditions.
Sep 11 21:41:07 forum nodebb[26844]: For the full license, please visit: http://www.gnu.org/copyleft/gpl.html
Sep 11 21:41:07 forum nodebb[26844]: Clustering enabled: Spinning up 1 process(es).
Sep 11 21:41:08 forum nodebb[26855]: 2022-09-11T21:41:08.002Z [4567/26855] - info: Initializing NodeBB v2.5.2 https://forum.example.com

Bước 8 - Cài đặt Nginx​

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

Nhập khóa ký của Nginx.
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/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Cập nhật hệ thống kho lưu trữ.
Mã:
$ sudo apt update
Cài đặt Nginx.
Mã:
$ sudo apt install nginx
Xác minh cài đặt.
Mã:
$ nginx -v
nginx version: nginx/1.22.0
Khởi động máy chủ Nginx.
Mã:
$ sudo systemctl start nginx

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

Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL. Bạn có thể cài đặt Certbot bằng kho lưu trữ của Ubuntu hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng tôi sẽ sử dụng phiên bản Snapd.

Ubuntu 22.04 đi kèm với Snapd được cài đặt theo mặc định. Chạy các lệnh sau để đả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 rằng lệnh Certbot có thể chạy bằng cách tạo liên kết tượng trưng đến /usr/bin thư mục.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Chạy lệnh sau để tạo SSL Chứng chỉ.
Mã:
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d forum.example.com
Lệnh trên sẽ tải chứng chỉ xuống thư mục /etc/letsencrypt/live/forum.example.com trên máy chủ của bạn.

Tạo nhóm Diffie-Hellman chứng chỉ.
Mã:
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Để kiểm tra xem quá trình gia hạn SSL có hoạt động tốt không, hãy chạy thử quy trình.
Mã:
$ sudo certbot renew --dry-run
Nếu không thấy lỗi nào, bạn đã hoàn tất. Chứng chỉ của bạn sẽ tự động gia hạn.

Bước 10 - Cấu hình Nginx​

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.

Tạo và mở tệp /etc/nginx/conf.d/nodebb.conf để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/conf.d/nodebb.conf
Dán mã sau vào đó. Thay thế forum.example.com bằng tên miền của bạn. Đảm bảo giá trị của client_max_body_size được đặt thành 25MB để đặt kích thước tải lên cho diễn đàn.
Mã:
server { listen 80 default_server; server_name forum.example.com; return 301 https://$server_name$request_uri;
}
server { listen 443 ssl http2; server_name forum.example.com; http2_push_preload on; # Enable HTTP/2 Server Push ssl_certificate /etc/letsencrypt/live/forum.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/forum.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/forum.example.com/chain.pem; ssl_session_timeout 1d; # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC). ssl_protocols TLSv1.2 TLSv1.3; # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to # prevent replay attacks. # # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data ssl_early_data on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:50m; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; client_max_body_size 25M; gzip on; gzip_min_length 1000; gzip_proxied off; gzip_types text/plain application/xml text/javascript application/javascript application/x-javascript text/css application/json; add_header X-Early-Data $tls1_3_early_data; location / { # Socket.IO Support proxy_set_header Connection "upgrade"; proxy_set_header Upgrade $http_upgrade; proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true; proxy_set_header X-Frame-Options SAMEORIGIN; proxy_pass http://127.0.0.1:4567; # no trailing slash proxy_redirect off; } location @nodebb { proxy_pass http://127.0.0.1:4567; } location ~ ^/assets/(.*) { root /var/www/html/nodebb/; try_files /build/public/$1 /public/$1 @nodebb; }
}
# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data { "~." $ssl_early_data; default "";
}
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Xác minh Nginx của bạn cấu hình.
Mã:
$ sudo nginx -t
Khởi động lại máy chủ Nginx.
Mã:
$ sudo systemctl restart nginx

Bước 11 - Truy cập và Cấu hình Diễn đàn​

Bạn có thể truy cập diễn đàn bằng cách truy cập URL https://forum.example.com trong trình duyệt của bạn. Bạn sẽ nhận được trang sau.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22309%22%3E%3C/svg%3E


Nhấp vào trang đăng nhập và nhập thông tin đăng nhập của quản trị viên mà bạn đã tạo ở bước 6.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22371%22%3E%3C/svg%3E


Bạn sẽ được đăng nhập. Tiếp theo, nhấp vào biểu tượng ngoài cùng bên phải trên đầu thanh menu để truy cập bảng quản trị.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22502%22%20height=%22102%22%3E%3C/svg%3E


Từ đây, bạn có thể quản lý diễn đàn. Mở rộng bằng cách cài đặt các chủ đề và plugin.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22327%22%3E%3C/svg%3E


Sau khi cài đặt bất kỳ chủ đề và plugin nào, bạn phải xây dựng lại và khởi động lại diễn đàn bằng nút ở góc trên bên phải của bảng điều khiển quản trị như được hiển thị ở đây.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22214%22%20height=%2290%22%3E%3C/svg%3E


Hãy đảm bảo cấu hình dịch vụ email của bạn bằng cách vào Bảng điều khiển >> Cài đặt >> Email để người dùng diễn đàn của bạn có thể nhận email. Chọn các cài đặt sau để đảm bảo thiết lập cài đặt gửi email tối ưu.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22538%22%3E%3C/svg%3E


Cuộn xuống trang và chọn trình gửi thư tùy chỉnh từ danh sách thả xuống hoặc sử dụng Trình gửi thư tùy chỉnh nếu dịch vụ SMTP của bạn không có trong danh sách. Đối với hướng dẫn của chúng tôi, chúng tôi đang sử dụng dịch vụ SES.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22413%22%3E%3C/svg%3E


Nhấp vào biểu tượng lưu đĩa mềm ở góc dưới bên phải để lưu cài đặt.

Cuộn xuống cuối trang để gửi email thử nghiệm. Theo mặc định, nó sẽ gửi mẫu email bị cấm. Bạn có thể chọn bất kỳ mẫu email nào khác để thử nghiệm. Chúng tôi sẽ gửi thư chào mừng.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22712%22%20height=%22163%22%3E%3C/svg%3E


Bạn sẽ nhận được email thử nghiệm như bên dưới để xác nhận cài đặt.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22711%22%20height=%22454%22%3E%3C/svg%3E

Kết luận​

Đây là kết luận của chúng tôi hướng dẫn cài đặt diễn đàn NodeBB bằng cơ sở dữ liệu PostgreSQL và Nginx trên máy chủ Ubuntu 22.04. 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