NodeBBเป็นฟอรัมที่ใช้ Node.js มันใช้ซ็อกเก็ตเว็บสำหรับการโต้ตอบแบบทันทีและการแจ้งเตือนแบบเรียลไทม์ รหัสที่มา NodeBB เป็นเจ้าภาพสาธารณะบนGithub คำแนะนำนี้จะนำคุณสู่กระบวนการติดตั้ง NodeBB บนอินสแตนซ์ Ubuntu 18.04 LTS Vultr ใหม่โดยใช้ Node.js, MongoDB เป็นฐานข้อมูล, Nginx เป็น reverse proxy และ Acme.sh สำหรับใบรับรอง SSL
ความต้องการ
NodeBB ต้องติดตั้งซอฟต์แวร์ต่อไปนี้:
- Git
- Node.js เวอร์ชั่น 6.9.0 หรือใหม่กว่า
- MongoDB เวอร์ชัน 2.6 ขึ้นไป
- Nginx
- RAM ขั้นต่ำ 1024MB
- ชื่อโดเมนที่มี
A
/ AAAA
บันทึกการตั้งค่า
ก่อนที่จะเริ่ม
ตรวจสอบเวอร์ชั่นของ Ubuntu
lsb_release -ds
# Ubuntu 18.04 LTS
สร้างnon-root
บัญชีผู้ใช้ใหม่ด้วยsudo
การเข้าถึงและเปลี่ยนเป็นบัญชี
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
หมายเหตุ : แทนที่johndoe
ด้วยชื่อผู้ใช้ของคุณ
ตั้งค่าเขตเวลา
sudo dpkg-reconfigure tzdata
ตรวจสอบให้แน่ใจว่าระบบของคุณทันสมัย
sudo apt update && sudo apt upgrade -y
ติดตั้งแพ็คเกจที่จำเป็น
sudo apt install -y git build-essential apt-transport-https
ติดตั้ง Node.js
NodeBB ขับเคลื่อนโดย Node.js ดังนั้นจึงจำเป็นต้องติดตั้ง แนะนำให้ทำการติดตั้งรุ่น LTS ปัจจุบันของ Node.js
ติดตั้ง Node.js จากที่เก็บ NodeSource
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt install -y nodejs
ตรวจสอบการติดตั้ง Node.js และ npm
node -v && npm -v
# v10.15.0
# 5.6.0
MongoDB เป็นฐานข้อมูลเริ่มต้นสำหรับ NodeBB
ติดตั้ง MongoDB
sudo apt install -y mongodb
ตรวจสอบเวอร์ชั่น
mongo --version | head -n 1 && mongod --version | head -n 1
# MongoDB shell version v3.6.3
# db version v3.6.3
สร้างฐานข้อมูล MongoDB และผู้ใช้สำหรับ NodeBB
เชื่อมต่อกับเซิร์ฟเวอร์ MongoDB ก่อน
mongo
สลับไปยังadmin
ฐานข้อมูลในตัว
> use admin
สร้างผู้ใช้ที่เป็นผู้ดูแลระบบ
> db.createUser( { user: "admin", pwd: "<Enter a secure password>", roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] } )
หมายเหตุ: แทนที่ตัวยึดตำแหน่ง<Enter a secure password>
ด้วยรหัสผ่านที่คุณเลือก
nodebb
เพิ่มฐานข้อมูลใหม่ที่เรียกว่า
> use nodebb
nodebb
ฐานข้อมูลจะถูกสร้างขึ้นและบริบทเปลี่ยนไป จากนั้นสร้างnodebb
ผู้ใช้ด้วยสิทธิ์ที่เหมาะสม
> db.createUser( { user: "nodebb", pwd: "<Enter a secure password>", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )
หมายเหตุ: อีกครั้งแทนที่ตัวยึดตำแหน่ง<Enter a secure password>
ด้วยรหัสผ่านที่คุณเลือก
ออกจากเปลือก Mongo
> quit()
รีสตาร์ท MongoDB และตรวจสอบว่าผู้ใช้ที่เป็นผู้ดูแลระบบที่สร้างขึ้นก่อนหน้านี้สามารถเชื่อมต่อได้
sudo systemctl restart mongodb.service
mongo -u admin -p your_password --authenticationDatabase=admin
ติดตั้ง Nginx เวอร์ชันล่าสุดจากที่เก็บอย่างเป็นทางการของ Nginx
wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s
printf "deb https://nginx.org/packages/mainline/ubuntu/ $(lsb_release -sc) nginx\ndeb-src https://nginx.org/packages/mainline/ubuntu/ $(lsb_release -sc) nginx\n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt update
sudo apt install -y nginx
ตรวจสอบเวอร์ชั่น
sudo nginx -v
# nginx version: nginx/1.15.0
เปิดใช้งานและเริ่ม Nginx
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
NodeBB 4567
โดยค่าเริ่มต้นทำงานบนพอร์ต เพื่อหลีกเลี่ยงการพิมพ์http://example.com:4567
เราจะกำหนดค่า Nginx เป็น reverse proxy สำหรับแอปพลิเคชัน NodeBB คำขอในพอร์ตทุก80
หรือ443
(ถ้าจะใช้ SSL) 4567
จะถูกส่งต่อไปยังท่าเรือ
รันsudo vim /etc/nginx/conf.d/nodebb.conf
และเติมด้วยการกำหนดค่าพร็อกซีย้อนกลับพื้นฐานด้านล่าง
server {
listen [::]:80;
listen 80;
server_name forum.example.com;
root /usr/share/nginx/html;
client_max_body_size 50M;
location /.well-known/acme-challenge/ {
allow all;
}
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_hide_header X-Powered-By;
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";
}
}
หมายเหตุ: อัปเดตserver_name
คำสั่งด้วยโดเมน / ชื่อโฮสต์ของคุณ
ตรวจสอบการกำหนดค่า
sudo nginx -t
โหลดซ้ำ Nginx
sudo systemctl reload nginx.service
ติดตั้งไคลเอนต์ Acme.sh และรับใบรับรอง Let's Encrypt (ตัวเลือก)
การรักษาความปลอดภัยฟอรัมของคุณด้วย HTTPS นั้นไม่จำเป็น แต่จะช่วยรักษาความปลอดภัยของการเข้าชมเว็บไซต์ของคุณ Acme.sh เป็นซอฟต์แวร์เชลล์ unix บริสุทธิ์สำหรับการรับใบรับรอง SSL จาก Let's Encrypt โดยไม่ต้องพึ่งพาศูนย์
ดาวน์โหลดและติดตั้ง Acme.sh
sudo mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail [email protected]
cd ~
source ~/.bashrc
ตรวจสอบเวอร์ชั่น
acme.sh --version
# v2.7.9
ได้รับอาร์เอสและ ECDSA forum.example.com
ใบรับรองสำหรับ
# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --home /etc/letsencrypt -d forum.example.com --webroot /usr/share/nginx/html --reloadcmd "sudo systemctl reload nginx.service" --accountemail [email protected] --ocsp-must-staple --keylength 2048
# ECDSA/ECC P-256
sudo /etc/letsencrypt/acme.sh --issue --home /etc/letsencrypt -d forum.example.com --webroot /usr/share/nginx/html --reloadcmd "sudo systemctl reload nginx.service" --accountemail [email protected] --ocsp-must-staple --keylength ec-256
หลังจากเรียกใช้คำสั่งข้างต้นใบรับรองและคีย์ของคุณจะอยู่ในไดเรกทอรีต่อไปนี้:
- อาร์เอส:
/etc/letsencrypt/forum.example.com
- ECC / ECDSA:
/etc/letsencrypt/forum.example.com_ecc
หลังจากได้รับใบรับรองจาก Let's Encrypt เราต้องกำหนดค่า Nginx เพื่อใช้งาน
รันsudo vim /etc/nginx/conf.d/nodebb.conf
อีกครั้งและกำหนดค่า Nginx เป็น HTTPS reverse proxy
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
listen [::]:80;
listen 80;
server_name forum.example.com;
root /usr/share/nginx/html;
client_max_body_size 50M;
location /.well-known/acme-challenge/ {
allow all;
}
# RSA
ssl_certificate /etc/letsencrypt/forum.example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/forum.example.com/forum.example.com.key;
# ECDSA
ssl_certificate /etc/letsencrypt/forum.example.com_ecc/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/forum.example.com_ecc/forum.example.com.key;
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";
}
}
ตรวจสอบการกำหนดค่า
sudo nginx -t
โหลดซ้ำ Nginx
sudo systemctl reload nginx.service
ติดตั้ง NodeBB
สร้างไดเรกทอรีรากของเอกสาร
sudo mkdir -p /var/www/nodebb
เปลี่ยนความเป็นเจ้าของของไดเรกทอรีไป/var/www/nodebb
johndoe
sudo chown -R johndoe:johndoe /var/www/nodebb
นำทางไปยังโฟลเดอร์รูทเอกสาร
cd /var/www/nodebb
โคลน NodeBB เวอร์ชันล่าสุดลงในโฟลเดอร์ root ของเอกสาร
git clone -b v1.10.x https://github.com/NodeBB/NodeBB.git .
เรียกใช้คำสั่งการตั้งค่า NodeBB และตอบคำถามแต่ละข้อเมื่อได้รับแจ้ง
./nodebb setup
หลังจากติดตั้ง NodeBB เสร็จแล้วให้เรียกใช้./nodebb start
เพื่อเริ่มเซิร์ฟเวอร์ NodeBB ของคุณด้วยตนเอง
./nodebb start
หลังจากคำสั่งนี้คุณจะสามารถเข้าถึงฟอรัมในเว็บเบราว์เซอร์ของคุณ
เรียกใช้ NodeBB เป็นบริการระบบ
เมื่อเริ่มต้นผ่าน./nodebb start
NodeBB จะไม่เริ่มต้นโดยอัตโนมัติอีกครั้งเมื่อระบบรีบูต เพื่อหลีกเลี่ยงปัญหานี้เราจะต้องตั้งค่า NodeBB เป็นบริการระบบ
หากทำงานให้หยุด NodeBB
./nodebb stop
สร้างnodebb
ผู้ใช้ที่ไม่มีสิทธิ์ใหม่
sudo adduser nodebb
เปลี่ยนความเป็นเจ้าของของ/var/www/nodebb
ไดเรกทอรีเป็นnodebb
ผู้ใช้
sudo chown -R nodebb:nodebb /var/www/nodebb
สร้างไฟล์กำหนดค่าnodebb.service
systemd หน่วย ไฟล์หน่วยนี้จะจัดการการเริ่มต้นของ NodeBB deamon เรียกใช้sudo vim /etc/systemd/system/nodebb.service
และเติมไฟล์ด้วยเนื้อหาต่อไปนี้:
[Unit]
Description=NodeBB
Documentation=https://docs.nodebb.org
After=system.slice multi-user.target mongod.service
[Service]
Type=forking
User=nodebb
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodebb
Environment=NODE_ENV=production
WorkingDirectory=/var/www/nodebb
PIDFile=/var/www/nodebb/pidfile
ExecStart=/usr/bin/env node loader.js
Restart=always
[Install]
WantedBy=multi-user.target
หมายเหตุ: ตั้งค่าชื่อผู้ใช้และเส้นทางไดเรกทอรีตามชื่อที่คุณเลือก
เปิดใช้งานในการบูตเครื่องและทันทีที่เริ่มต้นnodebb.service
nodebb.service
sudo systemctl enable nodebb.service
sudo systemctl start nodebb.service
ตรวจสอบnodebb.service
สถานะ
sudo systemctl status nodebb.service
sudo systemctl is-enabled nodebb.service
แค่นั้นแหละ. อินสแตนซ์ NodeBB ของคุณเปิดใช้งานแล้ว