Cách cài đặt NodeBB với Nginx Proxy trên Debian 12

theanh

Administrator
Nhân viên
NodeBB là phần mềm diễn đàn nguồn mở được viết bằng JavaScript và Node.js. Nó sử dụng MongoDB làm cơ sở dữ liệu mặc định. NodeBB cung cấp nhiều tính năng, chẳng hạn như thông báo thời gian thực qua web socket, tích hợp phương tiện truyền thông xã hội và cả API REST đầy đủ.

Hướng dẫn này sẽ chỉ cho bạn cách cài đặt NodeBB trên máy chủ Debian 12 với MongoDB làm cơ sở dữ liệu và Nginx làm proxy ngược.

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

Trước khi bắt đầu, hãy đảm bảo rằng bạn có những điều sau:
  • Máy chủ Debian 12.
  • Người dùng không phải root có quyền sudo.
  • Tên miền trỏ đến địa chỉ IP của máy chủ.

Cài đặt các phụ thuộc​

Để bắt đầu quy trình, bạn sẽ cài đặt các phụ thuộc cho NodeBB. Điều này bao gồm Node.js, NPM (Trình quản lý gói Node.js) và máy chủ web Nginx từ kho lưu trữ Debian. Đối với MongoDB, bạn sẽ cài đặt nó thông qua kho lưu trữ MongoDB chính thức.

Đầu tiên, hãy chạy lệnh sau để cài đặt các gói gnupg và curl vào hệ thống Debian của bạn.
Mã:
sudo apt install gnupg curl -y
Thêm khóa GPG MongoDB và kho lưu trữ bằng lệnh sau lệnh:
Mã:
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \
--dearmor
Mã:
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

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


Bây giờ hãy cập nhật chỉ mục gói Debian của bạn và cài đặt MongoDB, Node.js, NPM, Nginx và Git. Nhập Y để xác nhận cài đặt.
Mã:
sudo apt update
sudo apt install mongodb-org nodejs npm git nginx

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


Sau khi cài đặt hoàn tất, hãy tải lại trình quản lý systemd bằng sau:
Mã:
sudo systemctl daemon-reload
Bây giờ hãy chạy lệnh bên dưới để khởi động, kích hoạt và xác minh trạng thái dịch vụ MongoDB.
Mã:
sudo systemctl enable --now mongod
sudo systemctl status mongod
Đầu ra sau đây xác nhận rằng MongoDB đang chạy.


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


Tiếp theo, hãy kiểm tra trạng thái dịch vụ Nginx bằng lệnh bên dưới. Bạn sẽ thấy Nginx được bật và đang chạy trên hệ thống của bạn.
Mã:
sudo systemctl is-enabled nginx
sudo systemctl status nginx

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


Cuối cùng, hãy kiểm tra phiên bản Node.js và NPM bằng sau:
Mã:
sudo node-v
sudo npm -v
Bạn có thể thấy bên dưới rằng Node.js 18 và NPM 9 đã được cài đặt.


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

Thiết lập máy chủ MongoDB​

Trong phần này, bạn sẽ bật xác thực MongoDB, tạo người dùng quản trị viên mới cho MongoDB, sau đó tạo cơ sở dữ liệu và người dùng mới để cài đặt NodeBB.

Đăng nhập vào máy chủ MongoDB bằng lệnh bên dưới.
Mã:
mongosh
Chạy truy vấn sau để chuyển sang cơ sở dữ liệu 'admin' và tạo người dùng quản trị viên mới 'admin' cho MongoDB. Đảm bảo thay đổi mật khẩu 'MongoDBAdminPass' bằng mật khẩu mới.
Mã:
use admin
db.createUser( { user: "admin", pwd: "MongoDBAdminPass", roles: [ { role: "root", db: "admin" } ] } )


Tiếp theo, tạo cơ sở dữ liệu mới và người dùng 'nodebb' với mật khẩu 'NodeBBPassword'. Cơ sở dữ liệu và người dùng này sẽ được sử dụng để cài đặt NodeBB.
Mã:
use nodebb
db.createUser( { user: "nodebb", pwd: "NodeBBPassword", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )
Bây giờ hãy nhập 'quit()' để thoát khỏi MongoDB.


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


Tiếp theo, hãy mở cấu hình MongoDB '/etc/mongod.conf' bằng trình chỉnh sửa nano.
Mã:
sudo nano /etc/mongod.conf
Bật xác thực MongoDB bằng cách thêm cấu hình sau.
Mã:
security:
 authorization: enabled
Lưu và đóng tệp khi hoàn tất.

Bây giờ hãy chạy lệnh bên dưới để khởi động lại dịch vụ MongoDB và áp dụng các thay đổi mới của bạn. Sau khi lệnh được thực thi, xác thực MongoDB sẽ được bật.
Mã:
sudo systemctl restart mongod
Để đảm bảo cấu hình MongoDB của bạn thành công, hãy đăng nhập vào MongoDB với người dùng 'nodebb' vào cơ sở dữ liệu 'nodebb'. Nhập mật khẩu khi được yêu cầu.
Mã:
mongosh "mongodb://127.0.0.1:27017" --username nodebb --authenticationDatabase nodebb
Sau khi đăng nhập, hãy chạy truy vấn bên dưới để kiểm tra kết nối của bạn và thoát khỏi MongoDB.
Mã:
db.runCommand( { connectionStatus: 1, showPrivileges: false } )
quit()
Trong đầu ra sau, bạn có thể thấy được xác thực là 'nodebb' đối với cơ sở dữ liệu 'nodebb'.


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

Cài đặt NodeBB​

Sau khi hoàn tất cấu hình MongoDB, bạn sẽ tải xuống và cài đặt NodeBB. Bạn sẽ tạo một người dùng chuyên dụng cho NodeBB, tải xuống và cài đặt các phụ thuộc của NodeBB, sau đó thiết lập tệp dịch vụ cho cài đặt NodeBB của bạn.

Thêm người dùng hệ thống mới 'nodebb' với thư mục gốc mặc định '/opt/nodebb' bằng lệnh sau.
Mã:
sudo adduser --system --no-create-home --home=/opt/nodebb --group nodebb

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


Bây giờ hãy tải xuống mã nguồn NodeBB v3 vào thư mục '/opt/nodebb' bằng git và thay đổi quyền sở hữu thư mục '/opt/nodebb' thành người dùng 'nodebb'.
Mã:
git clone -b v3.x https://github.com/NodeBB/NodeBB.git /opt/nodebb
sudo chown -R nodebb:nodebb /opt/nodebb
Vào thư mục '/opt/nodebb' và cấu hình cài đặt NodeBB của bạn bằng lệnh bên dưới.
Mã:
cd /opt/nodebb
sudo su -s /bin/bash -c "./nodebb setup" nodebb
  • Nhập tên miền của bạn cho NodeBB.
  • Giữ bí mật NodeBB theo mặc định và nhấn ENTER.
  • Nhập no vào vô hiệu hóa việc sử dụng plugin ẩn danh.
  • Chọn cơ sở dữ liệu là MongoDB.
  • Nhập cơ sở dữ liệu MongoDB bằng chuỗi url: mongodb://nodebb:[emailprotected]:27017/nodebb.
  • Nhập tên người dùng quản trị viên và địa chỉ email của bạn cho NodeBB.
  • Nhập mật khẩu của bạn và lặp lại.
Sau khi quá trình hoàn tất, bạn sẽ thấy đầu ra 'Thiết lập NodeBB đã hoàn tất'. Bạn cũng có thể xem lệnh chạy NodeBB.


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


Tiếp theo, thực hiện lệnh bên dưới để khởi động hoặc dừng NodeBB. Bạn có thể sử dụng lệnh này khi cần bắt đầu dừng NodeBB theo cách thủ công.
Mã:
sudo su -s /bin/bash -c "./nodebb start" nodebb
sudo su -s /bin/bash -c "./nodebb stop" nodebb

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


Để quản lý NodeBB dễ dàng hơn, bạn sẽ tạo một tệp dịch vụ systemd mới cho NodeBB. Với lệnh này, cài đặt NodeBB của bạn sẽ chạy ở chế độ nền và bạn có thể quản lý nó bằng lệnh systemctl.

Tạo tệp dịch vụ systemd mới '/etc/systemd/system/nodebb.service' bằng lệnh nano editor.
Mã:
sudo nano /etc/systemd/system/nodebb.service
Chèn cấu hình sau vào tệp:
Mã:
[Unit]
Description=NodeBB
Documentation=https://docs.nodebb.org
After=system.slice multi-user.target mongod.service

[Service]
Type=simple
User=nodebb

StandardError=syslog
SyslogIdentifier=nodebb

Environment=NODE_ENV=production
WorkingDirectory=/opt/nodebb
ExecStart=/usr/bin/env node loader.js --no-silent --no-daemon
Restart=always

[Install]
WantedBy=multi-user.target
Lưu và đóng tệp.

Bây giờ hãy chạy lệnh bên dưới để tải lại trình quản lý systemd và áp dụng tệp dịch vụ NodeBB mới.
Mã:
sudo systemctl daemon-reload
Sau đó, hãy khởi động và kích hoạt dịch vụ 'nodebb' bằng lệnh systemctl sau lệnh.
Mã:
sudo systemctl start nodebb
sudo systemctl enable nodebb
Xác minh dịch vụ 'nodebb' bằng lệnh sau để đảm bảo dịch vụ đang chạy.
Mã:
sudo systemctl status nodebb
Bạn có thể thấy bên dưới NodeBB đang chạy ở chế độ nền như một dịch vụ systemd.




Thiết lập Nginx làm proxy ngược​

Lúc này, NodeBB đang chạy ở chế độ nền trên cổng '4567'. Bây giờ bạn sẽ tạo một khối máy chủ Nginx mới sẽ được sử dụng làm proxy ngược cho diễn đàn NodeBB của bạn. đảm bảo rằng bạn đã trỏ tên miền của mình đến địa chỉ IP máy chủ.

Tạo cấu hình khối máy chủ Nginx mới '/etc/nginx/sites-available/nodebb' bằng trình chỉnh sửa nano.
Mã:
sudo nano /etc/nginx/sites-available/nodebb
Thêm cấu hình sau để thiết lập Nginx làm proxy ngược cho NodeBB. Đảm bảo thay đổi tham số server_name bằng tên miền của bạn.
Mã:
server {
 listen 80;

 server_name forum.howtoforge.local;

 location / {
 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 Host $http_host;
 proxy_set_header X-NginX-Proxy true;

 proxy_pass http://127.0.0.1:4567;
 proxy_redirect off;

 # Socket.IO Support
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection "upgrade";
 }
}
Khi hoàn tất, hãy lưu tệp và thoát.

Bây giờ hãy kích hoạt tệp khối máy chủ 'nodebb' và kiểm tra cú pháp Nginx của bạn bằng lệnh sau:
Mã:
sudo ln -s /etc/nginx/sites-available/nodebb /etc/nginx/sites-enabled/
sudo nginx -t
Nếu bạn có cú pháp Nginx phù hợp, bạn sẽ thấy đầu ra 'cú pháp ổn - thử nghiệm thành công'.


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


Cuối cùng, hãy chạy lệnh bên dưới để khởi động lại dịch vụ Nginx và áp dụng các thay đổi của bạn.
Mã:
sudo systemctl restart nginx

Bảo mật NodeBB bằng HTTPS​

Trong hướng dẫn này, bạn sẽ bảo mật NodeBB bằng HTTPS thông qua Certbot và Letsencrypt. Nếu bạn đang sử dụng tên miền cục bộ, bạn có thể bỏ qua bước này hoặc bạn cũng có thể tạo chứng chỉ tự ký.

Cài đặt Certbot và plugin Certbot Nginx bằng lệnh apt sau. Nhập Y để tiếp tục cài đặt.
Mã:
sudo apt install certbot python3-certbot-nginx
Bây giờ hãy chạy lệnh certbot bên dưới để tạo chứng chỉ SSL cho tên miền NodeBB của bạn. Hãy đảm bảo thay đổi cả địa chỉ email và tên miền bằng thông tin của bạn.
Mã:
sudo certbot --nginx --agree-tos --no-eff-email --redirect --hsts --staple-ocsp --email [emailprotected] -d forum.hwdomain.i
Sau khi hoàn tất quy trình, cài đặt NodeBB của bạn sẽ được bảo mật tự động bằng HTTPS. Chứng chỉ SSL/TLS của bạn sẽ có trong thư mục '/etc/letsencrypt/live/domain.com'.

Truy cập NodeBB​

Truy cập https://forum.howtoforge.local/ bằng trình duyệt web của bạn và bạn sẽ thấy trang chỉ mục mặc định của NodeBB như sau:


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


Từ trang chủ, nhấp vào menu Đăng nhập và bạn sẽ thấy trang đăng nhập NodeBB. 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 nhập.


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


Nếu thành công, bạn sẽ thấy bảng điều khiển người dùng sau.


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


Nhấp vào menu Quản trị để truy cập bảng điều khiển quản trị NodeBB như sau đây:


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

Kết luận​

Xin chúc mừng! Bây giờ bạn đã cài đặt NodeBB trên máy chủ Debian 12. Bạn có NodeBB đang chạy với cơ sở dữ liệu MongoDB và proxy ngược Nginx. Bạn cũng bảo mật NodeBB bằng HTTPS thông qua Certbot và Letsencrypt.
 
Back
Bên trên